PDFBox добавление страницы в существующий файл PDF - PullRequest
0 голосов
/ 02 мая 2018

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

}
...