1

我目前正在使用 Excel 来填充带有表单域的 PDF 文件。一切正常,但它将其导出为 .xfdf。有谁知道我如何将其保存为 pdf 格式?

FullFileName = FilePath & "Requisition - " & Trim(MyRecord.CompanyName) & " - " & _
Year & "-" & Month & "-" & Day & "-" & Hour & "-" & Minute & "-" & Seconds & ".xfdf"
Open FullFileName For Output As #1
    Print #1, "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
    Print #1, "<xfdf xmlns=""http://ns.adobe.com/xfdf/"" xml:space=""preserve"">"
    Print #1, "<fields>"

    Print #1, "<field name=""Submitted by""><value>" + Trim(MyRecord.RequestedBy) + "</value></field>"
    Print #1, "<field name=""Job Name""><value>" + "Auto Cards" + "</value></field>"
    Print #1, "<field name=""Shipping address""><value>" + Trim(MyRecord.StreetNumber) & " " & Trim(MyRecord.StreetName) & ", Unit " & Trim(MyRecord.Suite) & ", " & Trim(MyRecord.City) & ", " & Trim(MyRecord.Province) & ", " & Trim(MyRecord.PostalCode) + "</value></field>"
    Print #1, "<field name=""Special Instructions""><value>" + "Print" + "</value></field>"
    Print #1, "</fields>"
    Print #1, "<f href=""..\Requisition_Fillable.pdf""/>"

    Print #1, "</xfdf>"
Close #1    ' Close file.
4

1 回答 1

7

XFDF 是 FDF 的 XML 风格。FDF 代表表单数据格式。它是一种在没有 PDF 实际内容的情况下存储数据的文件格式。FDF 使用 PDF 语法来存储这些数据。XFDF 使用 XML。

您无法将 FDF 或 XFDF 文件“转换”为 PDF,因为缺少太多信息。您可以将 (X)FDF 文件导入到具有相应 AcroForm 字段的 PDF 中。

请看一下ImportXFDF示例。对于那个例子,我写了一个简单的 XFDF 文件:data.xfdf

<?xml version="1.0" encoding="ISO-8859-1"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="Submitted by"><value>Santaaimonce</value></field>
<field name="Job name"><value>Developer</value></field>
<field name="Shipping address"><value>Alphabet Street
Minneapolis
Minnesota</value></field>
<field name="Special instructions"><value>Use iText to fill out interactive form using data stored in XFDF file.
If you are a C# developer, use iTextSharp.</value></field>
</fields>
<f href="Requisition_Fillable.pdf"/>
</xfdf>

此信息不足以创建 PDF,但如您所见,有一个对模板 PDF 文件的引用:Requisition_Fillable.pdf

如果您将data.xfdfandRequisition_Fillable.pdf放在同一目录中并打开data.xfdf,您将看到以下消息:

在此处输入图像描述

Adobe Reader 打开 XFDF 文件,找到对 PDF 模板的引用,打开模板,现在询问您是否要导入数据。如果您单击选项按钮并允许导入,您将获得以下结果:

在此处输入图像描述

您遇到的问题很简单:您在任何地方都没有 Requisition_Fillable.pdf 文件。您可能还希望避免人们能够更改填写的数据。

您可以通过以编程方式合并 XFDF 文件及其模板来解决此问题:

protected void fillXfdf(String SRC, String XFDF, String DEST) throws IOException, DocumentException {
    // We receive the XML bytes
    XfdfReader xfdf = new XfdfReader(new FileInputStream(XFDF));
    // We get the corresponding form
    PdfReader reader = new PdfReader(SRC);
    // We create an OutputStream for the new PDF
    FileOutputStream baos = new FileOutputStream(DEST);
    // Now we create the PDF
    PdfStamper stamper = new PdfStamper(reader, baos);
    // We alter the fields of the existing PDF
    AcroFields fields = stamper.getAcroFields();
    fields.setFields(xfdf);
    // take away all interactivity
    stamper.setFormFlattening(true);
    // close the stamper
    stamper.close();
    reader.close();
}

请注意以下行:

stamper.setFormFlattening(true);

这将使表单变平:字段将不再是字段,它们将与任何其他内容一样。你最终得到一个普通的 PDF:xfdf_merged.pdf

在此处输入图像描述

显然,这仅在表单(在这种情况下Requisition_Fillable.pdf)与 XFDF 流中的数据相对应时才有效。例如:我的模板将使用您的字段数据"Submitted by""Shipping address". 它不适用于字段"Job Name""Special Instructions",因为这些字段在我的模板中不存在。在我的模板中,这些字段被命名为"Job name"and "Special instructions"; 你看到小写而不是大写吗?

如果您想使用我的模板,则必须在 XFDF 文件或 PDF 模板中更改这两个字段名称。另外:我的示例是用 Java 编写的。当您在 VB 中工作时,您必须使用称为 iTextSharp 的 .NET 版本的 iText。经验丰富的 VBA 开发人员将我的示例从 Java 移植到 VB 应该没有任何问题。只需将 Java 视为伪代码即可。

免责声明:以上示例需要 iText。我是 iText Group 的 CEO,这个例子取自我的书“iText in Action - Second Edition”。

于 2015-05-28T15:17:18.853 回答