C#導(dǎo)出PDF功能是開發(fā)中經(jīng)常遇到的功能,我們采用第三方的組件,比如 iTextSharp, aspose等,還能搜到一些開源的類庫,
但是對(duì)于一些內(nèi)容復(fù)雜樣式豐富的PDF,我們希望通過傳入一個(gè)URL直接生成一個(gè)PDF,并且不能與網(wǎng)頁原版差異太大,Pechkin倒是不錯(cuò),相對(duì)來說差異很小。
在 Nuget 管理器中搜索“Pechkin”,請(qǐng)選擇 CPechkin For .Net20+,這個(gè)組件是作者在 Pechkin 基礎(chǔ)上修改的,剔除了 Common.Loging 依賴,描述中說項(xiàng)目必須是x86編譯,但我發(fā)現(xiàn),設(shè)置成 Any CPU也可以,但是如果是Web項(xiàng)目,部署到IIS后,應(yīng)用程序池高級(jí)設(shè)置中必須選擇啟用32位應(yīng)用程序,否則運(yùn)行會(huì)報(bào)錯(cuò)。
包加載完畢后,會(huì)在項(xiàng)目根目錄下放置幾個(gè)DLL,這些是 Pechkin 依賴的,如果想刪除,請(qǐng)先將這幾個(gè)DLL拷貝到bin下
編譯后,BIN下面有7個(gè)相關(guān)的DLL,這就是 Pechkin 的全部
調(diào)用代碼很簡(jiǎn)單,兩行就搞定了,SetMargins 設(shè)設(shè)置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") };
得到一個(gè) byte[]后,你可以寫入一個(gè)文件產(chǎn)生一個(gè)PDF。我在代碼中寫入一個(gè)MemoryStream,然后加入郵件的附件發(fā)送,很方便。
Pechkin也支持傳入一段HTML代碼,生成一個(gè)PDF。
再看生成出來的PDF,左邊是PDF,右邊是原版網(wǎng)頁,差別不大,就是表格的背景色丟失。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注