【问题标题】:PdfDocument to byte[] using PdfMerger iText7使用 PdfMerger iText7 将 PdfDocument 转换为字节 []
【发布时间】:2020-07-21 08:31:13
【问题描述】:

我有一个要求,我使用iText 7.1.11 生成不同的 pdf'。我正在使用PdfMerger 即时合并所有pdf。我能够在我的本地系统上成功生成 pdf,但应用程序需要发送 bye[] 作为响应。我找到的解决方案 herehere 。但问题是PdfMerger 不接受Document 对象,我不确定我是否恢复我的代码以使用Document 而不是PdfDocument 是否有效。 以下是我尝试过的代码。

 public static void createPdf(List<String> src, String dest, PageSize pageSize, boolean rotate, String baseUri) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    FontProvider fontProvider = new DefaultFontProvider(false,false,true);
    properties.setFontProvider(fontProvider);
    
    /** tried this to make return byte[] in response
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
    Document doc = new Document(pdfDoc); **/

    ///////////// Working on Local/////
    PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path 
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);

    for (String html : src) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfDocument temp = new PdfDocument(new PdfWriter(baos));
        if(rotate) {
            temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
        } else {
            temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
        }
        HtmlConverter.convertToPdf(html, temp, properties);
        temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
        merger.merge(temp, 1, temp.getNumberOfPages());
        temp.close();
    }
    pdf.close();}

请帮助我,因为这个简单的事情似乎很难实现

【问题讨论】:

    标签: java arrays itext response itext7


    【解决方案1】:

    这就是你初始化PdfMerger的方式:

    PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path 
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);
    

    即您明确写入本地文件系统,甚至在评论中强调这一事实。

    如果您想在最后将合并的 PDF 放在 byte[] 中,为什么不在这里简单地使用 ByteArrayOutputStream (正如您声称您之前已经尝试过几行):

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    PdfWriter writer = new PdfWriter(byteArrayOutputStream );
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);
    ...
    pdf.close();
    byte[] bytes = byteArrayOutputStream.toByteArray();
    

    【讨论】:

    • 我在 stack-overflow 上找到了相同的解决方案。谢谢你的回答
    • 考虑到您的代码 cmets,实际上您几乎已经自己完成了... ;)
    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多