无法解析PDF文件中的文本和图像

时间:2018-12-13 14:23:07

标签: java pdf

我已经阅读了tika文档。我找到一种提取文本的解决方案。但它不打印返回图像。

.java文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.ocr.TesseractOCRConfig;
import org.apache.tika.parser.pdf.PDFParserConfig;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.SAXException;

public class Imageextractor3 {

     public static void main(String[] args)
                throws IOException, TikaException, SAXException {
            Parser parser = new AutoDetectParser();
            BodyContentHandler handler = new BodyContentHandler(Integer.MAX_VALUE);

            TesseractOCRConfig config = new TesseractOCRConfig();
            PDFParserConfig pdfConfig = new PDFParserConfig();
            pdfConfig.setExtractInlineImages(true);

            ParseContext parseContext = new ParseContext();
            parseContext.set(TesseractOCRConfig.class, config);
            parseContext.set(PDFParserConfig.class, pdfConfig);
            //need to add this to make sure recursive parsing happens!
            parseContext.set(Parser.class, parser);


            File file=new File("C://Users//Vaibhav Shukla//Desktop//8577.00.pdf");
            System.out.println(file);

            FileInputStream stream = new FileInputStream(new File("C://Users//Vaibhav Shukla//Desktop//pdfs//hh.pdf"));
            Metadata metadata = new Metadata();
            parser.parse(stream, handler, metadata, parseContext);
            System.out.println(metadata);
            String content = handler.toString();
            FileOutputStream fos=new FileOutputStream("C://Users//Vaibhav Shukla//Desktop//pdfs//hd.doc");
            fos.write(content.getBytes());
            System.out.println("===============");
            System.out.println(content);
            System.out.println("Done");
        }

}

我需要建议如何添加可以检测pdf文件中图像的功能

1 个答案:

答案 0 :(得分:0)

一种快速解决方案,可以转换嵌入pdf的提取图像。

public void extract(File file) throws IOException { 
 PDDocument doc=new PDDocument().load(file);
 Iterator<PDPage> itr=doc.getDocumentCatalog().getPages().iterator();
 while(itr.hasNext())
 {
    PDResources res=itr.next().getResources();
    Iterable<COSName> cName=res.getXObjectNames();
    Iterator<COSName> citr=cName.iterator();
        while(citr.hasNext())
        {
            String imageName= citr.next().getName();
            System.out.println(imageName);
            COSName cosName=COSName.getPDFName(imageName);
            PDImageXObject im = (PDImageXObject) res.getXObject(cosName);
            File ff = new 
            File("C://Users//workspace//Desktop//pdfs//"+imageName+".png");
            BufferedImage bi=im.getImage();
            ImageIO.write(bi,"png",ff);
        }

 }}