我在这个问题上遇到了困难。我有一个包含字段的PDF文件,因此用户可以填写它们。
我正在使用iTextSharp(在vb.net上)打开PDF文件,读取字段并将数据写回(并将其显示给用户)。
Doc没有锁定,也没有任何安全措施。
我读它如下:
Dim readerPDF As New PdfReader(Application.StartupPath & "\PDF\" & filename)
Dim pathTemp = IO.Path.GetTempFileName & ".pdf"
Dim stamperPDF As New PdfStamper(readerPDF, New IO.FileStream(pathTemp, IO.FileMode.Create))
Dim pdfFormFields As AcroFields = stamperPDF.AcroFields
然后我简单地循环pdfFormFields(我已经拥有了保存在数据库中的每个字段的密钥。
For each f as field_keys
pdfFormFields.SetField(f, "dummy text")
Next
这适用于每个文本输入,没有问题。当我有一个多线字段时,这件事情很糟糕。
使用这种方法填写给我:
但是如果我用Adobe Reader打开原始PDF文件并且我写了同样的内容我得到:
所以......我甚至不知道如何在互联网上查看。 iTextSharp不支持这个还是我错过了什么?
编辑: Link to PDF
编辑: itext dll已过时。下载最新版本,问题仍然存在。
答案 0 :(得分:0)
问题可能在于多行字段的属性。一个问题可能是你有一个固定的字体,当字段溢出时会剪切屏幕上的文本。如果字体为“自动”,则会在控件填满时收缩字体。
答案 1 :(得分:0)
要理解的一点是,在PDF中,字段的值和字段的视觉外观是两个非常不同的东西。在PDF查看器不知道字段或其值是什么的情况下,字段外观用于显示字段。我相信你看到的原因你看到的是,Adobe Reader如何生成外观以及iText如何产生外观之间存在一些轻微的......主要的差异。要测试我的理论,只需在Adobe Reader中编辑该字段,然后查看问题是否自行解决。如果是这样,iText中的外观生成器就是问题。