我有一些关于解析pdf和如何:
- 使用 的目的是什么
PDDocument.loadNonSeq
方法,包括一个临时文件?
- 我有大的pdf,我需要解析它并获得文本内容。我使用
PDDocument.load()
,然后PDFTextStripper逐页提取数据(pdfstripper有setStartPage(n)
和setEndPage(n)
其中n=n+1(每页循环)。使用loadNonSeq代替load是否更有效? 例如
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页每页没有浪费内存?我使用逐页读取,因为我需要使用DOM内存编写XML文本(使用剥离技术,我决定为每个页面生成XML)
- 使用
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内部也会逐页解析给定的范围。因此,如果逐页处理剥离程序输出,那么逐页解析它当然是可以的。