未保存新的大纲标题

问题描述 投票:0回答:2

我想使用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"));
}
java pdf itext itext7
2个回答
1
投票

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

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文件?


0
投票

正如@mkl在其注释中正确指出的那样,以附加模式工作对要标记为这样的已修改对象施加了附加要求。对于大多数操作,iText应该在后台进行操作,但在这种情况下则不这样做,这是一个错误。不过,有一个简单的解决方案。您可以获取必要的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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.