【问题标题】:How to split a large PDF(document bundle) into chunks of pages using the index如何使用索引将大型 PDF(文档包)拆分为页面块
【发布时间】:2019-08-19 14:52:37
【问题描述】:

我正在尝试拆分大型 PDF 类型的文档包。这个 PDF 有一个索引页面,它链接到不同的页面,例如。

索引:

主题 1:第 1-5 页

主题 2:第 12-25 页

我目前正在使用 PDFbox 加载 PDF 并获取页码,但我正在寻找一种方法来获取元数据以允许我按主题对页面进行分组

如果有办法检索文档结构,那么我可以将文档分成更小的 PDF,例如。主题 1 现在变成单个 PDF,第 1-5 页合并。

代码如下:

PDDocumentOutline outline = pdocument.getDocumentCatalog().getDocumentOutline();

for (PDOutlineItem item : outline.children()) {

String pageTitle=item.getTitle(); //Topic 1

PDPage destinationPage=item.findDestinationPage(pdocument);

//How do I get actual pageNumber of Page?

//How do I get Destination reference string ie. pg 1-5


}

【问题讨论】:

    标签: java pdf pdfbox


    【解决方案1】:

    您可能想查看 PDF 1.7 规范中的第 12.3.3 节“文档大纲”。文档大纲是一个树形结构,提供到文档各个部分的链接。例如,如果您将 LibreOffice 文档转换为 PDF,则标题将用于大纲。

    如果你的PDF有这样的大纲,你可以用它来分割它。

    如果它只有一个索引页,可能有 PDF 标签(参见第 14.8 节“标签 PDF”)可用于轻松获取所需数据。

    如果没有 PDF 标签,您可能需要解析文本并对其进行分析以获取所需信息。

    【讨论】:

    • 我已经能够获得文档的大纲,它为我提供了每个 PDOutlineItem 的目标页面。如何获取每页的实际页码。我正在尝试对页面进行分组(例如,主题 1 = 第 1 页到第 5 页)
    • doc.getPages().indexOf()。结果从 0 开始。
    【解决方案2】:
    PDDocumentOutline outline = pdocument.getDocumentCatalog().getDocumentOutline();
    PDPageTree pageTree = pdocument.getPages();
    
    for (PDOutlineItem item : outline.children()) {
    
    String pageTitle=item.getTitle(); //Topic 1
    
    PDPage destinationPage=item.findDestinationPage(pdocument);
    
    PDPage currentPage = item.findDestinationPage(pdocument);
    int startPg = pageTree.indexOf(currentPage);
    
    PDPage nextIndexPage = item.getNextSibling().findDestinationPage(pdocument);
    
    int endPg = pageTree.indexOf(nextIndexPage);
    
    PDDocument document = new PDDocument();
    
    for (int i = startPg; i < endPg; i++) {
    
        PDPage incomingPage = pageTree.get(i);
    
        document.addPage(incomingPage);
    
        }
    
    document.save(targetPath + item.getTitle() + ".pdf");
    document.close();
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多