我正在使用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
答案 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中打开它并创建了一个表单。所有的领域和他们的名字都被保留下来,所以我保存了它,它就像一个魅力。