通过acofield使用itext7获取PDF页码与C#
问题描述:
随着iText7,我喜欢通过表单字段获得pdf页码,但我找不到获取页码的方法或属性。通过acofield使用itext7获取PDF页码与C#
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;
我怎样才能与iText的7做它在C#
答
本质的问题是
我有不知道如何从
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
如果Widget注释不与任何页面相关的(即没有自己的P项设置也不是任何当前页面引用)。一般来说你应该检查一下。
它适用于我,谢谢mkl很多 –