C#導出PDF功能是開發中經常遇到的功能,我們採用第三方的組件,比如iTextSharp,aspose等,還能搜到一些開源的類庫,但是對於一些內容複雜樣式豐富的PDF,我們希望通過傳入一個URL直接生成一個PDF,並且不能與網頁原版差異太大,Pechkin倒是不錯,相對來說差異很小。在 Nuget ...
C#導出PDF功能是開發中經常遇到的功能,我們採用第三方的組件,比如 iTextSharp, aspose等,還能搜到一些開源的類庫,
但是對於一些內容複雜樣式豐富的PDF,我們希望通過傳入一個URL直接生成一個PDF,並且不能與網頁原版差異太大,Pechkin倒是不錯,相對來說差異很小。
在 Nuget 管理器中搜索“Pechkin”,請選擇 CPechkin For .Net20+,這個組件是作者在 Pechkin 基礎上修改的,剔除了 Common.Loging 依賴,描述中說項目必須是x86編譯,但我發現,只有Web項目必須是x86編譯(IIS應用程式池好像還要設置成x86),否則運行會報錯,Windows Service, Windows Form項目可以預設 Any CPU
包載入完畢後,會在項目根目錄下放置幾個DLL,這些是 Pechkin 依賴的,如果想刪除,請先將這幾個DLL拷貝到bin下
編譯後,BIN下麵有7個相關的DLL,這就是 Pechkin 的全部
調用代碼很簡單,兩行就搞定了,SetMargins 設設置PDF的頁邊距。
Pechkin.Synchronized.SynchronizedPechkin sc = new Pechkin.Synchronized.SynchronizedPechkin(new Pechkin.GlobalConfig().SetMargins(new System.Drawing.Printing.Margins(20, 20, 20, 20))); byte[] buf = sc.Convert(new Uri(previewUrl));
var ms = new System.IO.MemoryStream(buf); var fn = string.Format("report_{0}.pdf", reportNo); Logger.Instance.WriteLine("Generate a pdf from url {0}", previewUrl); return new List<System.Net.Mail.Attachment> { new System.Net.Mail.Attachment(ms, fn, "application/pdf") };
得到一個 byte[]後,你可以寫入一個文件產生一個PDF。我在代碼中寫入一個MemoryStream,然後加入郵件的附件發送,很方便。
Pechkin也支持傳入一段HTML代碼,生成一個PDF。
再看生成出來的PDF,左邊是PDF,右邊是原版網頁,差別不大,就是表格的背景色丟失。