我正在使用 iText 2.1.7 将一些 PDF 文档合并为一个 PDF。下面的代码似乎工作得很好,但在某些情况下,渲染的 PDF 似乎会稍微缩小,例如如果在处理之前直接打印,则缩放为 PDF 的 90%。
有办法保持当前大小吗?
private void doMerge(List<InputStream> list, OutputStream outputStream) throws DocumentException, IOException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
for (InputStream in : list) {
PdfReader reader = new PdfReader(in);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
document.newPage();
//import the page from source pdf
PdfImportedPage page = writer.getImportedPage(reader, i);
//add the page to the destination pdf
cb.addTemplate(page, 0, 0);
}
}
outputStream.flush();
document.close();
outputStream.close();
}
最佳答案
该 API 已在该版本中可用。我什至建议使用 PdfSmartCopy 而不是 PdfCopy
(或 PdfCopyFields
如果表单字段在里面)。
private PdfSmartCopy copier;
public void SomeMainMethod(){
Document finalPdf = new Document();
copier = new PdfSmartCopy(finalPdf, outputstream);
//Start adding pdfs
finalPdf.open();
//add n documents
addDocuments(...);
finalPdf.close();
formCopier.close();
}
public void addDocument(InputStream pdfDocument, int startPage, int endPage){
PdfReader reader= new PdfReader(pdfDocument);
int startPage = 1;
int endPage = reader.getNumberOfPages();
for (int i = startPage; i <= endPage; i++) {
copier.addPage(this.copier.getImportedPage(reader,i));
}
if(copier!=null){
//Important: Free Memory!
copier.flush();
copier.freeReader(reader);
}
if (reader!=null) {
reader.close();
reader=null;
}
pdfDocument.close();
}
关于java - 将 PDF 与 iText 2.1.7 合并会导致它们缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53123985/