0

有人可以使用 iText 显示 PDF 页面拼版的工作代码示例吗?看来我已经用尽了我的谷歌选项:那里没有代码示例。

谢谢,

内部管弦乐队

ps:拼版是一个印刷技术术语,我的意思是,例如,一张 11x17 的纸可以容纳两个 8.5x11 的页面。对于名片,这将是相同的页面 (3.75x2.25),而对于小册子则不会,因为纸张将被折叠,并且页面位置会因小册子设置而异。

4

1 回答 1

1

通过阅读我的书的第 6 章或简单地查看 iText 网站上的示例,您可以节省大量时间。以NUpTool为例。当您在印刷行业工作时,您应该熟悉术语“N-upping”。这是当您获取一份文件,然后创建一个新的文件,其中 2 页合一(2-upping)、4 页合一(4-upping)等...

您的要求非常相似,但更容易实现,因为当我们获取一个文档时,比如说text_on_stationery.pdf并且我们使用我书中的示例将其 2-up,您必须缩小页面,例如在文档中结果2up.pdf

就您而言,这并不难,因为您不需要扩展任何东西。您只需要创建一个Document两倍于原始文档大小的对象,创建PdfImportedPage对象以导入页面,并使用addTemplate()正确的偏移量将它们并排添加到新文档中。

有相当多的例子演示了使用:http PdfImportedPage: //itextpdf.com/themes/keyword.php ?id=236

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();
于 2014-07-22T07:09:54.920 回答