阅读 Chapter 6 of my book 或查看 iText 网站上的示例,您可以节省大量时间。以NUpTool 为例。当您在印刷行业工作时,您应该熟悉术语“N-upping”。这是当您获取一份文档,然后创建一个新的文档,其中 2 页合一(2-upping)、4 页合一(4-upping)等...
您的请求非常相似,但更容易实现,因为当我们获取一个文档时,比如说text_on_stationery.pdf 并且我们使用我书中的示例将其放大 2 倍,您必须缩小页面,例如在文档result2up.pdf。
在您的情况下,这并不难,因为您不需要扩展任何东西。您只需要创建一个大小为原始文档两倍的Document 对象,创建PdfImportedPage 对象以导入页面,并使用具有正确偏移量的addTemplate() 将它们并排添加到新文档中。
有相当多的例子可以证明PdfImportedPage的用法:http://itextpdf.com/themes/keyword.php?id=236
奇怪的是,Google 在查找“imposing”时没有向您显示 SuperImposing 示例。在这个例子中,我们添加了四个不同的层:
PdfReader reader = new PdfReader(SOURCE);
// step 1
Document document = new Document(PageSize.POSTCARD);
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// step 3
document.open();
// step 4
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
}
// step 5
document.close();
reader.close();
换句话说,一个 4 页的文档现在是一个 1 页的文档,其中所有页面都呈现在彼此的顶部。你现在需要做的是,改变第1步,使新页面的维度不同,并适应第4步,使两个页面相邻添加,每两个页面后添加一个新页面:
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
i++;
if (i <= reader.getNumberOfPages())
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, width / 2, 0);
document.newPage();
在这个例子中,我假设原始文档的高度等于新文档的高度,并且新文档的width 是原始文档宽度的两倍。不用说,您也可以选择创建一个具有相同宽度和双倍高度的新文档。在这种情况下,您需要:
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, height / 2);
i++;
if (i <= reader.getNumberOfPages())
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
document.newPage();