我正在尝试将页面附加到现有PDF文档的末尾。我搜索过,但没有找到确凿的答案。 我首先检查pdf是否不存在,或者是否要更换。如果要追加现有的pdf,我创建PDDocument,加载现有文件。在方法" addImageAsNewPage"中,我使用PDPageContentStream,选择了APPEND模式。
似乎正在覆盖pdf文件的内容,而不是将其附加到最后一页。在尝试追加之前,pdf文件有2页。在尝试附加页面后,我应该在文档中有4页。
有没有人有任何想法?这似乎应该是直截了当的,然而,我发现它有些违反直觉。
以下是相关代码:
public static void tiffToPdf(String j_source, String j_target,
String j_replace, String message) {
PDDocument doc = null;
File target = new File(j_target);
if (!replace || !target.exists()) {
doc = new PDDocument();
} else {
doc = PDDocument.load(target);
}
for (BufferedImage image : extractedImages) {
addImageAsNewPage(doc, image, replace);
}
doc.save(j_target);
doc.close();
private static void addImageAsNewPage(PDDocument doc, BufferedImage bufferedImage, boolean j_replace) throws Exception{
PDImageXObject image = LosslessFactory.createFromImage(doc, bufferedImage);
PDRectangle pageSize = PDRectangle.A4;
int originalWidth = image.getWidth();
int originalHeight = image.getHeight();
float pageWidth = pageSize.getWidth();
float pageHeight = pageSize.getHeight();
float ratio = Math.min(pageWidth / originalWidth, pageHeight / originalHeight);
float scaledWidth = originalWidth * ratio;
float scaledHeight = originalHeight * ratio;
float x = (pageWidth - scaledWidth ) / 2;
float y = (pageHeight - scaledHeight) / 2;
PDPage page = new PDPage(pageSize);
doc.addPage(page);
if (j_replace) {
try (PDPageContentStream contents = new PDPageContentStream(doc,
page)) {
contents.drawImage(image, x, y, scaledWidth, scaledHeight);
}
} else {
try (PDPageContentStream contents = new PDPageContentStream(doc,
page, AppendMode.APPEND, true, true)) {
contents.drawImage(image, x, y, scaledWidth, scaledHeight);
}
}
}