我目前正在开发需要使用iTextSharp库的软件,作为学生不幸支付我不能支付商业许可证,也不能发布源代码(要遵守许可证),因为我是一名实习生,所以我目前正在使用LGPL许可证下的iTextSharp 4.1.6。iTextSharp以随机顺序排列的Acofields
我想使用SetField在pdf中填充AcroFields(请参阅下图),但问题是当我试图通过AcroFields.Fields.Key获取所有Acofields时,它们以随机顺序存储,请参见下图。
这是获取所有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等等。
在Fields属性中,“Adresse”应该是第二个,“Nom”应该是第一个。他们基本上应该由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