我正在使用 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/