Class PDFParser

  • All Implemented Interfaces:
    Serializable, org.apache.tika.config.Initializable, org.apache.tika.parser.Parser

    public class PDFParser
    extends org.apache.tika.parser.AbstractParser
    implements org.apache.tika.config.Initializable
    PDF parser.

    This parser can process also encrypted PDF documents if the required password is given as a part of the input metadata associated with a document. If no password is given, then this parser will try decrypting the document using the empty password that's often used with PDFs. If the PDF contains any embedded documents (for example as part of a PDF package) then this parser will use the EmbeddedDocumentExtractor to handle them.

    As of Tika 1.6, it is possible to extract inline images with the EmbeddedDocumentExtractor as if they were regular attachments. By default, this feature is turned off because of the potentially enormous number and size of inline images. To turn this feature on, see PDFParserConfig.setExtractInlineImages(boolean).

    Please note that tables are not stored as entities within PDFs. It takes significant computation to identify and then correctly extract tables from PDFs. As of this writing, the PDFParser extracts text within tables, but it does not compute table cell boundaries or table row boundaries. Please see tabula for one project that tries to maintain the structure of tables represented in PDFs.

    See Also:
    Serialized Form
    • Field Detail

      • PASSWORD

        public static final String PASSWORD
        Deprecated.
        Supply a PasswordProvider on the ParseContext instead
        Metadata key for giving the document password to the parser.
        Since:
        Apache Tika 0.5
        See Also:
        Constant Field Values
    • Constructor Detail

      • PDFParser

        public PDFParser()
    • Method Detail

      • getSupportedTypes

        public Set<org.apache.tika.mime.MediaType> getSupportedTypes​(org.apache.tika.parser.ParseContext context)
        Specified by:
        getSupportedTypes in interface org.apache.tika.parser.Parser
      • parse

        public void parse​(InputStream stream,
                          ContentHandler handler,
                          org.apache.tika.metadata.Metadata metadata,
                          org.apache.tika.parser.ParseContext context)
                   throws IOException,
                          SAXException,
                          org.apache.tika.exception.TikaException
        Specified by:
        parse in interface org.apache.tika.parser.Parser
        Throws:
        IOException
        SAXException
        org.apache.tika.exception.TikaException
      • setPDFParserConfig

        public void setPDFParserConfig​(PDFParserConfig config)
      • setEnableAutoSpace

        public void setEnableAutoSpace​(boolean v)
        If true (the default), the parser should estimate where spaces should be inserted between words. For many PDFs this is necessary as they do not include explicit whitespace characters.
      • getExtractAnnotationText

        public boolean getExtractAnnotationText()
        Deprecated.
        If true, text in annotations will be extracted.
      • setExtractAnnotationText

        public void setExtractAnnotationText​(boolean v)
        If true (the default), text in annotations will be extracted.
      • setSuppressDuplicateOverlappingText

        public void setSuppressDuplicateOverlappingText​(boolean v)
        If true, the parser should try to remove duplicated text over the same region. This is needed for some PDFs that achieve bolding by re-writing the same text in the same area. Note that this can slow down extraction substantially (PDFBOX-956) and sometimes remove characters that were not in fact duplicated (PDFBOX-1155). By default this is disabled.
      • setSortByPosition

        @Field
        public void setSortByPosition​(boolean v)
        If true, sort text tokens by their x/y position before extracting text. This may be necessary for some PDFs (if the text tokens are not rendered "in order"), while for other PDFs it can produce the wrong result (for example if there are 2 columns, the text will be interleaved). Default is false.
      • setOcrStrategy

        @Field
        public void setOcrStrategy​(String ocrStrategyString)
      • setOcrImageType

        @Field
        public void setOcrImageType​(String imageType)
      • setInitializableProblemHandler

        public void setInitializableProblemHandler​(org.apache.tika.config.InitializableProblemHandler initializableProblemHandler)
      • setMaxMainMemoryBytes

        @Field
        public void setMaxMainMemoryBytes​(long maxMainMemoryBytes)
      • initialize

        public void initialize​(Map<String,​org.apache.tika.config.Param> params)
                        throws org.apache.tika.exception.TikaConfigException
        This is a no-op. There is no need to initialize multiple fields. The regular field loading should happen without this.
        Specified by:
        initialize in interface org.apache.tika.config.Initializable
        Parameters:
        params - params to use for initialization
        Throws:
        org.apache.tika.exception.TikaConfigException
      • checkInitialization

        public void checkInitialization​(org.apache.tika.config.InitializableProblemHandler handler)
                                 throws org.apache.tika.exception.TikaConfigException
        Specified by:
        checkInitialization in interface org.apache.tika.config.Initializable
        Throws:
        org.apache.tika.exception.TikaConfigException