[C#] 网页Html转PDF档(一行程式码解决)
网页转PDF档做法很多( Convert HTML to PDF in .NET )
这边纪录一下老外最多人加分的那篇做法,使用wkhtmtopdf (采GPL授权)可以省很多程式码
首先到官网http://code.google.com/p/wkhtmltopdf/downloads/list
找installer.exe下载,这边Demo我是下载wkhtmltopdf-0.9.9-installer.exe
下载完后执行安装它


选择要安装的路径

安装完成

(如果要解除安装的话,就到刚刚安装的资料夹下找uninstall.exe执行即可)
接着看它的原始使用方式
在安装路径下有个wkhtmltopdf.exe档
到命令提示字元(开始→执行→cmd)
输入

这边就抓中国MSDN论坛网页转PDF为例
按下Enter转换完成

打开刚刚转换完成的PDF档

该文字的地方就是文字,该图片的地方就是图片,该超连结的地方就是超连结
既然知道底层使用方式,那就可以使用
System.Diagnostics.Process.Start 方法(String, String)
第一个参数传执行档路径,第二个传参数(URL和PDF档的存放路径)
如下:
protected void Button1_Click( object sender, EventArgs e) |
{ |
//因为是两个argument,所以记得要空格 |
System.Diagnostics.Process.Start( @"D:\wkhtmltopdf\wkhtmltopdf.exe" , @" http://msdn.microsoft.com/zh-cn D:\myFileName.pdf" ); |
|
} |
此小工具不会像WinForm的WebBrowser控制项一样会共用IE浏览器的Cookie
而且要抓的网页来源不一定要URL,也可以像这样直接抓本机上的Html档转PDF
protected void Button1_Click( object sender, EventArgs e) |
{ |
System.Diagnostics.Process.Start( @"D:\wkhtmltopdf\wkhtmltopdf.exe" , @"D:\index.html D:\myFileName.pdf" ); |
} |
只是抓本机的Html转成PDF后,图片会不见这点要注意
相关讨论:
如何得知System.Diagnostics.Process.Start 完毕后的讯息?
国外讨论:
Calling wkhtmltopdf to generate PDF from HTML
另外GridView汇出PDF的话,请参考:
ASP.NET 轻松转GridView 资料转档到PDF - 使用iTextSharp
请注意使用iTextSharp预设不支援中文字和背景色
中文字的解决方案:GridView透过iTextSharp输出PDF中文问题
2011.11.29 好人做到底
把ASP.net C#的Code补完
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Web; |
using System.Web.UI; |
using System.Web.UI.WebControls; |
/*要引用以下命名空间*/ |
using System.Diagnostics; |
using System.IO; |
public partial class _Default : System.Web.UI.Page |
{ |
//Button的Click事件(把Url的网页内容转成PDF) |
protected void btn_execute_Click( object sender, EventArgs e) |
{ |
//因为Web 是多执行绪环境,避免甲产生的文件被乙下载去,所以档名都用唯一 |
string fileNameWithOutExtention = Guid.NewGuid().ToString(); |
//执行wkhtmltopdf.exe |
Process p = System.Diagnostics.Process.Start( @"D:\wkhtmltopdf\wkhtmltopdf.exe" , @" http://msdn.microsoft.com/zh-cn D:\" + fileNameWithOutExtention + ".pdf") ; |
//若不加这一行,程式就会马上执行下一句而抓不到档案发生例外:System.IO.FileNotFoundException: 找不到档案''。 |
p.WaitForExit(); |
//把档案读进串流 |
FileStream fs = new FileStream( @"D:\" + fileNameWithOutExtention + ".pdf", FileMode.Open); |
byte [] file = new byte [fs.Length]; |
fs.Read(file, 0, file.Length); |
fs.Close(); |
//Response给用户端下载 |
Response.Clear(); |
Response.AddHeader( "content-disposition" , "attachment; filename=" +fileNameWithOutExtention+ ".pdf" ); //强制下载 |
Response.ContentType = "application/octet-stream" ; |
Response.BinaryWrite(file); |
|
} |
} |
2013.9.20 追记:
今天才发现此程式已经被包装成.dll,可以在.net程式码叫用:参考HTML转PDF -使用Pechkin套件 by黑暗执行绪
然后根据之前同事经验,直接使用wkhtmltopdf.exe产PDF,可能在64位元作业系统上产不出来。
在ASP.net MVC中使用的话,请见:[ASP.net MVC]在Web专案上使用Pechkin套件将网页转成PDF档
[C#] 网页Html转PDF档(一行程式码解决)的更多相关文章
- [ASP.NET]利用itextsharp将GridView汇出PDF档
原文 [ASP.NET]利用itextsharp将GridView汇出PDF档 最近在讨论区看到有人说itextsharp可以把网页变成PDF 小弟就去抓一下itextsharp来玩玩,先教大家最实用 ...
- 如何将网页保存为PDF文件
怎样将网页保存为PDF文件... 问题: 很多时候我们需要将网页上的内容,在排版不变的情况下完整的保存下来,那么用pdf格式是最好的效果了,还图文并茂,效果与真实的网页很相似,如果另存为网页的话,会下 ...
- 网页中显示pdf的方法
非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...
- 网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第四篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...
- 网页中显示pdf
1.<embed width="800" height="600" src="test_pdf.pdf"> </embed ...
- 非常好的在网页中显示pdf的方法
今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...
- .Net 把网页Html转PDF文件
.Net 把网页Html转PDF文件 此篇主要利用 wkhtmltopdf 进行转换. 一.控制台直接转换 首先到官网http://wkhtmltopdf.org/下载wkhtmltopdf ,下 ...
- C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !
原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...
- 使用python把html网页转成pdf文件
我们看到一些比较写的比较好文章或者博客的时候,想保存下来到本地当一个pdf文件,当做自己的知识储备,以后即使这个博客或者文章的连接不存在了,或者被删掉,咱们自己也还有. 当然咱们作为一个coder,这 ...
随机推荐
- sql 时间和字符串 取到毫秒级
(select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')+(Select ri ...
- 【node.js】本地模式安装express:'express' 不是内部或外部命令,也不是可运行的程序或批处理文件。
今天闲来无事想起了node.js,因此到网上下载了一个node.js的安装程序进行安装.其中: 安装程序:node-v0.11.13-x64.msi PC系统:Windows 7 自定义安装路径:D: ...
- python之列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 1,比如:要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, ...
- 「OC」 多态
一.基本概念 多态在代码中的体现,即为某一类事物的多种形态,OC对象具有多态性.必须要有继承,没有继承就没有多态. 在使用多态时,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指 ...
- 数据层使用DBHelper.dll来减少工作量
目前在需求确定了以后进行开发的步骤一般是这样的:建立数据表,建立model,构建数据操作层,最后在页面中进行调用.关于数据操作层,因为大量的操作都集中在增加.更新.删除等简易操作,而我之前的写法是每次 ...
- Qt 技巧:去除对话框边框 + 设置窗口可移动和透明
1.去除对话框标题栏和边框 在构造函数里设置: this->setWindowFlags(Qt::FramelessWindowHint); Qt::Dialog (按照对话框的形 ...
- fedora21安装无线驱动
来源:http://www.2cto.com/os/201202/120249.html 一.导入rpmfushion源,使用第三方yum 源: su -c 'yum localinstall --n ...
- 关于 firefox 无法在 passport.csdn.net 找到该服务器
很奇怪的现象:用firefox上网,某些网站打开总是会提示 无法在XXX找到该服务器.但是使用其他浏览器,比如360却可以正常打开. 我已经将firefox加入了防火墙的信任列表,但是仍旧是这样. 而 ...
- POJ 1410 Intersection(线段相交&&推断点在矩形内&&坑爹)
Intersection 大意:给你一条线段,给你一个矩形,问是否相交. 相交:线段全然在矩形内部算相交:线段与矩形随意一条边不规范相交算相交. 思路:知道详细的相交规则之后题事实上是不难的,可是还有 ...
- stl源代码剖析:编译器的提前定义位置集设置
眼下我的工作环境还是win.全部演示也用VS或者cygwin这些环境作为基础. 1.配置项目的附加include目,添加提前定义位置集设置,编译器会把它添加include路径,比方在某个目录中定义一个 ...