在vb.net中使用iTextSharp自动填充的Acofields在点击之前不可见

时间:2014-07-29 17:05:25

标签: vb.net pdf automation itextsharp acrobat

我正在使用vb.net应用程序填写已有的pdf表单,而且我遇到了令人沮丧的问题。下面的代码将值放在pdf表单的给定字段中,但是为了在Adobe Reader中查看这些值,必须选择字段本身。我无法共享pdf本身,但是在Acrobat中打开它,似乎安全/保护不是问题,但是当我将FormFlattening设置为True时,我确实收到权限错误。

下面的代码中是否有一个我没有丢失的步骤?

Imports System
Imports System.IO
Imports System.Xml
Imports iTextSharp
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.xml
Imports iTextSharp.pdfa
Imports System.Security
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim pdfTemp As String = "C:\ExampleTemplate.pdf"
    Dim newFile As String = "C:\NewFile.Pdf"

    Dim pdfReader As New PdfReader(pdfTemp)
    Dim pdfStamper As New PdfStamper(pdfReader, New FileStream(newFile,_ FileMode.Create), "\6c", True)
    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields

    pdfFormFields.SetField("Date", "03092014", "03092014")
    pdfFormFields.SetField("Contract_No", "1234456", "1234456")
    pdfFormFields.SetField("Buyer", "bar, foo", "bar, foo")

    pdfFormFields.GenerateAppearances = True
    pdfStamper.FormFlattening = True

    pdfStamper.Close()
    pdfReader.Close()
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

因此,我不能100%清楚为什么这样做有效且我之前的努力没有,但复制并粘贴此代码以初始化PdfStamper

    Dim pdfTemplate As String = "Path to fillable pdf"
    Dim strFolder As String = "Path to destination Folder"
    Dim newFile As String = strFolder & "Name of Completed Form"
    Dim pdfReader As New PdfReader(pdfTemplate)
    Dim pdfStamper As New PdfStamper(pdfReader, New FileStream(newFile, FileMode.Create))
    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields

    `fields and values as in original question'

    pdfStamper.FormFlattening = True
    pdfStamper.Close()
教程here中的

使项目有效。

另外,我很清楚,并非所有带有可填写字段的.pdf文件都是“表单”,并且itextsharp要求该文件是表单。我意识到这一点,在将上述代码成功应用于两个文件后,第三个失败了,尽管我知道了字段的名称。为了使它成为一个形式,因此可以识别为itextsharp,我在acrobat中打开它并创建了一个表单。所有的领域和他们的名字都被保留下来,所以我保存了它,它就像一个魅力。