【问题标题】:How can I detect Rectangles and Boxes in PDF using C# iTextSharp如何使用 C# iTextSharp 检测 PDF 中的矩形和框
【发布时间】:2020-03-25 12:39:06
【问题描述】:

我有一个看起来像这样的 PDF 样本

我正在尝试使用 C# iTextSharp 检索这些矩形/框

        PdfReader reader = new PdfReader(inFileName);

        for (int i = 1; i <= reader.NumberOfPages; ++i)
        {
            strPageNumber = i.ToString();
            if (intCommentCount >= 5)
            {
                break;
            }

            PdfDictionary pagedic = reader.GetPageN(i);

            var thing = reader.GetPageContent(i);
            string converted = Encoding.UTF8.GetString(thing, 0, thing.Length);
            PdfArray rectarray = (PdfArray)PdfReader.GetPdfObject(pagedic.Get(PdfName.RECT));

            if (rectarray == null || rectarray.Size == 0)
            {
                continue;
            }
         }

但是,不幸的是,矩形数组返回为空。我尝试了 BOX 而不是 RECT,但 rectarray 也返回为 null

使用 C# iTextSharp 从 PDF 中收集 BOX/RECTANGLE 对象的方法是什么

提前谢谢你

【问题讨论】:

  • 请先告诉我们这些矩形到底是什么?它们可能是页面/图案/Xobject 内容流中的位图或矢量图形,也可能是注释或其他内容。对于所有这些情况,收集盒子是不同的。如果您不确定,请分享有问题的 PDF。

标签: c# pdf itext


【解决方案1】:

您可以使用PdfPig 来检索这些矩形。 我不知道矩形是Path 还是Annotations,所以这里是两种情况的代码:

using (PdfDocument document = PdfDocument.Open("file.pdf"))
{      
    for (int i = 0; i < document.NumberOfPages; i++)
    {
        var page = document.GetPage(i + 1);

        // if the rectangle are paths
        var paths = page.ExperimentalAccess.Paths;

        // if the rectangle are annotations
        var annotations = page.ExperimentalAccess.GetAnnotations().ToList();
        foreach (var annotation in annotations)
        {
            var rectangle = annotation.Rectangle;
        }
    }
}

【讨论】:

  • 该问题明确要求使用 C# iTextSharp 的解决方案。因此,针对不同库的答案似乎不是 OP 想要的。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2016-09-19
  • 2011-08-22
相关资源
最近更新 更多