C#生轉換網頁為pdf
最近工作中遇到一個將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將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上傳至網站中,設定好目錄許可權,示例程式碼:
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的程式,這是系統排程程式自己啟動的,為了加個任務處理速度。程式數由排程程式自己控制,最多不會超過十個。
從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可以解析了,現在重組剛才的程式碼,思路如下:System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(w, h);
wb.DrawToBitmap(bmp, new System.Drawing.Rectangle(0,0, w, h));
使用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上傳至網站中,設定好目錄許可權,示例程式碼:
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的程式,這是系統排程程式自己啟動的,為了加個任務處理速度。程式數由排程程式自己控制,最多不會超過十個。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# 將PDF文件轉換為Markdown文件C#
- PDF批次轉換器,批次轉word為pdf,批次轉ppt為pdf
- 使用C#,VB和Java將PDF轉換為DOC / DOCXJava
- C# 將PDF轉為線性化PDFC#
- C# 將PDF轉為ExcelC#Excel
- C# 將OFD轉為PDFC#
- Web頁面或URL轉換為PDF的線上工具Web
- 將網頁轉換為Markdown的免費線上轉換工具網頁
- aspose word轉換pdf檔案後將pdf檔案轉換為圖片png
- 怎麼樣轉換pdf格式為Word?
- PDF檔案轉換為DWF檔案
- WebToLayers如何將網頁轉換為PSD文件?Web網頁
- 利用Qt將網頁儲存為PDFQT網頁
- 初探JavaScript PDF blob轉換為Word docx方法JavaScript
- go用unioffice轉換word文件為pdfGo
- C#/VB.NET 將彩色PDF轉為灰度C#
- C#實現 word、pdf、ppt 轉為圖片C#
- 在 Linux 中把一個網頁轉換成 PDF的技巧介紹Linux網頁
- ofd檔案如何轉換成pdf格式 電腦ofd檔案如何免費轉換為pdf格式
- Cisdem PDF Creator(PDF 生成轉換器)
- Java 將PDF轉為PDF/AJava
- pdf轉換成word,免費轉換
- 如何免費將PDF轉成HTML網頁?HTML網頁
- Python 將PDF轉為PDF/A、PDF/X,以及PDF/A轉回PDFPython
- C# iText 7 切分PDF,處理PDF頁面大小C#
- Python實現批次將ppt轉換為pdfPython
- 利用命令列將pdf轉換為長圖命令列
- Python實現批量將ppt轉換為pdfPython
- 利用vbs指令碼將word文件轉換為pdf指令碼
- 如何將網頁快速轉換為WPS與WORD文件網頁
- C#將html轉pdfC#HTML
- 用C#把檔案轉換為XML(轉)C#XML
- PDF轉換器手機版,PPT轉PDF方法
- cad圖紙怎麼轉換成pdf格式?Cad快速轉為pdf的方法
- pdf轉word如何線上轉換?
- ABBYY FineReader PDF——PDF轉換工具
- 線上檔案格式(PDF相關)轉換網站網站
- 如何將 PowerPoint 簡報轉換為 PDF 檔案?