大纲的新标题未保存
New title of outlines is not saved
我想使用 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"));
}
通过使用此代码,我能够将所有大纲更新为 "Title":
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 文件?
正如@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();
}
}
我想使用 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"));
}
通过使用此代码,我能够将所有大纲更新为 "Title":
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 文件?
正如@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();
}
}