iTextSharp - XFA填充日期/时间字段



工作流程如下:

  1. 我们下载一个模板表单,预填充值将是静态的,导出一个XML模板
  2. XML是用。net表单应用程序解析的,动态值是添加的
  3. 生成的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

最新更新