首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PdfMerger iText7从PdfDocument连接到byte[]

使用PdfMerger iText7从PdfDocument连接到byte[]
EN

Stack Overflow用户
提问于 2020-07-21 16:31:14
回答 1查看 459关注 0票数 0

我有一个要求,我在那里生成不同的pdf‘使用iText 7.1.11。我正在使用PdfMerger合并所有的pdf的在飞行。我可以在本地系统上成功生成pdf,但应用程序需要发送bye[]作为响应。我找到的解决方案是herehere。但问题是PdfMerger不接受Document对象,我不确定是否将我的代码还原为使用Document而不是PdfDocument,它是否可以工作。下面是我尝试过的代码。

代码语言:javascript
复制
 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();}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 18:58:31

这就是初始化PdfMerger的方式

代码语言:javascript
复制
PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path 
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);

也就是说,您显式地写入本地文件系统,甚至在注释中强调这一事实。

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

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63010524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档