在vb.net中用iTextSharp自动填充的Acrofields在单击后才可见

在vb.net中用iTextSharp自动填充的Acrofields在单击后才可见,vb.net,pdf,automation,itextsharp,acrobat,Vb.net,Pdf,Automation,Itextsharp,Acrobat,我正在开发一个vb.net应用程序来填充先前存在的pdf表单,我遇到了一个令人沮丧的问题。下面的代码将值放入pdf表单上的给定字段中,但为了在Adobe Reader中查看这些值,必须选择字段本身。我无法共享pdf本身,但在Acrobat中打开它时,似乎安全/保护不是问题所在,尽管当我将FormFlating设置为True时,确实出现了权限错误 代码中是否有我遗漏的步骤 Imports System Imports System.IO Imports System.Xml Imports iTe

我正在开发一个vb.net应用程序来填充先前存在的pdf表单,我遇到了一个令人沮丧的问题。下面的代码将值放入pdf表单上的给定字段中,但为了在Adobe Reader中查看这些值,必须选择字段本身。我无法共享pdf本身,但在Acrobat中打开它时,似乎安全/保护不是问题所在,尽管当我将FormFlating设置为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

因此,我并不完全清楚为什么这样做有效,而我以前的努力却没有,但是复制和粘贴这些代码来初始化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()
从教程中可以看出,该项目是可行的


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

尝试将
pdfFormFields.generateapearances=True
移到字段设置上方