最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 生轉(zhuǎn)換網(wǎng)頁為pdf

 更新時(shí)間:2009年07月30日 21:58:55   作者:  
最近工作中遇到一個(gè)將htm轉(zhuǎn)換為pdf的任務(wù),這是一個(gè)有很有用的功能塊,然而很遺憾,網(wǎng)上沒有現(xiàn)成可行(包括開源/免費(fèi)、易用和可維護(hù)性的考慮)方案。既然沒有現(xiàn)成的解決方案就自己著手解決吧。
從htm生成pdf大概可以分兩步實(shí)現(xiàn),第一步,解析htm,就是將htm源文件中那一對(duì)文本轉(zhuǎn)換為瀏覽器最終呈現(xiàn)給我們那種圖文并茂的結(jié)果。這是一個(gè)不可完成的任務(wù),因?yàn)槟壳盀橹箻I(yè)界的軟件巨頭也沒有誰把htm解析做得很好的。對(duì)比ie、firefox等瀏覽器的顯示結(jié)果便可想而知。既然業(yè)界難題,我也就不去鉆牛角尖做技術(shù)攻關(guān)了,先跳過這步,考慮下一步的事情。
第二步,繪制pdf,這個(gè)簡(jiǎn)單,網(wǎng)上有很多資料,有興趣的朋友可以研究 pdf的文件格式,安裝二進(jìn)制組裝pdf。我有興趣,然而沒有時(shí)間,我覺得軟件從業(yè)者時(shí)刻都應(yīng)該關(guān)注最有價(jià)值的事情。軟件從業(yè)者要提高效率的第一法門便是重用,網(wǎng)上有一個(gè)叫itextsharp的東西是用來繪制pdf的,可以免費(fèi)使用而且開源。
下載itextsharp,試著用itextsharp繪制htm看看效果,如您所料,繪制出的是htm的源代碼。因?yàn)榈谝徊降氖虑槲覀冞€沒有解決,下面來解決第一步的事情。
記得很久以前見過一個(gè).net寫的網(wǎng)頁snap工具,大概思路是利用webbrowser的DrawToBitmap方法將ie的顯示結(jié)果輸出到Sytem.Drawing.Bitmap對(duì)象。大概代碼如下:
//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可以解析了,現(xiàn)在重組剛才的代碼,思路如下:
使用webbrowser將htm解析并轉(zhuǎn)換為圖片,使用itextsharp將剛才的圖片繪制成pdf。
有用是給公司開發(fā)的功能,暫時(shí)不便公開源碼,提供我編譯后的工具供下載使用,您也可以根據(jù)上面的思路定制:
使用方法,
1.將單個(gè)url轉(zhuǎn)換為pdf:PageToPDF.exe "http://www.g.cn/" "google.jpg"
2.將多個(gè)url轉(zhuǎn)換為pdf:pagetopdf.exe task.txt "C:\pdfdir\"
task.txt是任務(wù)里表,里面提供多行url,每個(gè)url以#文件名為后綴,如:http://www.baidu.com/#b表示將http://www.baidu.com/轉(zhuǎn)換為pdf文件名為b(擴(kuò)展名系統(tǒng)自己會(huì)追加)
在asp.net環(huán)境下使用
將pagetopdf上傳至網(wǎng)站中,設(shè)定好目錄權(quán)限,示例代碼:
復(fù)制代碼 代碼如下:

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;
}

特性
在使用任務(wù)形式工作時(shí),系統(tǒng)會(huì)啟動(dòng)多個(gè)進(jìn)程,即任務(wù)管理器中會(huì)有多個(gè)pagetopdf.exe的進(jìn)程,這是系統(tǒng)調(diào)度程序自己?jiǎn)?dòng)的,為了加個(gè)任務(wù)處理速度。進(jìn)程數(shù)由調(diào)度程序自己控制,最多不會(huì)超過十個(gè)。

