如何在iTextSharp中制作多表页面?

时间:2016-12-28 08:54:41

标签: c# itext

我有使用iTextSharp制作的单页文档(纵向A4尺寸)。现在我复制第一页,将其粘贴为第二页 - 有两个相同的页面。在Acrobat Reader中,可以选择每页打印多张纸 - 因此我可以横向打印1页上的2页。

如何仅使用iTextSharp获得相同的效果?

1 个答案:

答案 0 :(得分:4)

请阅读有关如何使用iText 7的教程,更具体地说是Chapter 6: Reusing existing PDF documents

在该章中,您将找到一个名为TheGoldenGateBridge_N_up的示例:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfDocument sourcePdf = new PdfDocument(new PdfReader(SRC));
//Original page
PdfPage origPage = sourcePdf.getPage(1);
Rectangle orig = origPage.getPageSize();
PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);
//N-up page
PageSize nUpPageSize = PageSize.A4.rotate();
PdfPage page = pdf.addNewPage(nUpPageSize);
PdfCanvas canvas = new PdfCanvas(page);
//Scale page
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
    nUpPageSize.getWidth() / orig.getWidth() / 2f,
    nUpPageSize.getHeight() / orig.getHeight() / 2f);
canvas.concatMatrix(transformationMatrix);
//Add pages to N-up page
canvas.addXObject(pageCopy, 0, orig.getHeight());
canvas.addXObject(pageCopy, orig.getWidth(), orig.getHeight());
canvas.addXObject(pageCopy, 0, 0);
canvas.addXObject(pageCopy, orig.getWidth(), 0);
// close the documents
pdf.close();
sourcePdf.close();

在此示例中,我们将4页现有PDF添加到一个页面。这个原理被称为 N-upping ,其中你用2的幂代替N.在这个例子中,我们做4-upping;你想要2次。将4-up示例更改为2-up示例只需要应用一些简单的Math。

您还可以阅读此常见问题解答条目:How to convert an A4 size PDF to a PDF booklet?如果您仍在使用旧版iText,则可以阅读iText 5 version of the FAQ entry

注意:我看到了一次投票和重要评论。请注意,您的问题存在严重缺陷,因为您没有提到您正在使用的iText版本(我假设是最新的版本),也没有发布任何显示您尝试过的内容的代码(这些代码未在Stack Overflow)。