使用 iText7 从页面剪切矩形并放置到另一页
Cut rectangle from page and place to another page by using iText7
我想复制矩形大小的位置并放到另一个页面。例如。我有 100 页,我想切入 x
、y
并具有 width
、height
坐标的 54 页矩形并将其放入 3 页。
我的方法是这样的:
public void CopyRect(string filenamePdf,
Rectangle rect,
int sourcePageNumber,
int destinationPageNumber)
{
}
- string filenamePdf 是我的来源 pdf
- rectangle rect 是我的坐标 (x,y, width, height)
- int sourcePageNumber 是我要从中复制带有信息的矩形的页面
- int destinantionPageNumber 是我要放置带有信息的矩形的页面。
我该如何描述这个方法?谢谢。
在这里我找到了解决办法:
public void CopyRectCopy(string filenamePdf,
Rectangle rect,
int sourcePageNumber,
int destinationPageNumber)
{
PdfDocument srcDoc = new PdfDocument(new PdfReader(filenamePdf));
PdfDocument resultPdfDoc = new PdfDocument(newPdfWriter(@"C:\Users\USER123"));
int pageCounter = srcDoc.GetNumberOfPages();
Rectangle toMove = rect;
Rectangle pageSize = srcDoc.GetPage(sourcePageNumber).GetPageSize();
PdfFormXObject pageXObject = srcDoc.GetPage(sourcePageNumber).CopyAsFormXObject(resultPdfDoc);
PdfFormXObject formXObjectA = new PdfFormXObject(pageSize);
for (int i = 1; i <= pageCounter; i++)
{
//deletes an rectangle from exact page.
if (i == sourcePageNumber)
{
resultPdfDoc.AddNewPage();
PdfCanvas canvasas = new PdfCanvas(formXObjectA, resultPdfDoc);
canvasas.Rectangle(0, 0, 595.28, 841.89);
canvasas.Rectangle(toMove);
canvasas.EoClip();
canvasas.EndPath();
canvasas.AddXObject(pageXObject, 0, 0);
}
else
{
srcDoc.CopyPagesTo(i, i, resultPdfDoc);
}
}
// Create a formXObject of the area to move.
PdfFormXObject formXObject2 = new PdfFormXObject(pageSize);
PdfCanvas canvas2 = new PdfCanvas(formXObject2, resultPdfDoc);
canvas2.Rectangle(toMove);
// This method uses the nonzero winding rule to determine which regions lie inside the clipping path.
canvas2.Clip();
canvas2.EndPath();
canvas2.AddXObject(pageXObject, 0, 0);
PdfCanvas canvas = new PdfCanvas(resultPdfDoc.GetPage(destinationPageNumber));
PdfCanvas canvass = new PdfCanvas(resultPdfDoc.GetPage(sourcePageNumber));
// Add the area to move content, shifted 10 points to the left and 2 points to the bottom.
canvas.AddXObject(formXObject2, 0, -50);
canvass.AddXObject(formXObjectA, 0, 0);
srcDoc.Close();
resultPdfDoc.Close();
}
它从一页剪切一个矩形并粘贴到另一页。
已编辑。
我想复制矩形大小的位置并放到另一个页面。例如。我有 100 页,我想切入 x
、y
并具有 width
、height
坐标的 54 页矩形并将其放入 3 页。
我的方法是这样的:
public void CopyRect(string filenamePdf,
Rectangle rect,
int sourcePageNumber,
int destinationPageNumber)
{
}
- string filenamePdf 是我的来源 pdf
- rectangle rect 是我的坐标 (x,y, width, height)
- int sourcePageNumber 是我要从中复制带有信息的矩形的页面
- int destinantionPageNumber 是我要放置带有信息的矩形的页面。
我该如何描述这个方法?谢谢。
在这里我找到了解决办法:
public void CopyRectCopy(string filenamePdf,
Rectangle rect,
int sourcePageNumber,
int destinationPageNumber)
{
PdfDocument srcDoc = new PdfDocument(new PdfReader(filenamePdf));
PdfDocument resultPdfDoc = new PdfDocument(newPdfWriter(@"C:\Users\USER123"));
int pageCounter = srcDoc.GetNumberOfPages();
Rectangle toMove = rect;
Rectangle pageSize = srcDoc.GetPage(sourcePageNumber).GetPageSize();
PdfFormXObject pageXObject = srcDoc.GetPage(sourcePageNumber).CopyAsFormXObject(resultPdfDoc);
PdfFormXObject formXObjectA = new PdfFormXObject(pageSize);
for (int i = 1; i <= pageCounter; i++)
{
//deletes an rectangle from exact page.
if (i == sourcePageNumber)
{
resultPdfDoc.AddNewPage();
PdfCanvas canvasas = new PdfCanvas(formXObjectA, resultPdfDoc);
canvasas.Rectangle(0, 0, 595.28, 841.89);
canvasas.Rectangle(toMove);
canvasas.EoClip();
canvasas.EndPath();
canvasas.AddXObject(pageXObject, 0, 0);
}
else
{
srcDoc.CopyPagesTo(i, i, resultPdfDoc);
}
}
// Create a formXObject of the area to move.
PdfFormXObject formXObject2 = new PdfFormXObject(pageSize);
PdfCanvas canvas2 = new PdfCanvas(formXObject2, resultPdfDoc);
canvas2.Rectangle(toMove);
// This method uses the nonzero winding rule to determine which regions lie inside the clipping path.
canvas2.Clip();
canvas2.EndPath();
canvas2.AddXObject(pageXObject, 0, 0);
PdfCanvas canvas = new PdfCanvas(resultPdfDoc.GetPage(destinationPageNumber));
PdfCanvas canvass = new PdfCanvas(resultPdfDoc.GetPage(sourcePageNumber));
// Add the area to move content, shifted 10 points to the left and 2 points to the bottom.
canvas.AddXObject(formXObject2, 0, -50);
canvass.AddXObject(formXObjectA, 0, 0);
srcDoc.Close();
resultPdfDoc.Close();
}
它从一页剪切一个矩形并粘贴到另一页。
已编辑。