C# 生转换网页为pdf

 更新时间:2009年07月30日 21:58:55   作者:  
最近工作中遇到一个将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上传至网站中,设定好目录权限,示例代码:
复制代码 代码如下:

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的进程,这是系统调度程序自己启动的,为了加个任务处理速度。进程数由调度程序自己控制,最多不会超过十个。

相关文章

  • ASP.NET配置文件中自定义节点

    ASP.NET配置文件中自定义节点

    这篇文章介绍了ASP.NET配置文件中自定义节点的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 详解ASP.NET Core应用中如何记录和查看日志

    详解ASP.NET Core应用中如何记录和查看日志

    本篇文章主要介绍了ASP.NET Core应用中如何记录和查看日志,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • ASP.Net开发常见的一些问题总结

    ASP.Net开发常见的一些问题总结

    ASP.Net开发常见的一些问题总结,需要的朋友可以参考一下
    2013-02-02
  • Asp.net后台把脚本样式输出到head标签中节省代码冗余

    Asp.net后台把脚本样式输出到head标签中节省代码冗余

    最近在学习开发服务器控件,其它就少不了为控件注册js和css之类的资源文件,或者直接注册纯脚本样式。其中就遇到如下问题     1、 注册的资源文件或纯脚本样式在生成的页面中都不在head标签中(当然这个不影响页面功能)     2、 一个页面使用多个一样的控件时,会出现重复输入(出现多余代码)
    2013-02-02
  • asp.net中JavaScript数据验证实现代码

    asp.net中JavaScript数据验证实现代码

    我对JavaScript一直不了解。常常为了一点点的数据验证和无刷新就去动用AJAX,实在不爽——有点杀鸡用牛刀的感觉。
    2010-05-05
  • ASP.NET Core2读写InfluxDB时序数据库的方法教程

    ASP.NET Core2读写InfluxDB时序数据库的方法教程

    Influxdb是一个开源的分布式时序、时间和指标数据库,使用go语言编写,无需外部依赖,下面这篇文章主要给大家介绍了关于ASP.NET Core2读写InfluxDB时序数据库的相关资料,需要的朋友可以参考下
    2018-11-11
  • asp.net checkbox 动态绑定id GridView删除提示

    asp.net checkbox 动态绑定id GridView删除提示

    asp.net checkbox 动态绑定id,需要的朋友可以参考下。虽然简单但不知道挺麻烦的。GridView删除提示
    2009-10-10
  • ASP.NET MVC5网站开发添加文章(八)

    ASP.NET MVC5网站开发添加文章(八)

    小编整理的ASP.NET MVC5网站开发是一系列的文章体系,大家要一篇篇的仔细阅读,今天这篇文章主要介绍了ASP.NET MVC5网站开发添加文章,需要的朋友可以参考下
    2015-09-09
  • .NET Core使用Worker Service创建服务

    .NET Core使用Worker Service创建服务

    这篇文章介绍了.NET Core使用Worker Service创建服务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • 10个.NET中删除空白字符串的方法

    10个.NET中删除空白字符串的方法

    我们有无数方法可用于删除字符串中的所有空白。大部分都能够在绝大多数的用例中很好工作,但在某些对时间敏感的应用程序中,是否采用最快的方法可能就会造成天壤之别。
    2015-08-08

最新评论