如何在java中编辑现有PDF

如何在java中编辑现有PDF,java,pdf,itext,pdfbox,Java,Pdf,Itext,Pdfbox,让我们假设我有一个固定页眉和页脚以及空白正文的现有pdf,如下图所示 我必须向主体添加内容(图像中的白色部分) 如何在java中做到这一点?使用iText中的PdfReader和PdfWriter,您可以加载PDF文件,进行一些修改,然后将其写入另一个位置 示例代码: String srcPdf = "source-path.pdf"; String destPdf = "destination-path.pdf"; PdfRe

让我们假设我有一个固定页眉和页脚以及空白正文的现有pdf,如下图所示

我必须向主体添加内容(图像中的白色部分)


如何在java中做到这一点?

使用iText中的PdfReader和PdfWriter,您可以加载PDF文件,进行一些修改,然后将其写入另一个位置

示例代码:

    String srcPdf = "source-path.pdf";
    String destPdf = "destination-path.pdf";

    PdfReader reader = new PdfReader(srcPdf);
    PdfWriter writer = new PdfWriter(destPdf);

    try (PdfDocument pdfDocument = new PdfDocument(reader, writer)) {

        PdfPage page = pdfDocument.getPage(1);

        // change pdf file starts here
        String imgPath = "image-path.jpg";
        ImageData imageData = ImageDataFactory.create(imgPath);

        // create page canvas
        PdfCanvas pdfCanvas = new PdfCanvas(page);

        // create AT
        AffineTransform at = AffineTransform.getTranslateInstance(page.getPageSize().getWidth() / 10, page.getPageSize().getHeight() / 10);
        at.concatenate(AffineTransform.getScaleInstance(page.getPageSize().getWidth() * 8 / 10, page.getPageSize().getHeight() * 8 / 10));

        float[] matrix = new float[6];
        at.getMatrix(matrix);

        // add image data
        pdfCanvas.addImageWithTransformationMatrix(imageData, matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);

        pdfCanvas.release();
    }

关于PDFBox,请看一下源代码下载中的示例。从HelloWorld.java开始。我已经在iText中从头开始创建了一个pdf,但不确定pdfBox是否可以使用pdfBoxIn。无论哪种情况,您都可以像往常一样使用相应的库在新的空白页面上创建正文文本,然后将模板页面放在每个页面下的正文下。我们如何将模板页面放在正文下在javaIn PDFBox中带有主体的页面下,使用参数中的append选项创建PDPageContentStream。确保第五个参数为true。
    PdfReader reader = new PdfReader("./the-pdf-where-you-want-to-insert-into.pdf");
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("./destination.pdf"));

    PdfReader r = new PdfReader("./the-pdf-you-want-to-insert.pdf");
    PdfImportedPage page = stamper.getImportedPage(r, 1);

    Image instance = Image.getInstance(page);

    AffineTransform at = AffineTransform.getTranslateInstance(x, y); // x y positions where you want insert
    at.concatenate(AffineTransform.getScaleInstance(instance.getScaledWidth(), instance.getScaledHeight()));

    PdfContentByte canvas = stamper.getOverContent(1);
    canvas.addImage(instance, at);

    stamper.close();
    reader.close();