【问题标题】:How to edit the contents of an existing PDF programmatically in JAVA [closed]如何在 JAVA 中以编程方式编辑现有 PDF 的内容 [关闭]
【发布时间】:2020-12-17 12:01:17
【问题描述】:

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

我必须在正文中添加内容(图像中的白色部分)

如何在 java 中做到这一点?

【问题讨论】:

  • Re PDFBox,请查看源代码下载中的示例。从 HelloWorld.java 开始。
  • 我在 iText 中从头开始创建了一个 pdf,但不确定 pdfBox 是否可以使用 pdfBox
  • 在任何一种情况下,您都可以像往常一样使用相应的库在新的空白页面上创建正文文本,然后在每个带有正文内容的页面下放置您的模板页面。
  • 我们如何在java中的带有body的页面下放置模板页面
  • 在 PDFBox 中,您使用参数中的附加选项创建 PDPageContentStream。确保第五个参数为真。

标签: java pdf itext pdfbox


【解决方案1】:

使用 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();
    }

【讨论】:

    【解决方案2】:
        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();
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多