工作流程如下:
- 我们下载一个模板表单,预填充值将是静态的,导出一个XML模板
- XML是用。net表单应用程序解析的,动态值是添加的 生成的XML需要导入回PDF模板
在iTextSharp上使用MergeXfaData方法一切顺利,但是由于某种原因,日期/时间字段没有被填写(文本字段和复选框工作正常)。不知道为什么。通过论坛搜索,我发现有人说XFA只适用于文本字段。这是为什么?如何解决?
作为下一步,我还需要将附件附加到PDF表单。附件也是PDF,但iTextSharp不会附加它们。我搜索了很多论坛,但上面提到的方法都不适合我。
感谢您的回答
@Yuri,我刚刚尝试了一个日期/时间字段,它工作得很好。我在Live Cycle中创建了一个简单的PDF,有两个字段,一个文本和一个日期/时间,两个按钮,提交和打印。示例PDF在这里:
我填写了表格,得到了这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<topmostSubform>
<Text1>Chris</Text1>
<DateTimeField1>2012-04-12</DateTimeField1>
</topmostSubform>
当我将其导入PDF并在Acrobat中查看PDF时,日期/时间字段已填写。我使用iTextSharp 5.0.5.0与以下代码:
Option Explicit On
Option Strict On
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim PDF_Input_File As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Input.pdf")
Dim PDF_Output_File As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Export.pdf")
''//Create our reader
Dim reader As New PdfReader(PDF_Input_File)
''//Create our file stream to output to
Using FS As New System.IO.FileStream(PDF_Output_File, FileMode.Create, FileAccess.Write, FileShare.Read)
''//Create the stamper
Dim stamper As New PdfStamper(reader, FS)
''//Just loading the XML raw instead of reading from disk, less files to attach to the post
Dim Bytes = System.Text.Encoding.UTF8.GetBytes("<?xml version=""1.0"" encoding=""UTF-8""?><topmostSubform><Text1>Chris</Text1><DateTimeField1>2012-04-12</DateTimeField1></topmostSubform>")
Using MS As New MemoryStream(Bytes)
''//Fill out the form
stamper.AcroFields.Xfa.FillXfaForm(MS)
End Using
stamper.Close()
End Using
reader.Close()
Me.Close()
End Sub
End Class