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

时间: 2024-11-03 20:54:52

C# 生转换网页为pdf_实用技巧的相关文章

用Dreamweaver制作网页七招实用技巧

dreamweaver|技巧|网页 一.从外部文档中粘贴时,如果只要文字而不想要其格式,可以使用"Edit→paste as text"命令,不要直接用Ctrl+V. 二.当有浏览者使用Netscape浏览页面时,在改变窗口大小的时候页面会花掉.在制作网页时就应该考虑到这个问题,可以通过点击"Command→Add/Remove Netscape resize fix"来加以解决,它可以使在Netscape中浏览页面时,改变窗口大小的时候页面不会花掉. 三.仅仅拷贝

Dreamweaver制作网页七招实用技巧

一.从外部文档中粘贴时,如果只要文字而不想要其格式,可以使用"Edit→paste as text"命令,不要直接用Ctrl+V. 二.当有浏览者使用Netscape浏览页面时,在改变窗口大小的时候页面会花掉.在制作网页时就应该考虑到这个问题,可以通过点击"Command→Add/Remove Netscape resize fix"来加以解决,它可以使在Netscape中浏览页面时,改变窗口大小的时候页面不会花掉. 三.仅仅拷贝文字.当我们从Dreamweaver

Dreamweaver网页设计制作实用技巧

1.灵活运用样式 熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custon Style来调用Style标准,也可以在状态栏中的元素列表上单击右键来调用Style.虽然不同的方法达到的效果看似一样,但实际上产生的HTML代码则完全不同.比如用Custon Style来调用Style标准,在网页代码中就生成一个〈span〉标签,这样的标签一多就会使文件十分臃肿而且影响浏览器的解析速度,所以我们应尽量使用状态栏中的元素列表来调用Style. 2.活用Format Tab

C# 生转换网页为pdf

问题描述 怎么把一个网页转成PDF文件,求助啊~~ 解决方案 解决方案二:iTextSharp控件可以,在网上搜索一下,以前用过很灵活的解决方案三:兄弟,有什么实例代码么,以前没用过,突然公司要我弄这个,头都大了啊~解决方案四:引用1楼liulang457的回复: iTextSharp控件可以,在网上搜索一下,以前用过很灵活的 求助啊解决方案五:支持1楼的http://www.codeproject.com/Questions/203481/HTML-convert-to-PDF-using-i

QQ网页邮箱聊天实用技巧

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   当我们习惯于使用QQ与好友聊天交流的时候,如果某一天没有安装QQ的时候,又急需与好友联络,该怎么办呢?其实很简单,使用本文介绍的网页邮箱聊天. 点击QQ软件的邮箱图标,或者直接在浏览器输入http://mail.qq.com即可进入QQ邮箱页面,QQ会员还拥有自己独立的登录网址http://vip.mail.qq.com. 近日,QQ在其邮箱中加入了页面即时聊天

使用FlashPaper在线转换.doc为.swf_实用技巧

FlashPaper 是Macromedia推出的一款电子文档类工具!通过使用FlashPaper,可以将需要的文档通过简单的设置转换为SWF格式的Flash动画,原文档的排版样式和字体显示不会收到影响,这样做的好处是不论对方的平台和语言版本是什么,都可以自由的观看你所制作的电子文档动画,并可以进行自由的放大,缩小和打印,翻页等操作! 展示的效果就像百度的文库查看效果. Flashpaper的使用相信大多数人都知道,这里的Demo是用于在线转换 .doc文件转换为 .swf的flash文件. 其

Asp.Net中的字符串和HTML十进制编码转换实现代码_实用技巧

Asp.Net将字符串转为区码位编码,或者将区码位编码字符串转为对应的字符串内容. 数字;这种编码其实就是将单个字符转为对应的区码位(数字),然后区码位前缀加上"",后缀加上";"组成,对于这种编码的字符串,浏览器会自动解析为对应的字符. Asp.Net字符串和编码转换源代码和测试代码如下: using System; using System.Text.RegularExpressions; public partial class purchase_proper

C#中HTML字符转换函数分享_实用技巧

因此需要以下函数做转换: 复制代码 代码如下: ///<summary> ///替换html中的特殊字符 ///</summary> ///<paramname="theString">需要进行替换的文本.</param> ///<returns>替换完的文本.</returns> public static string HtmlEncode(string theString) { theString=theSt

ASP.NET使用HttpWebRequest读取远程网页源代码_实用技巧

读取远程网页能做什么就不用多说了吧,做小偷程序或是采集,也就诸如此类了吧. public string GetPage(string url) { HttpWebRequest request = null; HttpWebResponse response = null; StreamReader reader = null; try { request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = 20000; req