使用带有C#的itext7通过acrofield获取pdf页码

时间:2017-08-01 02:40:42

标签: c# .net pdf itext7 acrofields

使用iText7,我喜欢按表格字段获取pdf页码,但我找不到获取页码的方法或属性。

IDictionary<String, PdfFormField> fields = form.GetFormFields();
PdfFormField field = fields["fieldName"];
field.page <-- there is no property

我找到了这个:

PdfPage page = field.GetWidgets().First().GetPage();

但我不知道如何从PdfPage获取页码。

看起来iText5有这个(用Java):

int page = form.getFieldPositions(name).get(0).page;

我怎样才能在C#中使用iText 7

1 个答案:

答案 0 :(得分:1)

基本上你的问题是

  

我不知道如何从PdfPage获取页码。

课程PdfDocument有一个方法GetPageNumber

/// <summary>Gets page number by page.</summary>
/// <param name="page">the page.</param>
/// <returns>page number.</returns>
public virtual int GetPageNumber(PdfPage page)

因此,您可以检索页面窗口小部件的页码,如下所示:

using (PdfReader reader = new PdfReader(formDocumentFile))
using (PdfDocument pdf = new PdfDocument(reader))
{
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);
    PdfFormField field = form.GetField(fieldName);
    PdfPage page = field.GetWidgets().First().GetPage();
    int number = pdf.GetPageNumber(page);
    Console.WriteLine("Determined page number: {0}", number);
}

<强>请注意:

  • field.GetWidgets().First()隐含地假设该字段至少有一个小部件。这是无法保证,可能存在没有任何小部件的不可见字段。一般来说,你应该检查一下。

  • 如果窗口小部件注释未与任何页面关联,则
  • ....GetPage()可能会返回null(即,既未设置自己的 P 条目,也未引用任何页面当前页面)。一般来说,你应该检查一下。