如何使用PDDocument.loadNonSeq,大型pdf剥离/解析文本技术



我有一些关于解析pdf和如何:

  1. 使用
  2. 的目的是什么

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)

    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内部也会逐页解析给定的范围。因此,如果逐页处理剥离程序输出,那么逐页解析它当然是可以的。

    相关内容

    • 没有找到相关文章

    最新更新