【问题标题】:How to get correct page numbering when merging PDFs with PDFBox?将 PDF 与 PDFBox 合并时如何获得正确的页码?
【发布时间】:2022-01-06 12:39:57
【问题描述】:

我正在将多个 PDF 与 PDFBox 的PDFMergerUtility 合并。

        try (PDDocument result = new PDDocument()) {
          result.setVersion(1.5f);
          PDFMergerUtility merger = new PDFMergerUtility();

          for (PrintableDocument pd : ivDocuments) {
            if (pd.getData() == null)
              continue;
            try (PDDocument pdd = PDDocument.load(pd.getData())) {
              merger.appendDocument(result, pdd);
            }
          }

          result.save(os);
        }

这很好用,除了一个细节。在某些 PDF 查看器(Firefox、SumatraPDF、Chrome)中,页码显示不正确。例如,如果我将三个文档合并为三个页面,则生成的页码为:

1
2
3
1
2
3
1
2
3

而不是

1
2
3
4
5
6
7
8
9

受影响的查看者似乎是从 PDF 中的某些元数据中提取页码信息,而不是自己计算。

有没有办法用 PDFBox 解决这个问题?

【问题讨论】:

  • 在文档目录中。见PDDocumentCatalog.getPageLabels() 和PDPageLabels
  • 是的。重新编号必须在单独的步骤中完成(或者只是删除页面标签(这些都是可选的))
  • 谢谢,我不知道这些叫做页面标签。

标签: java pdf pdfbox


【解决方案1】:

感谢 Codo,我最终得到了以下解决方案:

          PDPageLabels pageLabels = new PDPageLabels(result);
          PDPageLabelRange pageLabelRange = new PDPageLabelRange();
          pageLabelRange.setStyle(PDPageLabelRange.STYLE_DECIMAL);
          pageLabelRange.setStart(1);
          pageLabels.setLabelItem(0, pageLabelRange);
          result.getDocumentCatalog().setPageLabels(pageLabels);

以下是创建页面标签的更多示例:https://simplesolution.dev/creating-pdf-document-page-labels-in-java-with-apache-pdfbox/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多