c# - 有什么方法可以在没有 "/Rect"的情况下获得 AcroField 在 PdfSharp 中的位置?

标签 c# pdf pdfsharp

我正在使用 C# 和库 PDFSharp 开发一个程序。 我目前正在使用以下代码获取 PDF 文档中特定 AcroField 的 X 和 Y 坐标:

PdfTextField imageField = (PdfTextField)inForm.Fields[elementName];
PdfRectangle rect = imageField.Elements.GetRectangle(PdfAnnotation.Keys.Rect);

如果 PDF 文档中只有 1 个具有相同名称的字段,则此方法工作正常。但是,如果有两个字段都命名为“FirstName”,即使它们位于不同的页面上,这似乎也删除了“/Rect”和“/P”标志,因此我无法使用这些来查找位置或相关页面到那个领域。

有没有其他方法可以获取字段在 PDF 中的位置,或者有什么方法可以激活“/Rect”和“/P”标志?

谢谢,RBrNx

最佳答案

Mihai 发布的内容符合我通过 PdfSharp 从 PDF 逆向工程中发现的内容。如果同一个文档中有多个字段,它们嵌套在父容器下,它是对这个父容器的引用,PdfSharp 在使用 AcroForm.Fields 访问器时会给你。要获取每个字段的 Page 和 Rectangle 元素,您必须查看该容器的子元素。

要获得所需的值,您需要执行以下操作:

    PdfTextField imageField = (PdfTextField)inForm.Fields[elementName];
    var fieldRectangles = new List<PdfRectangle>();

    if( imageField.HasKids )
    {
      PdfArray kids = (PdfArray) Elements[Keys.Kids];
      foreach( var kid in kids )
      {
        var kidValues = ((PdfReference) kid).Value as PdfDictionary;
        var rectangle = kidValues.Elements.GetRectangle(PdfAnnotation.Keys.Rect);
        fieldRectangles.Add(rectangle);        
      }
    }

页面引用元素(“/P”标签)也可从这些“Kid”元素中获得。

关于c# - 有什么方法可以在没有 "/Rect"的情况下获得 AcroField 在 PdfSharp 中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39333322/

相关文章:

c# - 在一个数组中找到一个接口(interface)的具体实现,并移动到数组的顶部

c# - .NET 4 异步 WebRequest 与多线程

c# - 在 C# 中执行邮件合并时 LibreOffice 崩溃

css - 在 Safari 上无边框打印

c# - 返回 PDF 页面的 SHA256 哈希值

c# - 在 ASPxTextboxControl 上触发验证后触发 Javascript 函数

php - 动态生成PDF并将其存储在文件系统中?

Python 3 从网络解析 PDF

c# - 如何绘制正方形并动态分配颜色属性(PDFsharp)?

c# - PDF锐利水印