首页 文章

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

提问于
浏览
2

工作流程如下:

  • 我们下载了一个模板表单,预填充值将是静态的,导出一个XML模板

  • 使用.NET表单应用程序解析XML,添加动态值

  • 需要将生成的XML导回到PDF模板中

使用iTextSharp上的MergeXfaData方法一切顺利,但由于某种原因,日期/时间字段没有填写(文本字段和复选框工作正常) . 无法弄清楚为什么 . 通过论坛搜索我发现有人说XFA只适用于文本字段 . 这是为什么以及如何解决?

另外,作为下一步,我需要附加PDF表单的附件 . 附件也是PDF,但iTextSharp不会附加它们 . 已经搜索了很多论坛,但没有提到的方法适合我 .

谢谢您的回答

1 回答

  • 3

    @Yuri,我只是尝试了日期/时间字段,它运作得很好 . 我在Live Cycle中创建了一个简单的PDF,有两个字段,1个文本和1个日期/时间,以及两个按钮,提交和打印 . 示例PDF是here

    我填写了表单并获得了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
    

相关问题