java - itext 7 concat pdf并发送到回复

标签 java itext7

我有一个包含 PDF 的 blob 数组。我正在尝试附加所有这些 PDF 并使用 servlet response.getOutputStream 将结果发送到客户端。但不知怎的,我得到了一个 15 字节的文档,并且 Acrobat Reader 无法读取。

其中数据是 List<Data>包含一些带有 Word 文档的 blob。 我首先使用 Aspose 转换为 PDF。我确信这段代码可以工作。 所以这不可能是问题。 Document这里的对象是一个Aspose lib。以 PDF 形式写入输出流的对象。 问题是我在 iText 7 文档和示例中找不到任何相关文档。

这是我正在使用的代码

List<PdfDocument> listPDF = new LinkedList<>();
for (Data aData : data) {
    byte[] input = aData.getBlobValue();  
    ByteArrayInputStream inStream = new ByteArrayInputStream(input);
    Document srcDocWord = new Document(inStream); 
    ByteArrayOutputStream pdfOStream = new ByteArrayOutputStream();         
    srcDocWord.save(pdfOStream, SaveFormat.PDF);
    ByteArrayInputStream pdfIStream = new ByteArrayInputStream(pdfOStream.toByteArray());
    PdfReader reader = new PdfReader(pdfIStream);
    PdfDocument pdfDoc = new PdfDocument(reader);
    listPDF.add(pdfDoc);
}       
PdfDocument result = new PdfDocument(new PdfWriter(new ByteArrayOutputStream()));
for (PdfDocument pdfDoc : listPDF) {
    pdfDoc.initializeOutlines();
    List<PdfPage> list = pdfDoc.copyPagesTo(1, pdfDoc.getNumberOfPages(), result);          
    pdfDoc.close();
}       
System.out.println(result.getNumberOfPages());
ByteArrayInputStream is = new ByteArrayInputStream( ((ByteArrayOutputStream)pdfDoc.getWriter().getOutputStream()).toByteArray());
OutputStream os = response.getOutputStream();
os.write(is.read());
os.flush();
os.close();

现在,如果我有 1 个文档的 2 个 PDF,则 sysout 将返回 2,因此这是正确的。 但响应返回的文档只有 15 个字节大。

最佳答案

首先,您应该关闭生成的文档。 其次,我不明白你如何在回复中写任何内容。您只需调用os.write(is.read());不复制 isos完全没有。

尝试写信给 os马上,这是一种更简洁的方法:

OutputStream os = response.getOutputStream();
PdfDocument result = new PdfDocument(new PdfWriter(os));
for (PdfDocument pdfDoc : listPDF) {
    pdfDoc.initializeOutlines();
    List<PdfPage> list = pdfDoc.copyPagesTo(1, pdfDoc.getNumberOfPages(), result);          
    pdfDoc.close();
}
result.close();

关于java - itext 7 concat pdf并发送到回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42768261/

相关文章:

java - Itext7 希伯来语反向问题

java - 我的双启动笔记本电脑需要单独的 JRE 吗?

java - 使用未捕获的异常处理程序在异常上启动新线程

java - Eclipse 不会生成导入语句,停止显示快速修复建议

java - JMeter HTTP 请求中的传输编码 header 已存在错误

Java无法删除图片文件,itext7 html To Pdf转换图片文件写入PDF后锁定

itext - 我需要使用 itext7 或 itextsharp 从 pdf 文件中提取文本,并使用粗体字体在所有单词周围放置粗体的 html 标记

java - 如何从 itext7 中的现有 PdfDocument 打开 PdfADocument?

java - 请求头中cookie和字符串的区别

c# - Canvas 的 .MoveUp 使用什么值