1

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

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

使用这种方法填充给了我:

错误的字段

但是,如果我使用 Adob​​e Reader 打开原始 PDF 文件并编写相同的内容,我会得到:

在此处输入图像描述

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

编辑: 链接到 PDF

编辑: itext dll 已过时。下载最新的,问题依旧。

4

2 回答 2

0

问题可能与多行字段的属性有关。一个问题可能是你有一个固定的字体,当字段溢出时,它会在屏幕上剪辑文本。如果字体是 Auto,它会在控件填满时缩小字体。

于 2016-11-10T15:45:20.790 回答
0

要理解的一件事是,在 PDF 中,字段的值和字段的视觉外观是两个非常不同的东西。在 PDF 查看器不知道字段或其值是什么的情况下,字段外观用于显示该字段。我相信您所看到的原因是,Adobe Reader 生成外观的方式与 iText 生成外观的方式之间存在一些次要...和主要...差异。要测试我的理论,只需在 Adob​​e Reader 中编辑该字段并查看问题是否自行纠正。如果是这样,iText 中的外观生成器就是问题所在。

于 2016-11-10T16:06:51.820 回答