2015-05-28 113 views
1

我目前使用Excel來填充表單域的PDF文件。它都可以工作,但是它將它導出爲.xfdf。有誰知道我可以如何將它保存爲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. 
+0

我對您使用的過程並不熟悉,但我注意到您的文件名以'&「.xfdf」'結尾,因此它會創建一個'.xfdf'文件。不過,我不認爲簡單地將該擴展名改爲.pdf將會創建一個PDF文件。 – FreeMan

+0

我試過這樣做,但是當打開生成的文件時說它已損壞,無法打開。 :\ – santaaimonce

+0

您是否曾想過使用Excel重新創建PDF,將其填入數據中,然後將所有內容保存爲PDF?你必須使用你的pdf模板嗎? –

回答

2

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.xfdfRequisition_Fillable.pdf在同一目錄下並打開data.xfdf,你會看到以下消息:

enter image description here

的Adobe Reader中打開了XFDF文件,發現參考PDF模板,打開模板,現在詢問您是否要導入數據。如果你點擊選項按鈕,你允許進口,你會得到這樣的結果:

enter image description here

您遇到的問題很簡單:你沒有文件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

enter image description here

顯然,如果形式(在這種情況下Requisition_Fillable.pdf)與XFDF流中的數據對應這隻會工作。例如:我的模板將與您的數據在"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」。

+0

哇這是一個了不起的答案。它符合我的要求。謝謝! – santaaimonce

+0

嗨布魯諾。我試圖在itext下查找任何註釋xfdf相關的線程。 itext5支持它嗎?這個樣本除其他外,我只遇到了表單域。 – chitgoks

+0

@chitgoks沒有付費客戶要求我們支持註釋,也沒有開源用戶曾經貢獻過代碼來支持註釋,因此iText 5不支持註釋。你是說你願意爲註解支持編寫代碼嗎? –