我正在使用 ByteArrayOutputStream 和 PdfWriter 创建一个使用iText for Java动态创建PDF的系统,以防止文件系统的使用。
一旦动态内容完成,我希望能够将一些现有的PDF文件页面附加到动态创建的PDF的末尾。
我查看了使用iText连接PDF的示例代码,他们使用 PdfCopy 来完成此任务。 PdfCopy 的一个重要假设是所有连接的文件都存在于文件系统中。
是否可以将现有文件连接到内存PDF的末尾,该文件存在为 ByteArrayOutputStream ?
与此同时,我使用了一个临时文件作为初始动态文档,但是如果可能的话,我希望删除该依赖项。
谢谢,
阿伦
答案 0 :(得分:3)
您假设您只能使用文件路径创建PdfReader
实例。这个假设是错误的。见the API documentation。如果baos
是ByteArrayOutputStream
,您可以轻松地创建您的阅读器实例:
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();
}