PDFBox将页面附加到现有PDF文件

时间:2018-05-02 18:25:36

标签: java pdf pdfbox

我正在尝试将页面附加到现有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);
        }
    }

}

0 个答案:

没有答案