2008-09-16 40 views

回答

17

您應該使用cfdocument標籤(格式爲「PDF」)通過將其放置在您正在生成的頁面上來生成PDF。您需要指定文件名屬性,否則文檔將直接傳輸到您的瀏覽器。

將內容另存爲PDF後,結合使用cfheader和cfcontent將PDF作爲附件(「另存爲」)輸出,並將該文件添加到響應流中。我還在cfcontent標籤上添加了deletefile =「Yes」,以保持文件系統清潔文件。

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes"> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <title>Hello World</title> 
</head> 
<body> 
    Hello World 
</body> 
</html> 
</cfdocument> 
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf"> 
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes"> 

順便說一句:我只是用file.pdf在下面的示例中的文件名,但你可能需要使用一些隨機或會話生成的字符串的文件名,以避免競爭條件而產生的問題。

1

我對ColdFusion並不熟悉,但您需要做的是在用戶請求它爲application/octet-stream時設置頁面的Content-Type。這會每次提示他們下載。

希望這會有所幫助!

3

如果您想避免存儲PDF,使用不帶文件名的cfdocument將直接向瀏覽器發送pdf(不包含cfheader和cfcontent)。

警告:與使用cfheader/cfcontent一樣,您需要在緩存刷新到瀏覽器之前執行此操作,因爲它基本上在不存儲文件的情況下執行相同的操作。

爲了獲得內容,我可能會使用cfsavecontent包裹在相同的調用/ includes/etc中。生成頁面,但有兩個主要的例外。 cfdocument似乎與外部樣式表有關,因此使用include將樣式直接放入文檔中可能是一個好主意。您可以嘗試使用@import代替 - 適用於某些人。另外,我會注意與圖像的相關鏈接,因爲它們有時可能會斷裂。

3

<cfdocument>方法是完成它的認可方式,但它不能提供任何操作現有PDF文檔的方式。我有一個項目,我需要使用預先設計的打印分辨率PDF模板生成優惠券。 <cfdocument>可以讓我近似輸出,但只能使用HTML中嵌入的位圖圖像。誠然,我可以通過製作一個大圖像並用HTML來縮放它來僞造打印分辨率,但原始圖像是一個不錯的,乾淨的矢量圖像文件,我想用它來代替。

我最終使用<cfx_pdf>的副本來完成工作。 (Developer's SiteCF Tag Store)它是一個圍繞Java PDF庫的CF包裝器,可讓您操作現有的PDF文檔,包括填寫PDF表單,設置權限,合併文件,繪製矢量圖形,表格和文本,使用自定義字體等如果你願意與它合作,你可以得到一些非常壯觀的結果。

一個缺點是,它似乎開發人員已經離開這個產品牧場很長一段時間。開發者網站仍然是版權2003,並沒有提到過去ColdFusion MX 6.1的任何內容。我最終不得不破解一些加密的模板,以便修復一些錯誤並使其按照我的需要工作。不過,它是一個強大的工具。

相關問題