2010-08-02 175 views

回答

1

一個簡單的方法,這很容易,但可能不是最有效的方法是將固定文檔渲染爲圖像,然後使用iTextSharp將圖像嵌入到PDF中。

我在成功之前就這樣做了。最初我試圖將控制原語(形狀)轉換爲PDF等價物,但事實證明這太難了。

0

如果你可以從WPF獲取它的圖像,那麼你可以像它們在本文中那樣將它導入到iTextSharp中。如果您將它寫入MemoryStream,然後使用該文件而不是使用FileStream,則甚至可以一起避免文件系統。

http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images

+1

將文本或矢量圖形到一個圖像,然後把它變成一個PDF擊敗PDF的目的。您將無法選擇或搜索文本或放大而不會丟失質量。 – 2010-08-18 05:26:01

+1

如果您生成足夠的DPI圖像以允許清晰的打印,它還會創建非常大的PDF。 – Paddy 2010-08-18 08:38:32

+1

你有什麼建議嗎?我同意這些陳述。 – 2010-08-18 18:00:54

0

,如果你想以編程方式做到這一點,你最好的選擇將是以下路徑XPS(固定文檔) - >打印到PS - >使用Ghostscript的閱讀PS並轉換爲PDF格式。 如果您不關心在代碼中讀取PDF,您可以打印到任何一臺可以傳遞目標路徑的免費PDF打印機。這樣,如果您的報告中有任何測試,您的目標PDF文件仍然可以搜索。

6

WPF固定文檔,也稱爲XPS文檔,是對PDF的明顯改進。它具有許多PDF缺乏的功能。在大多數情況下,最好將文檔分發爲XPS而不是PDF,但有時需要將XPS轉換爲PDF,例如,如果您需要在僅支持PDF的設備上打開文檔。不幸的是,大多數從XPS轉換爲PDF的免費工具,比如CutePDF和BullzipPDF,都需要安裝打印機驅動程序或者不是開源的。

一個好的開源解決方案是使用GhostPDL的一部分「gxps」工具。 GhostPDL是Ghostscript項目的一部分,並且是GPL2開源許可的。

  1. http://ghostscript.com/releases/ghostpdl-8.71.tar.bz2下載GhostPDL並進行編譯。
  2. 將gxps.exe可執行文件作爲內容複製到您的項目中,並使用Process.Start從您的代碼中調用它。

您的代碼可能是這樣的:

string pdfPath = ... // Path to place PDF file 

string xpsPath = Path.GetTempPath(); 
using(XpsDocument doc = new XpsDocument(xpsPath, FileAccess.Write)) 
    XpsDocument.CreateXpsDocumentWriter(doc).Write(... content ...); 

Process.Start("gxps.exe", 
       "-sDEVICE=pdfwrite -sOutputFile=" + 
        pdfPath + 
        "-dNOPAUSE " + 
        xpsPath).WaitForExit(); 

// Now the PDF file is found at pdfPath 
+1

非常好(它工作,這是很好,但它會很方便MS有這樣的功能,這樣開箱即用)... – Paddy 2010-08-23 09:00:12

+0

這種情況下的許可證呢?我不需要GPL2我的項目,因爲我只執行正確的程序?有沒有其他這樣的工具不必是開源的,但仍然是免費的? – drasto 2011-04-24 22:25:45

+0

GPL2要求您確保自己的程序「可合理地被認爲是獨立且獨立的工作」,並且不能分發您的作品「作爲基於」GhostPDL「的整體工作的一部分。關於這方面的法律影響,意見各不相同。如果GhostPDL與您的應用程序分開安裝,並且您的應用程序知道如何調用它,那麼您幾乎肯定是安全的。您也可以考慮創建一個統一的安裝程序來保存用戶進行兩次單獨安裝。 – 2011-04-25 13:40:15