<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們在公司可能遇到一些檔案轉pdf的場景,這裡主要講述html轉pdf。
通常在c#裡面有很多html轉pdf的元件,我們採用第三方的元件,比如 iTextSharp, aspose等,但是有些元件用起來複雜,需要很多設定,而且在轉換出來之後可能出現排版不正確的場景
下面主要介紹Select.HtmlToPdf的使用,很簡單且方面,可以一次性生成幾百頁不是問題,關鍵是免費哦。
如上有Select.HtmlToPdf和 Select.HtmlToPdf.netcore,兩種的使用差不多,只是Select.HtmlToPdf.netcore支援css效果更好,不過Select.HtmlToPdf.netcore只支援win,不支援linux,這個有點坑,其他還好,接下來我們使用Select.HtmlToPdf.netcore進行演示
static void Main(string[] args) { try { string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "資料夾", "資料夾下的html檔案"); string line = ""; var testStr = new StringBuilder(); using (StreamReader sr = new StreamReader(fullPath)) { while ((line = sr.ReadLine()) != null) { testStr.Append(line); } } SelectPdf.HtmlToPdf converter = new SelectPdf.HtmlToPdf(); PdfDocument doc = new PdfDocument(); for (int i = 0; i < 10; i++) { testStr.Replace("#ImageUrl#", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "資料夾", "資料夾下的圖片"));//由於html中圖片,使用相對地址解析不出來,所以使用替換方式去解決 var docStr = converter.ConvertHtmlString(testStr.ToString()); doc.Append(docStr); } doc.Save("xxxx");儲存到xxx路徑下 doc.Close(); } catch (Exception e) { //dosomething } Console.ReadLine(); } }
如上一次性列印多張pdf,思路:
1.在本地找到要轉換的html檔案,當然你也可以設定在程式裡面,通過流的形式讀出來,也可用file的方法去讀,拿到html字串
2.建立一個html轉pdf的物件,建立一個新的pdf檔案物件
3.通過html轉pdf物件的converthtmlstring去獲取html字串,另外還提供converurl的方法去把一個網頁轉換換成pdf,是不是很方便切功能強大。
4.save用來儲存pdf的路徑,關閉pdf物件,操作文成,即可看到
這樣就是實現了html 轉pdf,另外,這個元件還提供了很多api可用
附上連結:https://selectpdf.com/docs/Index.htm
public string HtmlToPdf(string url) { bool success = true; // string dwbh = url.Split('?')[1].Split('=')[1]; //CommonBllHelper.CreateUserDir(dwbh); //url = Request.Url.Host + "/html/" + url; string guid = DateTime.Now.ToString("yyyyMMddhhmmss"); string pdfName = "1.pdf"; //string path = Server.MapPath("~/kehu/" + dwbh + "/pdf/") + pdfName; string path = "D:\" + pdfName; try { if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(path)) success = false; string str = Server.MapPath("~\bin\wkhtmltopdf.exe"); Process p = System.Diagnostics.Process.Start(str, url+" "+path); p.WaitForExit(); if (!System.IO.File.Exists(str)) success = false; if (System.IO.File.Exists(path)) { FileStream fs = new FileStream(path, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); if (Request.UserAgent != null) { string userAgent = Request.UserAgent.ToUpper(); if (userAgent.IndexOf("FIREFOX", StringComparison.Ordinal) <= 0) { Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(pdfName, Encoding.UTF8)); } else { Response.AddHeader("Content-Disposition", "attachment; filename=" + pdfName); } } Response.ContentEncoding = Encoding.UTF8; Response.ContentType = "application/octet-stream"; //通知瀏覽器下載檔案而不是開啟 Response.BinaryWrite(bytes); Response.Flush(); Response.End(); fs.Close(); System.IO.File.Delete(path); } else { Response.Write("檔案未找到,可能已經被刪除"); Response.Flush(); Response.End(); } } catch (Exception ex) { success = false; } return ""; }
protected void Page_Load(object sender, EventArgs e) { HtmlToPdf("http://www.deriva.cn"); }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45