【发布时间】:2020-11-12 10:03:29
【问题描述】:
我想在合并 pdf 文件时设置页码。页码段落将由某人定义他想要的自定义样式。现在我可以在段落中添加文本(如doc.add(paragraph.add(text))),但我无法替换它。
public static byte[] mergePdf(Map<String, PdfDocument> filesToMerge, Paragraph paragraph) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(baos));
Document doc = new Document(pdfDoc);
pdfDoc.initializeOutlines();
PdfPageFormCopier formCopier = new PdfPageFormCopier();
int page = 1;
for (Map.Entry<String, PdfDocument> entry : filesToMerge.entrySet()) {
String title = entry.getKey();
PdfDocument srcDoc = entry.getValue();
int numberOfPages = srcDoc.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++, page++) {
Text text = new Text(String.format("page %d", page));
srcDoc.copyPagesTo(i, i, pdfDoc, formCopier);
if (i == 1) {
text.setDestination("p" + page);
PdfOutline rootOutLine = pdfDoc.getOutlines(false);
PdfOutline outline = rootOutLine.addOutline(title);
outline.addDestination(PdfDestination.makeDestination(new PdfString("p" + page)));
}
// I want do like "doc.add(paragraph.set(text))";
// paragraph already have been set position,font,fontSize and so on. SO I dont want to "new Paragraph(text)"
doc.add(paragraph.add(text));
}
}
for (PdfDocument srcDoc : filesToMerge.values()) {
srcDoc.close();
}
doc.close();
return baos.toByteArray();
}
【问题讨论】:
-
那么到底是什么问题?您想更改
paragraph的内容吗?为什么不立即使用所需的内容? -
@mkl 抱歉,我不是以英语为母语的用户。我想更改已配置位置、边距、字体、字体大小的段落的内容。
-
恐怕
Paragraph类不是为此而设计的,它只允许添加 附加内容,不能替换 现有内容。考虑使用帮助方法创建一个Paragraph实例,该实例具有所需的位置、边距、字体和字体大小,但还没有内容。 -
@mkl 你是对的,谢谢。