【问题标题】:Cut rectangle from page and place to another page by using iText7使用 iText7 从页面剪切矩形并放置到另一个页面
【发布时间】:2020-09-08 09:59:51
【问题描述】:

我想复制矩形大小的位置并放到另一个页面。例如。我有 100 页,我想切入位于 xy 并具有 widthheight 坐标的 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 destinationPageNumber 是我想在其中放置带有信息的矩形的页面。

我应该如何描述这种方法?谢谢。

【问题讨论】:

  • 在你的标题中你说 cut 但在问题正文中你说 copy;你真的想要哪个?您想将该部分放在目标页面的哪个位置?注释呢?
  • 抱歉弄错了,我想剪。

标签: c# winforms pdf methods itext7


【解决方案1】:

在这里我找到了解决方案:

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

它从一个页面剪切一个矩形并粘贴到另一个页面。

已编辑。

【讨论】:

  • 据我所知,您没有将formXObject1 放在任何地方。除此之外,该解决方案看起来还可以。但是,有一些缺点,特别是您的解决方案可能会删除注释和文档级别的信息。根据您的输入数据可能没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2017-12-19
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多