在提取数据的同时保持Pdf的结构

时间:2016-06-03 07:34:23

标签: java pdf itext

enter image description here 我正在尝试使用iText库从PDF文档中提取数据。我能够提取PDF文档但是在解析时我无法维护PDF文件的结构。

我尝试使用Apache Tika和pdfbox,但我仍然无法维护文件的结构。我到目前为止尝试的代码如下:

import java.io.PrintWriter;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

public class ExtractPageContent {

    public static final String source = "C:/Users/xyz/Test.pdf";

    public static final String dest = "C:/Users/xyz/Test.txt";

    public void parsePdf(String pdf, String txt) throws IOException {
        PdfReader reader = new PdfReader(pdf);
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        PrintWriter out = new PrintWriter(new FileOutputStream(txt));
        TextExtractionStrategy strategy;
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
            out.println(strategy.getResultantText());
        }
        out.flush();
        out.close();
        reader.close();
    }
    public static void main(String[] args) throws IOException {
        new ExtractPageContent().parsePdf(source, dest);
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个..它对我有用。你需要使用PDFBox api。它是从pdf文档中提取文本的最佳库。

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

public void readText(){
try {
    PDDocument document = null;
    document = PDDocument.load(new File("test.pdf"));
    document.getClass();
    if (!document.isEncrypted()) {
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);
        PDFTextStripper Tstripper = new PDFTextStripper();
        String st = Tstripper.getText(document);
        System.out.println("Text:" + st);
    }
} catch (Exception e) {
    e.printStackTrace();
}
}