В настоящее время я разрабатываю программное обеспечение, которое должно использовать библиотеку iTextSharp, к сожалению, как студент, я не могу позволить себе оплачивать коммерческую лицензию, и я не могу опубликовать исходный код (чтобы соответствовать лицензии), поскольку я стажер, поэтому в настоящее время я использую iTextSharp 4.1.6, который находится под лицензией LGPL.iTextSharp Acrofields в случайном порядке
Я пытаюсь заполнить AcroFields в pdf (см. Ниже) с помощью SetField, но проблема в том, что я пытаюсь получить все Acrofields через AcroFields.Fields.Key они хранятся в случайном порядке, см. Ниже.
Это код, который получает все acrofields:
Dim PdfReader As New PdfReader(ExistingFileStream)
Dim Stamper As New PdfStamper(PdfReader, NewFileStream)
Dim Form As AcroFields = Stamper.AcroFields
Dim FieldKeys = Form.Fields.Keys
For Each key As String In FieldKeys
Form.SetField(key, valeurs.Item(I).ToString())
I += 1
Next
Stamper.FormFlattening = True
Stamper.Close()
PdfReader.Close()
Это оригинальный PDF, который должен быть изменен:
Это то, что я получаю при чтении AcroFields с помощью приведенный выше код:
Как вы можете видеть, AcroFields находятся в полном случайном порядке, и я понятия не имею, почему это так. Дело в том, что когда вы попадаете в каждое свойство AcroField, существует массив с именем tabOrder, который содержит целое число, и это целое верно! «Nom» -> tabOrder (0) = 0, «Adresse» -> tabOrder (0) = 1 и т. Д.
В полях свойство «Адрес» должно быть вторым, а «Ном» должно быть первым. Они в основном должны быть заказаны tabOrder.
Является ли это известной ошибкой в iTextSharp 4.1.6? Я не мог найти ничего о том, что AcroFields неправильно настроен, как и для меня.
Заранее спасибо.
Имейте славный день.
Если 'valeurs' был [Dictionary (Of String, String)] (https://msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.110%29.aspx) с полем в качестве словарного ключа, тогда вы можете сделать что-то вроде 'Form.SetField (key, valuers (key))'. –
Это действительно хороший и быстрый рабочий стол, и я благодарю вас за это. – Deodexed
AcroFields.Fields - это объект .NET IDictionary. Порядок его элементов не определен и может (теоретически) меняться от одной реализации к следующей. – blagae