c#实现将网页转换成pdf文件的方法,在c#编程中使用textsharp将网页转换为pdf格式的文件,利用webbrowser的DrawToBitmap方法将ie的显示结果输出到Sytem.Drawing.Bitmap对象。
c#将网页转换为pdf文件
第一步,解析htm,就是将htm源文件中那一对文本转换为浏览器最终呈现给我们那种图文并茂的结果。
这是一个不可完成的任务,因为目前为止业界的软件巨头也没有谁把htm解析做得很好的。
对比ie、firefox等浏览器的显示结果便可想而知。
第二步,绘制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上传至网站中,设定好目录权限。
代码:
复制代码 代码示例:
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.Use
shellExecute = 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的进程,这是系统调度程序自己启动的,为了加个任务处理速度。
进程数由调度程序自己控制,最多不会超过十个。