首页 文章

将pdf附加到servlet内存中的itext pdf

提问于
浏览
2

我正在创建一个系统,使用 ByteArrayOutputStreamPdfWriter 在servlet中使用iText for Java动态创建PDF,以防止文件系统使用 .

一旦动态内容完成,我希望能够将一些现有的PDF文件页面附加到动态创建的PDF的末尾 .

我查看了使用iText连接PDF的示例代码,他们使用 PdfCopy 来完成此任务 . PdfCopy 的一个重要假设是所有连接的文件都存在于文件系统中 .

是否可以将现有文件连接到内存PDF的末尾,以 ByteArrayOutputStream 形式存在?

在此期间,我使用了临时文件作为初始动态文档,但是如果可能的话,我想删除该依赖项 .

谢谢,

艾伦

2 回答

  • 1

    您假设您只能使用文件路径创建 PdfReader 实例 . 这个假设是错误的 . 见the API documentation . 如果 baos 是您的 ByteArrayOutputStream ,您可以轻松地创建您的阅读器实例,如下所示:

    PdfReader reader = new PdfReader(baos.toByteArray());
    
  • 3

    有一个 InputStream (不同的文档)列表,你可以用这种方式将它们附加到 OutputStream 中(基于this):

    private void doMerge(List<InputStream> list, OutputStream outputStream)
            throws DocumentException, IOException {
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, outputStream);
        document.open();
        int n;
        for (InputStream in : list) {
            PdfReader reader = new PdfReader(in);
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                n = reader.getNumberOfPages();
                // loop over the pages in that document
                for (int page = 0; page < n; ) {
                    copy.addPage(copy.getImportedPage(reader, ++page));
                }
                copy.freeReader(reader);
                reader.close();
            }
        }
        outputStream.flush();
        document.close();
        outputStream.close();
    }
    

相关问题