Pdfcopy返回空白pdf

时间:2017-06-20 10:13:33

标签: pdf grails itext

我想在写入之前将现有的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时,它工作正常,但我必须在我的应用程序中使用动态文档,因此物理路径不是一个选项。

有什么想法吗?

事先提前

1 个答案:

答案 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