package com.sun.pdfview.action; import java.io.IOException; import com.sun.pdfview.PDFDestination; import com.sun.pdfview.PDFObject; import com.sun.pdfview.PDFParseException; /***************************************************************************** * Utility class for parsing values from a PDFObject * * @author Katja Sondermann * @since 08.07.2009 ****************************************************************************/ public class PdfObjectParseUtil { /************************************************************************* * Parse a String value with the given key from parent object. If it's mandatory * and not available, an exception will be thrown. * @param key * @param parent * @param mandatory * @return String - can be <code>null</code> if not mandatory * @throws IOException - in case of a parsing error ************************************************************************/ public static String parseStringFromDict(String key, PDFObject parent, boolean mandatory) throws IOException{ PDFObject val = parent; while (val.getType() == PDFObject.DICTIONARY) { val = val.getDictRef(key); if(val == null){ if(mandatory){ throw new PDFParseException(key + "value could not be parsed : " + parent.toString()); } return null; } } return val.getStringValue(); } /************************************************************************* * Parse a Boolean value with the given key from parent object. If it's mandatory * and not available, an exception will be thrown. * @param key * @param parent * @param mandatory * @return boolean - <code>false</code> if not available and not mandatory * @throws IOException ************************************************************************/ public static boolean parseBooleanFromDict(String key, PDFObject parent, boolean mandatory) throws IOException{ PDFObject val = parent.getDictRef(key); if(val == null){ if(mandatory){ throw new PDFParseException(key + "value could not be parsed : " + parent.toString()); } return false; } return val.getBooleanValue(); } /************************************************************************* * Parse a integer value with the given key from parent object. If it's mandatory * and not available, an exception will be thrown. * @param key * @param parent * @param mandatory * @return int - returns "0" in case the value is not a number * @throws IOException ************************************************************************/ public static int parseIntegerFromDict(String key, PDFObject parent, boolean mandatory) throws IOException{ PDFObject val = parent.getDictRef(key); if(val == null){ if(mandatory){ throw new PDFParseException(key + "value could not be parsed : " + parent.toString()); } return 0; } return val.getIntValue(); } /************************************************************************* * Parse a destination object * @param key * @param parent * @param root * @param mandatory * @return PDFDestination - can be <code>null</code> if not mandatory * @throws IOException ************************************************************************/ public static PDFDestination parseDestination(String key, PDFObject parent, PDFObject root, boolean mandatory) throws IOException{ PDFObject destObj = parent.getDictRef(key); if (destObj == null) { if(mandatory){ throw new PDFParseException("Error parsing destination " + parent); } return null; } return PDFDestination.getDestination(destObj, root); } }