如何复制PDF的上半部分并插入新PDF

时间:2016-10-07 13:56:45

标签: pdf-generation itext

我有一个8.5" x 11" PDF。我想把页面的前1/2,剪切并插入新PDF的第1页。然后,取出页面的底部1/2并将其插入PDF的第2页。

我基本上试图将PDF页面分成两半...我看到的所有文档都涉及将各个页面拆分为单独的文件。我想基本上复制页面的一部分并将其粘贴到另一个文档中。

使用itextsharp提供方向的任何帮助?我以前使用它并理解这些概念。但是,我很难过。我确定我会使用矩形并使用坐标。

1 个答案:

答案 0 :(得分:2)

您似乎希望平铺 PDF。您没有告诉我们您计划使用哪个版本的iText。由于您似乎是新手,我假设您使用的是iText 7.在这种情况下,请参阅Chapter 6iText 7 Jump-Start tutorial,我们将PDF格式化为一页PDF有四页。

原始PDF:

enter image description here

平铺PDF:

enter image description here

有关代码,请参阅TheGoldenGateBridge_Tiles

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();

将此示例更改为将具有1页的PDF格式化为具有2页的PDF的代码,这是使用一些简单数学的问题。

如果您使用的是iText 5,那么这个问题之前已经多次回答了。例如,见: