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

时间:2013-07-09 15:09:18

标签: java servlets pdf itext

我正在使用 ByteArrayOutputStream PdfWriter 创建一个使用iText for Java动态创建PDF的系统,以防止文件系统的使用。

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

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

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

与此同时,我使用了一个临时文件作为初始动态文档,但是如果可能的话,我希望删除该依赖项。

谢谢,

阿伦

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

拥有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();
}