相關(guān)文章

  • ASP.NET配置文件中自定義節(jié)點(diǎn)

    ASP.NET配置文件中自定義節(jié)點(diǎn)

    這篇文章介紹了ASP.NET配置文件中自定義節(jié)點(diǎn)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 詳解ASP.NET Core應(yīng)用中如何記錄和查看日志

    詳解ASP.NET Core應(yīng)用中如何記錄和查看日志

    本篇文章主要介紹了ASP.NET Core應(yīng)用中如何記錄和查看日志,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • ASP.Net開發(fā)常見的一些問題總結(jié)

    ASP.Net開發(fā)常見的一些問題總結(jié)

    ASP.Net開發(fā)常見的一些問題總結(jié),需要的朋友可以參考一下
    2013-02-02
  • Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余

    Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余

    最近在學(xué)習(xí)開發(fā)服務(wù)器控件,其它就少不了為控件注冊(cè)js和css之類的資源文件,或者直接注冊(cè)純腳本樣式。其中就遇到如下問題     1、 注冊(cè)的資源文件或純腳本樣式在生成的頁面中都不在head標(biāo)簽中(當(dāng)然這個(gè)不影響頁面功能)     2、 一個(gè)頁面使用多個(gè)一樣的控件時(shí),會(huì)出現(xiàn)重復(fù)輸入(出現(xiàn)多余代碼)
    2013-02-02
  • asp.net中JavaScript數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)代碼

    asp.net中JavaScript數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)代碼

    我對(duì)JavaScript一直不了解。常常為了一點(diǎn)點(diǎn)的數(shù)據(jù)驗(yàn)證和無刷新就去動(dòng)用AJAX,實(shí)在不爽——有點(diǎn)殺雞用牛刀的感覺。
    2010-05-05
  • ASP.NET Core2讀寫InfluxDB時(shí)序數(shù)據(jù)庫的方法教程

    ASP.NET Core2讀寫InfluxDB時(shí)序數(shù)據(jù)庫的方法教程

    Influxdb是一個(gè)開源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫,使用go語言編寫,無需外部依賴,下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core2讀寫InfluxDB時(shí)序數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • asp.net checkbox 動(dòng)態(tài)綁定id GridView刪除提示

    asp.net checkbox 動(dòng)態(tài)綁定id GridView刪除提示

    asp.net checkbox 動(dòng)態(tài)綁定id,需要的朋友可以參考下。雖然簡(jiǎn)單但不知道挺麻煩的。GridView刪除提示
    2009-10-10
  • ASP.NET MVC5網(wǎng)站開發(fā)添加文章(八)

    ASP.NET MVC5網(wǎng)站開發(fā)添加文章(八)

    小編整理的ASP.NET MVC5網(wǎng)站開發(fā)是一系列的文章體系,大家要一篇篇的仔細(xì)閱讀,今天這篇文章主要介紹了ASP.NET MVC5網(wǎng)站開發(fā)添加文章,需要的朋友可以參考下
    2015-09-09
  • .NET?Core使用Worker?Service創(chuàng)建服務(wù)

    .NET?Core使用Worker?Service創(chuàng)建服務(wù)

    這篇文章介紹了.NET?Core使用Worker?Service創(chuàng)建服務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 10個(gè).NET中刪除空白字符串的方法

    10個(gè).NET中刪除空白字符串的方法

    我們有無數(shù)方法可用于刪除字符串中的所有空白。大部分都能夠在絕大多數(shù)的用例中很好工作,但在某些對(duì)時(shí)間敏感的應(yīng)用程序中,是否采用最快的方法可能就會(huì)造成天壤之別。
    2015-08-08

最新評(píng)論

宁都县| 天气| 怀仁县| 会昌县| 陆河县| 潮安县| 八宿县| 韩城市| 驻马店市| 集贤县| 高台县| 麻栗坡县| 龙岩市| 专栏| 资兴市| 凉城县| 昌都县| 嘉定区| 惠州市| 新和县| 印江| 漠河县| 西林县| 筠连县| 安塞县| 县级市| 浪卡子县| 凉山| 丹阳市| 中卫市| 嘉峪关市| 南木林县| 铅山县| 洞头县| 星座| 莫力| 太康县| 盐津县| 平阳县| 丽江市| 财经|