Я пытаюсь добавить страницу (ы) в конец существующего документа 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);
}
}
}