将 .xfdf 另存为 .pdf
Saving .xfdf as .pdf
我目前正在使用 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.
XFDF 是 FDF 的 XML 风格。 FDF 代表表单数据格式。它是一种用于存储没有 PDF 实际内容的数据的文件格式。 FDF 使用 PDF 语法来存储这些数据。 XFDF 使用 XML.
您无法 "convert" 将 FDF 或 XFDF 文件转换为 PDF,因为缺少太多信息。您可以将 (X)FDF 文件导入到具有相应 AcroForm 字段的 PDF 中。
请看ImportXFDF example. For that example, I wrote a simple XFDF file: 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.xfdf
和 Requisition_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"
和 "Special instructions"
;你看到的是小写字母而不是大写字母吗?
如果您想使用我的模板,则必须在 XFDF 文件或 PDF 模板中更改这两个字段名称。另外:我的例子是用Java写的。当您在 VB 中工作时,您必须使用 iText 的 .NET 版本,称为 iTextSharp。经验丰富的 VB 开发人员将我的示例从 Java 移植到 VB 应该没有任何问题。只需将 Java 视为伪代码即可。
免责声明:以上示例需要 iText。我是 iText Group 的首席执行官,示例取自我的书 "iText in Action - Second Edition"。
我目前正在使用 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.
XFDF 是 FDF 的 XML 风格。 FDF 代表表单数据格式。它是一种用于存储没有 PDF 实际内容的数据的文件格式。 FDF 使用 PDF 语法来存储这些数据。 XFDF 使用 XML.
您无法 "convert" 将 FDF 或 XFDF 文件转换为 PDF,因为缺少太多信息。您可以将 (X)FDF 文件导入到具有相应 AcroForm 字段的 PDF 中。
请看ImportXFDF example. For that example, I wrote a simple XFDF file: 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.xfdf
和 Requisition_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"
和 "Special instructions"
;你看到的是小写字母而不是大写字母吗?
如果您想使用我的模板,则必须在 XFDF 文件或 PDF 模板中更改这两个字段名称。另外:我的例子是用Java写的。当您在 VB 中工作时,您必须使用 iText 的 .NET 版本,称为 iTextSharp。经验丰富的 VB 开发人员将我的示例从 Java 移植到 VB 应该没有任何问题。只需将 Java 视为伪代码即可。
免责声明:以上示例需要 iText。我是 iText Group 的首席执行官,示例取自我的书 "iText in Action - Second Edition"。