Как я могу использовать iTextSharp для определения максимально допустимого количества символов в текстовом поле? - PullRequest
1 голос
/ 06 октября 2010

У меня есть документ PDF с несколькими текстовыми полями, некоторые из которых имеют максимальную длину, а именно максимальное количество допустимых символов.

Есть ли способ использовать iTextSharp для определения этого параметра? Вот код, который у меня есть:

Dim reader As New iTextSharp.text.pdf.PdfReader("Foobar.pdf")
Dim inputFields As IDictionary(Of String, iTextSharp.text.pdf.AcroFields.Item) = reader.AcroFields.Fields

For Each key As String In inputFields.Keys
    Dim PDFFieldName As String = key
    Dim MaxFieldLength As Integer = ???

    ...
Next

Мне нужно установить MaxFieldLength на количество допустимых символов для текущего поля формы, которое повторяется.

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Я думаю, вы ищете что-то вроде этого:

    Dim reader As New PdfReader("YourPdf.pdf")
    Dim fields As IDictionary(Of String, iTextSharp.text.pdf.AcroFields.Item) = reader.AcroFields.Fields
    For Each key As String In fields.Keys
        Dim fieldItem = reader.AcroFields.GetFieldItem(key)
        Dim pdfDictionary As PdfDictionary = fieldItem.GetWidget(0)

        Dim pdfFieldName As String = key
        Dim maxFieldLength As Integer = Int32.Parse(pdfDictionary.GetAsNumber(PdfName.MAXLEN).ToString())

        Console.WriteLine("Field={0}, MaxLen={1}", pdfFieldName, maxFieldLength.ToString())
    Next

Я хотел бы найти подробные документы по классу PdfName.

1 голос
/ 13 мая 2011

Попробуйте это:

byte[] Password;

//generates Byte array to unlock PDF
ASCIIEncoding encoding = new ASCIIEncoding();
Password = encoding.GetBytes("xxxxxxxx");
//PdfReader myReader = new PdfReader();

PdfReader myReader = new PdfReader(file, Password);
PdfStamper myStamp = new PdfStamper(myReader, new FileStream(file + "_TMP", FileMode.Create));
//PdfStamper myStamp = new PdfStamper(myReader, new FileStream(file, FileMode.Create));
AcroFields myFields = myStamp.AcroFields;

string tmpString;

foreach (KeyValuePair<string, AcroFields.Item> de in myFields.Fields)
{
  Console.WriteLine("Processing... " + de.Key + " : " + de.Value.GetWidget(0).Get(PdfName.MAXLEN));
  tmpString = de.Key + " : " + de.Value.GetWidget(0).Get(PdfName.MAXLEN);
}
...