最近工作中遇到一个将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上传至网站中,设定好目录权限,示例代码:

Code

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

PageToPDF

转载于:https://www.cnblogs.com/zyip/archive/2009/07/29/1533792.html

C#生转换网页为pdf相关推荐

  1. 8.0强行转换后变成了7_如何将网页转换为 PDF,保存在本地备用?

    2T遇到一个问题,一些网页上的资料 ,需要离线保存下来备用,但各类剪藏工具又不能很完整的抓取完整网页,于是想起能不能转换为 PDF 保存. 注意,这是2T搜索了大概7-8款在线工具之后,挑选了一款各方 ...

  2. HTML转换成PDF 指定网页转换PDF(实际上是截取网页) pdf.js , dompdf , html2ps , wkhtmltopdf

    开发背景 在实际开发过程中,有一些特殊需要:需要把相关网页转换成PDF格式,作为资料留存 下面讲一下我所遇到的相关需求:证书的发放,在前期的需求调研的时候甲方提出一个需求,电子证书需要实时生成并且通过 ...

  3. 免费PDF转换网页版

    作为职场新人,pdf转换软件是必备的工具.很多pdf转word软件都需要收费,让我很是惆怅.但是最近发现了一个免费pdf转word网页在线转换工具,转换效果不错,我之前转换了一个pdf转word,转完 ...

  4. java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件

    我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件.我发现了很多指针,简而言之,它们不起作用或难以实现.我也下载了一个商业产品,pdf4ml;该API是我很乐意与之合作的,除了当我在维 ...

  5. blue html中转换,BlueFox Free PDF to HTML Converter(PDF文件转换软件)

    BlueFox Free PDF to HTML Converter是一款pdf文件转换软件,能直接查看PDF文件和对PDF文件进行编辑,支持批量进行转换,使用非常方便,操作简单,有需要可以下载. 软 ...

  6. 实践指南-网页生成PDF

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 一.背景 开发工作中,需要实现网页生成 PDF 的功能,生成的 PDF 需上传至服务端,将 PDF 地址作为参数请求外部接口,这个转换过程 ...

  7. wkhtmltopdf 网页转换为pdf

    wkhtmltopdf主要用于把网页转换为pdf,用于复杂的图文导出pdf 一般的模板渲染根本做不到 wkhtmltopdf.rpm centos7下载地址 链接:https://pan.baidu. ...

  8. 一分钟将Markdown转换成HTML/PDF/PNG/JPG

    简介 markdown是什么无需在这里多言,一言以蔽之:人生苦短,快用markdown,懂的人自然知道它的众多好处. 不过虽然markdown很好很强大,但并不是所有人都知道而且还会使用,有时候为了和 ...

  9. 怎样转换不同的pdf文件

    现如今,随着PDF格式文件的广泛应用,PDF转换器也渐渐多了起来,有office文件与PDF相互转换的,也有图片等其他文件转换成PDF的转换器.暂且不说它们的功能和转换形式,就是最普通PDF转换成Wo ...

最新文章

  1. 用MySql的查询分析语法explain来优化查询和索引
  2. 输出一个等边三角形(由*拼接),实心或空心,连长为n
  3. Laravel核心解读--中间件(Middleware)
  4. 第一:Java+MyBatis(快速入门)
  5. 【MatConvNet】配置GPU
  6. 编程测试,程序员过不去的坎?
  7. Spring之获得Bean本身的id
  8. UE4运行时交互工具框架
  9. Python3,为了“娑娜“,我花费3分钟把lol所有的英雄都下载了。
  10. 批处理之for用法大全
  11. 两万字详解自动驾驶开发工具链的现状与趋势
  12. js距离米转换为千米_千米换算(千米与米之间的换算题)
  13. ARM ELF 镜像结构
  14. 总账科目往来批量导入程序
  15. java毕业设计电影推荐网站mybatis+源码+调试部署+系统+数据库+lw
  16. leaflet实现风场图
  17. 天池- IJCAI-18 阿里妈妈搜索广告转化预测新手入门经历(一:数据预处理、特征工程)
  18. Hipo-iPod 处理对象
  19. oracle 命令 操作
  20. 常见的滚动widget

热门文章

  1. 如何将文件自动备份到电脑其他硬盘或者百度网盘?
  2. 深入理解服务器CPU三大体系结构--SMP、NUMA、MPP
  3. android 8.0后台定位,Android8.0适配前台定位服务service的示例代码
  4. 使用Servlet和JDBC实现学生管理系统
  5. 年年都有人说Java市场饱和,那Java行业到底是不是真的饱和了呢?
  6. 习题5-6 使用函数输出水仙花数 (20分)
  7. 实时多导联卷积神经网络在心肌梗死检测中的应用
  8. 网红土拨鼠的自我修养:跨过山和大海,才能让AI逗你开心
  9. 八大芯片代工制造商为什么中国占了5成?
  10. 射频功率放大器的简介