将.xfdf保存为.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。

您不能将FDF或XFDF文件“转换”为PDF,因为缺less太多的信息。 您可以将(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> 

这些信息不足以创buildPDF,但正如您所看到的,还有一个对模板PDF文件的引用: Requisition_Fillable.pdf 。

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

在这里输入图像说明

Adobe Reader打开XFDF文件,find对PDF模板的引用,打开模板,现在询问您是否要导入数据。 如果你点击选项button,并允许导入,你会得到这个结果:

在这里输入图像说明

您遇到的问题很简单:您没有任何文件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 )与XFDFstream中的数据对应时才有效。 例如:我的模板将与您的数据一起处理"Submitted by""Shipping address"字段。 它不适用于"Job Name""Special Instructions"字段,因为这些字段不存在于我的模板中。 在我的模板中,这些字段被命名为"Job name""Special instructions" ; 你看到小写字母而不是大写字母吗?

如果要使用我的模板,则必须在XFDF文件或PDF模板中更改这两个字段名称。 另外:我的例子是用Java编写的。 当你在VB中工作时,你将不得不使用iText的.NET版本,它被称为iTextSharp。 一个有经验的VBA开发人员不应该有任何问题将我的示例从Java移植到VB。 只要想到Java就好像是伪代码一样。

免责声明:上面的例子需要iText。 我是iText集团的首席执行官,这个例子来自我的书“iText in Action – Second Edition”。