有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不保存大纲的java新标题

我想用iText 7更改大纲的标题。我已经编写了以下代码,但在生成的pdf中没有任何更改。为什么?

PdfDocument pdfDocument = new PdfDocument(
    new PdfReader(INPUT),
    new PdfWriter(OUTPUT),
    new StampingProperties().useAppendMode());

try (pdfDocument) {
   List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
   outlines.forEach(o -> o.setTitle("Title"));
}

共 (2) 个答案

  1. # 1 楼答案

    正如@mkl在其评论中正确指出的那样,在append模式下工作会对要标记的修改对象施加额外的要求。对于大多数操作,iText应该在幕后进行,但在本例中,它没有这样做,这是一个bug。不过,有一个简单的解决方案。您可以获取必要的PDF对象并将其标记为已修改。以下是完整的解决方案:

    PdfDocument pdfDocument = new PdfDocument(
        new PdfReader(INPUT),
        new PdfWriter(OUTPUT),
        new StampingProperties().useAppendMode());
    
    try (pdfDocument) {
        List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
        for (PdfOutline outline : outlines) {
            outline.setTitle("Title");
            outline.getContent().setModified();
        }
    }
    
  2. # 2 楼答案

    通过使用此代码,我能够将所有大纲更新为“标题”:

    try (PdfDocument pdfDocument = new PdfDocument(new PdfReader(INPUT_FILE), 
            new PdfWriter(OUTPUT_FILE))) {
        List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
        outlines.forEach(o -> o.setTitle("Title"));
    }
    

    如何初始化pdfDocument?也许你可以上传PDF文件