iText - N-up
以下 Java 程序演示了如何使用 iText 库在 PDF 页面上执行 N-up。它创建一个名为 nUppingPDF.pdf 的 PDF 文档,并将其保存在路径 C:/itextExamples/
中将此代码保存在名为 NUppingPDF.java 的文件中。
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
public class NUppingPDF {
public static void main(String args[]) throws Exception {
// 创建 PdfWriter 对象
String dest = "C:/itextExamples/nUppingPDF.pdf";
PdfWriter writer = new PdfWriter(dest);
// 创建 PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);
// 创建 PdfDocument 对象
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);
// 从现有 PDF 打开一页
PdfPage origPage = srcPdf.getPage(1);
Rectangle orig = origPage.getPageSize();
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
// N-up 页面
PageSize nUpPageSize = PageSize.A4.rotate();
PdfPage page = destpdf.addNewPage(nUpPageSize);
PdfCanvas canvas = new PdfCanvas(page);
// 缩放页面
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
nUpPageSize.getWidth() / orig.getWidth() /
2f, nUpPageSize.getHeight() / orig.getHeight() / 2f);
canvas.concatMatrix(transformationMatrix);
// 将页面添加到 N-up 页面
canvas.addXObject(pageCopy, 0, orig.getHeight());
canvas.addXObject(pageCopy, orig.getWidth(), orig.getHeight());
canvas.addXObject(pageCopy, 0, 0);
canvas.addXObject(pageCopy, orig.getWidth(), 0);
// 关闭文档
destpdf.close();
srcPdf.close();
System.out.println("PDF created successfully..");
}
}
使用以下命令从命令提示符编译并执行保存的 Java 文件 −
javac NUppingPDF.java java NUppingPDF
执行后,上述程序会创建一个 PDF 文档,并显示以下消息。
PDF created successfully..
如果验证指定的路径,则可以找到创建的 PDF 文档,如下所示。

