我有一个包含PDF的blob数组。我试图附加所有这些PDF并使用servlet response.getOutputStream
将结果发送到客户端。但不知何故,我得到一个15字节的文件,而且Acrobat Reader无法读取。
数据是包含Word文档的一些blob的List<Data>
。
我首先使用Aspose转换为PDF。我确信这段代码有效。
所以这不是问题所在。
这里的Document
对象是一个Aspose lib。以PDF格式写入输出流的对象。
问题是我无法在iText 7 doc或示例中找到相关文档。
这是我使用
的代码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个字节。
答案 0 :(得分:1)
首先,您应该关闭结果文档。
其次,我不知道你如何写任何回应。您只需拨打os.write(is.read());
即可将is
复制到os
。
立即尝试写入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();