我想在写入之前将现有的pdf复制到另一个pdf中。 这是我将现有pdf复制到ByteOutputStream的代码:
documentPDF.open()
for(int i=0;i<nbPages;){
copy.addPage(copy.getImportedPage(reader, ++i))
}
documentPDF.close()
copy.close()
PdfReader reader= new PdfReader("DocDeBase30.pdf");
reader.selectPages("1-5")
def documentPDF =new Document()
ByteArrayOutputStream baos = new ByteArrayOutputStream()
PdfCopy copy = new PdfCopy(documentPDF, baos)
documentPDF.open()
for(int i=0;i<nbPages;){
copy.addPage(copy.getImportedPage(reader, ++i))
}
documentPDF.close()
copy.close()
reader.close();
return baos
然后我使用这一步将pdf文件渲染到我的视图中:
response.setContentType("application/pdf")
response.setHeader('Content-disposition', "attachment; filename=intercalaire.pdf")
response.outputStream << result
response.outputStream.flush()
result.close()
结果是退回的宝马。
该文件正确打开到我的浏览器中,但它是空白的,没有任何复制。
为了您的信息,当我使用物理路径而不是使用ByteArrayOutputStream时,它工作正常,但我必须在我的应用程序中使用动态文档,因此物理路径不是一个选项。
有什么想法吗?
事先提前答案 0 :(得分:0)
Thx Bruno Lowagie你是正确的削减字节,如下所述:http://itext.2136553.n4.nabble.com/Blank-PDF-after-it-is-transfered-through-SMTP-td2228773.html
阅读链接后,我通过将ByteArrayOutputStream转换为byte []解决了问题 所以这里是我必须改变以解决问题的代码:
byte[] pdf=result.toByteArray()
response.setContentType("application/octet-stream")
response.setHeader('Content-disposition', "attachment; filename=intercalaire.pdf")
response.outputStream << pdf
response.outputStream.flush()
result.close()
现在一切正常
再次Bruno Lowagie