使用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(2.1.7)来合并PDF。因为这是MPL的最后一个版本。我无法改变这一点。 不管怎样。我正在尝试合并多个PDF。一切似乎都正常工作,但当我翻阅大约1500页时,生成的PDF无法打开(表现得好像它被破坏了一样)
我正在尝试将多个pdf页面合并为一个pdf页面。有很多iText的例子展示了如何将pdf页面合并到一个文件中,但是我需要所有的页面都放在一个页面中(一路上缩小它们的宽度和高度) 编辑:尝试从这里这个代码,但它只是合并成一个文件的pdf页面,我需要他们收缩成一个单一的页面
我想把几个PDF文档合并成一个。源文件可以由我创建的PDF文件和其他组织创建的PDF文件组成。我无法控制附加到非我创建的文档的权限。其中一些文档(不是我创建的)可能设置了权限。如果文档需要密码才能打开它,我不会尝试合并它。 我正在使用iText 5.5.1(我认为这是最新的)创建一个PDFCopy对象,以包含结果文档和循环中每个源PDF的阅读器(我正在传递一个要合并的文档列表)。我检查每个文档的页
问题内容: 如何使用iText将书签添加到现有PDF? 我将多个PDF合并为一个PDF,并且需要为最终PDF构建书签。例如,我有三个PDF:doc1.pdf,doc2.pdf和doc3.pdf,doc1和doc2属于Group1,doc3属于Group2。我需要合并它们,并且必须为生成的PDF构建嵌套书签,如下所示: 等等 问题答案: 我已经制作了一个MergeWithOutlines示例,该示例
我有一个使用Imagick PHP的PDF文件的缩略图创建脚本。 它将创建PDF文件第一页的缩略图。 我能够生产的缩略图没有任何问题与固定的高度和宽度 我必须得到PDF文件第一页的高度和宽度,并相应地计算缩略图的高度和宽度。 如果我必须从一个图像创建缩略图,我可以使用PHP中的getimagesize函数,但是有没有像那样的函数来获取PDF文件第一页的高度和宽度呢?
问题内容: 我正在使用iText 通过使用PDFCopy合并多个PDF 来创建 单个PDF 。我需要在本文档的开头创建一个 目录 (不是书签),并带有指向每个源PDF的第一页的可单击链接。 合并PDF的代码 问题答案: 您在要求一些琐碎的事情,但事实并非如此。请看一下MergeWithToc示例。您会看到合并PDF的代码是正确的,但是在我的示例中,我添加了一个额外的功能: 对于每个首页,我都将一个