我有一些关于解析pdf和anfd的问题:
PDDocument.loadNonSeq
方法?
PDDocument.load()
然后 PDFTextStripper 逐页提取数据(pdfstripper已经setStartPage(n)
和setEndPage(n)
其中n = n + 1每页循环)。使用loadNonSeq而不是加载内存对内存更有效吗?例如
File pdfFile = new File("mypdf.pdf");
File tmp_file = new File("result.tmp");
PDDocument doc = PDDocument.loadNonSeq(pdfFile, new RandomAccessFile(tmp_file, READ_WRITE));
int index=1;
int numpages = doc.getNumberOfPages();
for (int index = 1; index <= numpages; index++){
PDFTextStripper stripper = new PDFTextStripper();
Writer destination = new StringWriter();
String xml="";
stripper.setStartPage(index);
stripper.setEndPage(index);
stripper.writeText(this.doc, destination);
.... //filtering text and then convert it in xml
}
此代码是否在正确的loadNonSeq之上使用,并且每页读取PDF页面而内存中没有vaste是一个好习惯吗? 我使用每页页面阅读,因为我需要使用DOM内存以XML格式编写文本(使用剥离技术,我决定为每个页面生成XML)
答案 0 :(得分:1)
- 使用包含临时/临时文件的
醇>PDDocument.loadNonSeq
方法的目的是什么?
PDFBox实现了两种读取PDF文件的方法。
loadNonSeq
是文档的加载方式load
是不应该加载文档的方式,但有人可能会尝试以这种方式修复具有损坏的交叉引用的文件。在2.0.0开发分支中,以前用于loadNonSeq
的算法现在用于load
,之前用于load
的算法不再使用。
- 我有大pdf,我需要解析它并获取文本内容。我使用
对内存效率更高 醇>PDDocument.load()
然后PDFTextStripper
逐页提取数据(pdfstripper有setStartPage(n)
和setEndPage(n)
,其中每个页面循环n = n + 1)。使用loadNonSeq
代替load
?
使用loadNonSeq
代替load
可能会提高多版本PDF的内存使用量,因为它只会读取仍然从引用表引用的对象,而load
可以在内存中保留更多内容。
我不知道,使用临时文件是否有很大的不同。
这是一个很好的做法,每页阅读PDF页面而没有内存中的内容吗?
内部PDFBox也会在页面后解析给定的范围页面。因此,如果您逐页处理剥离器输出,则可以逐页解析它。