我正在寻找一种自动方式,将每页4页的PDF文件拆分成每页只有1页的文件。 页面排列为2x2。
答案 0 :(得分:0)
转到Chapter 6 of the "iText 7: Jump-start tutorial"并向下滚动到平铺PDF页面的位置。
在该教程中,我们采用此PDF:
我们将其平铺,以便将单页分布在四页上:
如果src
是原始PDF的路径,而dest
是您要创建的新PDF的路径,那么您需要以下代码:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfDocument sourcePdf = new PdfDocument(new PdfReader(src));
PdfPage origPage = sourcePdf.getPage(1);
PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);
Rectangle orig = origPage.getPageSize();
//Tile size
Rectangle tileSize = PageSize.A4.rotate();
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
tileSize.getWidth() / orig.getWidth() * 2f,
tileSize.getHeight() / orig.getHeight() * 2f);
//The first tile
PdfPage page = pdf.addNewPage(PageSize.A4.rotate());
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
canvas.addXObject(pageCopy, 0, -orig.getHeight() / 2f);
//The second tile
page = pdf.addNewPage(PageSize.A4.rotate());
canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
canvas.addXObject(pageCopy, -orig.getWidth() / 2f, -orig.getHeight() / 2f);
//The third tile
page = pdf.addNewPage(PageSize.A4.rotate());
canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
canvas.addXObject(pageCopy, 0, 0);
//The fourth tile
page = pdf.addNewPage(PageSize.A4.rotate());
canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);
canvas.addXObject(pageCopy, -orig.getWidth() / 2f, 0);
// closing the documents
pdf.close();
sourcePdf.close();
有关完整示例,请参阅TheGoldenGateBridge_Tiles.java
此示例假定您了解如何编译和执行Java代码。如果您不了解Java,但了解C#,则可以轻松地将此Java代码转换为C#代码,并使用 iText 7 for C#而不是 iText 7 for Java 。
如果您不了解这些编程语言,则应更新您的问题并说明您要使用的语言。