使用iText合并不同宽度的pdf文档
使用iText合并不同宽度的文档时出现问题。
下面是我用来合并的代码。
public static void doMerge(List<InputStream> list, OutputStream outputStream) throws Exception { Rectangle pagesize = new Rectangle(1700f, 20f);
com.itextpdf.text.Document document = new com.itextpdf.text.Document(pagesize);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
document.setPageSize(pagesize);
com.itextpdf.text.pdf.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
com.itextpdf.text.pdf.PdfImportedPage page = writer.getImportedPage(reader, i);
//calculate the y for merging it from top
float y = document.getPageSize().getHeight() - page.getHeight();
//add the page to the destination pdf
cb.addTemplate(page, 0, y);
}
reader.close();
in.close();
}
outputStream.flush();
document.close();
outputStream.close();
}
pdf的首页宽度为14英寸,高度为13英寸。文档上的所有其他页面将始终小于该页面。
我想将所有文档全部合并到一个文档中。
我不知道如何设置单个合并文档的宽度和高度。
我认为Rectangle pagesize = new Rectangle(1700f, 20f);
应该这样做,但是如果将其更改为Rectangle
pagesize = new Rectangle(1700f, 200f);,文档无效将不起作用。
请进一步指导我。
回答:
使用PdfWriter
类合并文档违反了 官方 文档中的所有建议,尽管有一些 非正式的
示例可能会诱使您编写不良代码。我希望您了解,我发现这些不好的例子比您更讨厌。
请看本书第6章中的表6.1
。它为您提供了显示何时使用哪个类的概述。在这种情况下,您应该使用PdfCopy
:
String[] files = { MovieLinks1.RESULT, MovieHistory.RESULT };// step 1
Document document = new Document();
// step 2
PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));
// step 3
document.open();
// step 4
PdfReader reader;
int n;
// loop over the documents you want to concatenate
for (int i = 0; i < files.length; i++) {
reader = new PdfReader(files[i]);
// loop over the pages in that document
n = reader.getNumberOfPages();
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
}
// step 5
document.close();
如果您使用的是iText的最新版本,则甚至可以使用此addDocument()
方法,而无需遍历所有页面。如果涉及表格,则还需要特别小心。有许多示例在Sandbox中展示了新功能(从本书编写之后开始)。
以上是 使用iText合并不同宽度的pdf文档 的全部内容, 来源链接: utcz.com/qa/408804.html