填充Acrofield无法按预期工作

时间:2016-11-09 21:40:59

标签: vb.net pdf itext acrofields

我在这个问题上遇到了困难。我有一个包含字段的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

这适用于每个文本输入,没有问题。当我有一个多线字段时,这件事情很糟糕。

使用这种方法填写给我:

Wrong field

但是如果我用Adobe Reader打开原始PDF文件并且我写了同样的内容我得到:

enter image description here

所以......我甚至不知道如何在互联网上查看。 iTextSharp不支持这个还是我错过了什么?

编辑: Link to PDF

编辑: itext dll已过时。下载最新版本,问题仍然存在。

2 个答案:

答案 0 :(得分:0)

问题可能在于多行字段的属性。一个问题可能是你有一个固定的字体,当字段溢出时会剪切屏幕上的文本。如果字体为“自动”,则会在控件填满时收缩字体。

答案 1 :(得分:0)

要理解的一点是,在PDF中,字段的值和字段的视觉外观是两个非常不同的东西。在PDF查看器不知道字段或其值是什么的情况下,字段外观用于显示字段。我相信你看到的原因你看到的是,Adobe Reader如何生成外观以及iText如何产生外观之间存在一些轻微的......主要的差异。要测试我的理论,只需在Adobe Reader中编辑该字段,然后查看问题是否自行解决。如果是这样,iText中的外观生成器就是问题。