利用C 利用C语言计算利率
创始人
2024-04-22 05:41:26
0

将HTM转换为PDF大概可以分两步实现

第一步,解析HTM,就是将HTM源文件中那一对文本转换为浏览器最终呈现给我们那种图文并茂的结果。这是一个不可完成的任务,因为目前为止业界的软件巨头也没有谁把HTM解析做得很好的。对比ID、Firefox等浏览器的显示结果便可想而知。既然业界难题,我也就不去钻牛角尖做技术攻关了,先跳过这步,考虑下一步的事情。

第二步,绘制PDF,这个简单,网上有很多资料,有兴趣的朋友可以研究PDF的文件格式,安装二进制组装PDF。我有兴趣,然而没有时间,我觉得软件从业者时刻都应该关注最有价值的事情。软件从业者要提高效率的第一法门便是重用,网上有一个叫itextsharp的东西是用来绘制PDF的,可以免费使用而且开源。

下载itextsharp,试着用itextsharp绘制HTM看看效果,如您所料,绘制出的是HTM的源代码。因为第一步的事情我们还没有解决,下面来解决第一步的事情。

记得很久以前见过一个.NET写的网页snap工具,大概思路是利用webbrowser的DrawToBitmap方法将ie的显示结果输出到Sytem.Drawing.Bitmap对象。大概代码如下:

  1. //WebBrowser wb=null;  
  2.  System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(w, h);  
  3.  wb.DrawToBitmap(bmp, new System.Drawing.Rectangle(0,0, w, h)); 

ok,HTM可以解析了,现在重组刚才的代码,HTM转换为PDF思路如下:

使用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上传至网站中,设定好目录权限,示例代码:    

  1. public static bool CreatePPDF(string url,string path)  
  2.        {  
  3.            try  
  4.            {  
  5.                if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(path))  
  6.                    return false;  
  7.                Process p = new Process();  
  8.                string str = System.Web.HttpContext.Current.Server.MapPath("~/afafafasf/PageToPDF.exe ");  
  9.                if (!System.IO.File.Exists(str))  
  10.                    return false;  
  11.                p.StartInfo.FileName = str;  
  12.                p.StartInfo.Arguments = " \"" + url + "\" " + path;  
  13.                p.StartInfo.UseShellExecute = false;  
  14.                p.StartInfo.RedirectStandardInput = true;  
  15.                p.StartInfo.RedirectStandardOutput = true;  
  16.                p.StartInfo.RedirectStandardError = true;  
  17.                p.StartInfo.CreateNoWindow = true;  
  18.                p.Start();  
  19.                System.Threading.Thread.Sleep(500);  
  20.                return true;  
  21.            }  
  22.            catch(Exception ex)  
  23.            {  
  24.                Sys.Log.error("PDF create err.",ex);  
  25.            }  
  26.            return false;  
  27.        } 

HTM转换为PDF特性

在使用任务形式工作时,系统会启动多个进程,即任务管理器中会有多个pagetoPDF.exe的进程,这是系统调度程序自己启动的,为了加个任务处理速度。进程数由调度程序自己控制,最多不会超过十个。

【编辑推荐】

  1. 在Visual Studio 2010中使用C# 4.0的动态类型
  2. C#3.0中Lambda表达式详解
  3. 浅谈C#泛型的用处
  4. 浅谈C#如何实现多继承
  5. C#实用基础教程

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...