我们正在使用iText Pdf API版本5.5.3,我们正在尝试合并有时包含复选框的pdf文档,我们在servlet输出流中编写pdf文档并在iframe中显示。
它在IE中运行良好(在11中尝试过)但复选框没有出现在Chrome中(在52中尝试过)。
以下是我们用于显示PDF的示例代码。
InputStream in = docFile.getImage()
.getBinaryStream();
reader = new PdfReader(in);
pdfReaderList.add(reader);
document = new Document(PageSize.A4);
byteArrayOutputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(document, byteArrayOutputStream);
document.setMargins(35, 35, 48, 75);
document.open();
copy.setMargins(35, 35, 48, 75);
// add a document
Iterator<PdfReader> pdfReader = pdfReaderList.iterator();
while (pdfReader.hasNext()){
PdfImportedPage page;
reader = MCPDFFileWriter.unlockPdf(pdfReader.next());
for (int currentPage = 1; currentPage <= reader.getNumberOfPages(); currentPage++) {
page = copy.getImportedPage(reader, currentPage);
pageNum++;
copy.addPage(page);
footerNamesList.add(fileName);
footerMap.put(footerMap.size() + 1, fileName);
}
}
document.close ();
reader.close();
copy.close();
我也经历了这个Link,当我使用下面的代码时,给定的解决方案似乎正常工作 -
InputStream in = docFile.getImage()
.getBinaryStream();
reader = new PdfReader(in);
pdfReaderList.add(reader);
document = new Document(PageSize.A4);
byteArrayOutputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(document, byteArrayOutputStream);
document.setMargins(35, 35, 48, 75);
document.open();
copy.setMargins(35, 35, 48, 75);
**copy.setMergeFields();**
// add a document
**copy.addDocument(reader);**
document.close ();
reader.close();
copy.close();
但是我有时会遇到OutOfMemoryError,并且想知道copy.setMergeFields();copy.addDocument(reader);
是否存在任何已知问题以及如何克服它?
Chrome中也报告了一个错误(想到插件问题),样本pdf附在那里