我正在尝试使用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);
}
}
答案 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();
}
}