1

我对解析pdf和fd有一些疑问:

  1. 使用的目的是什么

PDDocument.loadNonSeq包含临时/临时文件的方法?

  1. 我有很大的 pdf,我需要解析它并获取文本内容。我使用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 页面是一种好习惯吗?我使用逐页阅读,因为我需要使用 DOM 内存在 XML 中编写文本(使用剥离技术,我决定为每个页面生成一个 XML)

4

1 回答 1

2
  1. PDDocument.loadNonSeq使用包含临时/临时文件的方法的目的是什么?

PDFBox 实现了两种读取 PDF 文件的方法。

  • loadNonSeq是应该加载文档的方式
  • load是不应该加载文档的方式,但可以尝试以这种方式修复交叉引用损坏的文件

在 2.0.0 开发分支中,以前用于的算法loadNonSeq现在用于,不再使用load以前用于的算法。load

  1. 我有很大的 pdf,我需要解析它并获取文本内容。我使用PDDocument.load()然后PDFTextStripper逐页提取数据(pdfstripper 已经得到setStartPage(n)setEndPage(n)其中 n=n+1 每页循环)。loadNonSeq改用内存更有效load吗?

使用loadNonSeq而不是load可以提高多修订 PDF 的内存使用率,因为它只读取仍然从引用表中引用的对象,而load可以在内存中保留更多。

不过,我不知道使用暂存文件是否有很大的不同。

在没有大量内存的情况下每页阅读PDF页面是一种好习惯吗?

PDFBox 在内部也逐页解析给定的范围页面。因此,如果您逐页处理剥离器输出,则可以逐页解析它。

于 2015-10-15T15:52:25.600 回答