java - 尝试使用 iText7 合并合并 pdf,但是当我打开最终合并的 pdf 时,它说无法加载 pdf 文档

标签 java spring spring-boot pdf itext7

我正在使用 itext7 PdfWriter 创建两个 ByteArrayOutputStream,然后使用合并将它们合并到一个 pdf 中,但是当我尝试打开最终合并的 pdf 时,它说加载失败。

@GetMapping(value = "/customers",
            produces = MediaType.APPLICATION_PDF_VALUE)
public ResponseEntity<InputStreamResource> customersReport() throws IOException {

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    PdfDocument pdf = new PdfDocument(new PdfWriter(out));
    Document document = new Document(pdf);
    Paragraph p = new Paragraph("AAAAAAAAA");
    document.add(p);
    document.close();    

    ByteArrayOutputStream out1 = new ByteArrayOutputStream();
    PdfDocument pdf1 = new PdfDocument(new PdfWriter(out1));
    Document document1 = new Document(pdf1);
    Paragraph p1 = new Paragraph("123456A");
    document1.add(p1);
    document1.close();

    ByteArrayOutputStream outfinal = new ByteArrayOutputStream();
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outfinal));
    PdfMerger merger = new PdfMerger(pdfDoc);

    PdfDocument pdf2 = new PdfDocument(new PdfReader(new ByteArrayInputStream(out.toByteArray())));
    merger.merge(pdf2,1,pdf2.getNumberOfPages());

    PdfDocument pdf3 = new PdfDocument(new PdfReader(new ByteArrayInputStream(out1.toByteArray())));
    merger.merge(pdf3,1,pdf3.getNumberOfPages());

    ByteArrayInputStream bis = new ByteArrayInputStream(outfinal.toByteArray());

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "inline; filename=customers.pdf");

    return ResponseEntity
            .ok()
            .headers(headers)
            .contentType(MediaType.APPLICATION_PDF)
            .body(new InputStreamResource(bis));
}

最佳答案

你必须关闭合并

merger.close();

在使用它的输出之前

ByteArrayInputStream bis = new ByteArrayInputStream(outfinal.toByteArray());

因为只有在关闭期间pdf文件才完成。

关于java - 尝试使用 iText7 合并合并 pdf,但是当我打开最终合并的 pdf 时,它说无法加载 pdf 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59330604/

相关文章:

java - Oracle JDBC 连接 : Transaction Isolation Level

java - 下划线不正确的 JPA 列

spring-boot - 使用 Spring boot 时出现 403 禁止错误 - 安全

postgresql - Heroku Postgres 升级后 Flyway 无法连接到数据库

java - 在这方面,Future 和 Completable future 有什么区别?

java - Android NDK 的 NFC API

java - 程序可以编译,但表格不会打印出来

Java Spring 放置自定义属性文件的位置

java - SQL 注入(inject)从 Hibernate HQL 到 MySQL 的删除/删除

java - 更改 Spring 应用程序启动消息