我使用ITextPdf feom c#代码。 我使用acrofields填充带有数据的表单。我正在丢失格式。
Stream os = new FileStream(PDFPath, FileMode.CreateNew);
PdfReader reader = new PdfReader(memIO);
PdfStamper stamper = new PdfStamper(reader, os, '9', true);
AcroFields fields = stamper.AcroFields;
fields.SetField("Pgo", 1.0 "Percentage");
我做错了什么?
答案 0 :(得分:0)
你说你丢失了所有的格式。这导致假设您的表单包含JavaScript,当人类用户输入值时,它会格式化字段。
使用iText填写表单时,不会执行手动填写表单时触发的JavaScript方法。因此1.0
不会更改为100%
。
我认为这是一个错字:
fields.SetField("Pgo", 1.0 "Percentage");
这行甚至没有编译。键入此行时,IDE应显示错误。即使我在第二个和第三个参数之间添加缺少的逗号(假设1.0
和"Percentage"
是两个单独的参数),您会收到一条错误消息,指出没有setField()
接受String
,double
和String
。
有两种setField()
方法:
setField(String name, String value)
:第一个参数是密钥(例如"Pgo"
),第二个参数是值(例如String
值"1.0"
)。setField(String name, String value, String display)
:第一个参数是键(例如"Pgo"
),第二个参数是值(例如String
值"1.0"
),第三个参数是应该显示的内容(例如"100%"
)。例如,当你这样做时:
fields.SetField("Pgo", "1.0", "100%");
iText将显示100%,但该字段的值将为1.0。
如果有人点击该字段,则可能会出现1.0,以便最终用户可以更改字段,例如更改为0.5。它取决于格式化JavaScript的存在,无论这个手动输入的0.5是否将显示为50%。
P.S。:此问题也在iText Software的售票系统中作为售前问题发布。我正在关闭那张票,这样票不会被回答两次。顺便说一下:这个新的问题只不过是对前一个问题https://stackoverflow.com/questions/27276863/pdfstamper-remove-my-formats-in-my-form的重复。那个问题不清楚。你为什么忽略我澄清的要求?当您第一次没有得到答案时,发布重复的问题并不是自定义的。您应该更新原始问题。