当前位置: 首页 > 知识库问答 >
问题:

itext 7(java)将新页面上的图像添加到现有pdf文档的末尾

杨飞飙
2023-03-14

我是新来的。我有一个不同内容的文档列表,我想合并成一个单独的PDF。内容类型为PDF、JPG

这是我的代码:

    byte[] mergeInhalt(List<Dokument> dokumentList) throws IOException {
      ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
      PdfWriter pdfWriter = new PdfWriter(byteOut);
      PdfDocument pdfDocument = new PdfDocument(pdfWriter);
      Document completeDocument = new Document(pdfDocument);

      for (Dokument dokument : dokumentList) {
        byte[] inhalt = dokument.getInhalt();
        if (Objects.nonNull(inhalt)) {
            switch (dokument.getFormat().name()) {
                case "PDF":
                    addPdf(pdfDocument, inhalt);
                    break;
                case "JPG":
                case "PNG":
                    ImageData data = ImageDataFactory.create(inhalt);
                    Image image = new Image(data);
                    completeDocument.add(image);
                    break;
            }
        }
    }
    completeDocument.close();
    return byteOut.toByteArray();
}

private void addPdf(PdfDocument pdfDocument, byte[] inhalt) throws IOException {
    PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(inhalt));
    PdfDocument pdfDocumentToMerge = new PdfDocument(pdfReader);
    pdfDocumentToMerge.copyPagesTo(1, pdfDocumentToMerge.getNumberOfPages(), pdfDocument);
}

合并PDF只工作得很好,但每次我合并一个图像我得到这个:

带有粉红色的图像被放置在先前PDF的文本上

共有1个答案

谢璞
2023-03-14

在您的代码中,您通过文档完成文档添加图像,但您通过底层的Pdf文档pdf文档添加pdf。因此,完整文档不知道添加的pdf,在当前页面上继续,并在导入的页面上绘制。

要确保每个图像都添加在当前最后一个页面之后的新页面上,您必须告诉完整文档移动其当前页面:

case "JPG":
case "PNG":
    ImageData data = ImageDataFactory.create(inhalt);
    Image image = new Image(data);
    completeDocument.add(new AreaBreak(AreaBreakType.LAST_PAGE));
    completeDocument.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
    completeDocument.add(image);
    break;

例如,比较CopyPdfsAndImages中的testMergeLikeAndreasHuber和testMergeLikeAndreasHuber改进及其输出。

 类似资料:
  • 我正在尝试向PDF文档的第一页添加一些内容。这样做的合适方式是什么? 目前,我的代码可以工作,但它会在文档的第一页之前添加(插入)一个新页面。这里可以用什么来代替 因此,我正在阅读的文档中的内容将作为内容而不是新页面添加到现有的第一页

  • 我需要添加一些文本内容的底部现有的。带有iText的pdf文档。我有一个工作方法,但新内容显示在左上角,与现有内容重叠: 如何“移动”最后一页底部的,而不是第一页的开头?我对iText不熟悉,令人惊讶的是,在网上找不到解决方案。

  • 我想使用IText7将图像添加到现有PDF文件中的特定位置。 在使用iTextSharp的另一个项目中,代码非常简单: 但我找不到使用IText7执行此操作的正确方法。 我有PdfReader和PdfWriter,但在IText7中我可以在哪里找到PdfStamper? 或者可能有其他方法可以将图像添加到IText7中现有的PDF文件中? (我不能在当前项目中使用iTextSharp)

  • 其中一个要求是在单元格内(子标题下)添加一个已经存在的PDF(可以是多页)。这就是我们正在努力的地方。我们迄今为止所做的尝试: 将PDF转换为,并将其添加到单元格中。 当我们设置

  • 我正在使用Python FastAPI编写一些Rest API。需要在Swagger-OpenAPI文档中添加许多自定义部分。这包括每个API的联系信息字段、作者信息、显示数据模型的图像、数据库字段等。 有没有办法使用快速API内置的OpenAPI功能来完成所有这些工作?我知道可以托管我们自己的自定义 json 文件。但是我不知道如何将图像添加到招摇的json文件中。我也不知道如何将自定义字段添加

  • 我有一本书的多份副本。不同用户评论的pdf文档。我想把所有这些评论合并成一个新的pdf“合并”。 我在一个名为“路径”和“目录”属性的文档类中编写了这个子类。 这段代码导致了一个我无法解决的异常。 iText。内核PDFEException:“Pdf间接对象属于其他Pdf文档。将对象复制到当前pdf文档。' 要执行此任务,我需要更改什么?还是我完全摆脱了我的代码块?