我已经使用iTextSharp生成PDF表单已经有一段时间了,而且它已经正常工作了。但是,最近我的组织升级到Adobe Reader XI;从那时起,生成的PDF已经开始显示"您要保存更改"对话框在Reader中打开PDF然后再次关闭,即使您没有对表单进行任何更改。
我做了一些研究,显然这是由于Adobe Reader在幕后对PDF文件进行了某种更改,或者是因为PDF本身已损坏(并且Reader为您修复了这一点)或出于其他原因。进一步的调查揭示了罪魁祸首:我正在将AcroForm
的{{1}}标记设置为NeedAppearances
,这会导致Reader生成表单字段'打开文件时出现,然后从文件中删除true
标志 - 从而修改PDF,并提示您保存"更改"当你关闭它时。
删除NeedAppearances
标志修复了此问题,但产生了一个新问题取而代之。如果没有该标志,iTextSharp将生成表单字段'外观本身 - 但它们只适用于字段'默认,未聚焦状态。单击(多行文本)字段进行编辑时,读者定义的外观将接管,从而导致字段文本内容发生明显变化。
最明显的变化是内容向下移动了相当数量,但我可以通过使用NeedAppearances
方法添加上边距来解决这个问题。但是,字段的字符间距在获得焦点时也会发生变化,变得稍微变窄。它只是较小的一小部分,因此它通常不是那么严重,但在某些情况下它会导致换行位置发生变化(例如当一个单词不适合一个单词时)之前的线,但是当间距变窄时确实适合);当发生这种情况时,它会非常明显,因为它会影响到它之后的所有行。
所以我离开了两难境地。如果我将TextField.SetExtraMargin()
设置为NeedAppearances
,无论该字段是否聚焦,我都会得到一致的外观;但如果我没有将true
设置为NeedAppearances
,那么当我没有做出任何更改时,读者会停止提示我保存更改。我的问题是:我可以立刻获得这两个优势吗?或者我是否必须让自己选择其中一个?
我使用的是iTextSharp 5.5.5,但我尝试升级到最新版本(5.5.8)并且它没有帮助。
以下是我的示例代码:
true