C#生轉換網頁為pdf

來源:互聯網
上載者:User
最近工作中遇到一個將htm轉換為pdf的任務,這是一個有很有用的功能塊,然而很遺憾,網上沒有現成可行(包括開源/免費、易用和可維護性的考慮)方案。既然沒有現成的解決方案就自己著手解決吧。
從htm產生pdf大概可以分兩步實現,第一步,解析htm,就是將htm源檔案中那一對文本轉換為瀏覽器最終呈現給我們那種圖文並茂的結果。這是一個不可完成的任務,因為目前為止業界的軟體巨頭也沒有誰把htm解析做得很好的。對比ie、firefox等瀏覽器的顯示結果便可想而知。既然業界難題,我也就不去鑽牛角尖做技術攻關了,先跳過這步,考慮下一步的事情。
第二步,繪製pdf,這個簡單,網上有很多資料,有興趣的朋友可以研究pdf的檔案格式,安裝二進位組裝pdf。我有興趣,然而沒有時間,我覺得軟體從業者時刻都應該關注最有價值的事情。軟體從業者要提高效率的第一法門便是重用,網上有一個叫itextsharp的東西是用來繪製pdf的,可以免費使用而且開源。
下載itextsharp,試著用itextsharp繪製htm看看效果,如您所料,繪製出的是htm的原始碼。因為第一步的事情我們還沒有解決,下面來解決第一步的事情。
記得很久以前見過一個.net寫的網頁snap工具,大概思路是利用webbrowser的DrawToBitmap方法將ie的顯示結果輸出到Sytem.Drawing.Bitmap對象。大概代碼如下://WebBrowser wb=null;
 System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(w, h);
 wb.DrawToBitmap(bmp, new System.Drawing.Rectangle(0,0, w, h));

ok,htm可以解析了,現在重組剛才的代碼,思路如下:
使用webbrowser將htm解析並轉換為圖片,使用itextsharp將剛才的圖片繪製成pdf。
有用是給公司開發的功能,暫時不便公開源碼,提供我編譯後的工具供下載使用,您也可以根據上面的思路定製:
使用方法,
1.將單個url轉換為pdf:PageToPDF.exe "http://www.g.cn/" "google.jpg"
2.將多個url轉換為pdf:pagetopdf.exe task.txt "C:\pdfdir\"
 task.txt是任務裡表,裡面提供多行url,每個url以#檔案名稱為尾碼,如:http://www.baidu.com/#b表示將http://www.baidu.com/轉換為pdf檔案名稱為b(副檔名系統自己會追加)
在asp.net環境下使用
將pagetopdf上傳至網站中,設定好目錄許可權,範例程式碼:

Code

        public static bool CreatePPDF(string url,string path)
        {
            try
            {
                if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(path))
                    return false;
                Process p = new Process();
                string str = System.Web.HttpContext.Current.Server.MapPath("~/afafafasf/PageToPDF.exe ");
                if (!System.IO.File.Exists(str))
                    return false;
                p.StartInfo.FileName = str;
                p.StartInfo.Arguments = " \"" + url + "\" " + path;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();
                System.Threading.Thread.Sleep(500);
                return true;
            }
            catch(Exception ex)
            {
                Sys.Log.error("Pdf create err.",ex);
            }
            return false;
        }

特性
在使用任務形式工作時,系統會啟動多個進程,即工作管理員中會有多個pagetopdf.exe的進程,這是系統發送器自己啟動的,為了加個任務處理速度。進程數由發送器自己控制,最多不會超過十個。

PageToPDF

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.