我目前正在使用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.发布于 2015-05-28 15:17:18
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文件的引用:Fillable.pdf。
如果将data.xfdf和Requisition_Fillable.pdf放在同一个目录中,然后打开data.xfdf,您将看到以下消息:

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

您所遇到的问题很简单:您在任何地方都没有文件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:merged.pdf

显然,这只有在表单(在本例中是Requisition_Fillable.pdf)与XFDF流中的数据相对应时才能工作。例如:我的模板将处理"Submitted by"和"Shipping address"字段的数据。它不适用于"Job Name"和"Special Instructions"字段,因为这些字段不存在于我的模板中。在我的模板中,这些字段名为"Job name"和"Special instructions";您看到的是小写而不是大写吗?
如果您想使用我的模板,您必须更改这两个字段名,无论是在XFDF文件中还是在PDF模板中。另外:我的示例是用Java编写的。当您在VB中工作时,您必须使用.NET版本的iText,称为iTextSharp。一个有经验的VBA开发人员应该不会有任何问题将我的示例从Java移植到VB。只要把Java看作是伪代码。
免责声明:上面的示例需要iText。我是iText集团的首席执行官,这个例子摘自我的书"iText in Action -第二版“。
https://stackoverflow.com/questions/30508966
复制相似问题