原文 [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 完毕后的讯息?

网页资料转PDF档

国外讨论:

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档(一行程式码解决)的更多相关文章

  1. [ASP.NET]利用itextsharp将GridView汇出PDF档

    原文 [ASP.NET]利用itextsharp将GridView汇出PDF档 最近在讨论区看到有人说itextsharp可以把网页变成PDF 小弟就去抓一下itextsharp来玩玩,先教大家最实用 ...

  2. 如何将网页保存为PDF文件

    怎样将网页保存为PDF文件... 问题: 很多时候我们需要将网页上的内容,在排版不变的情况下完整的保存下来,那么用pdf格式是最好的效果了,还图文并茂,效果与真实的网页很相似,如果另存为网页的话,会下 ...

  3. 网页中显示pdf的方法

    非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...

  4. 网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)

    一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第四篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...

  5. 网页中显示pdf

    1.<embed width="800" height="600" src="test_pdf.pdf"> </embed ...

  6. 非常好的在网页中显示pdf的方法

    今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...

  7. .Net 把网页Html转PDF文件

    .Net 把网页Html转PDF文件 此篇主要利用 wkhtmltopdf  进行转换. 一.控制台直接转换 首先到官网http://wkhtmltopdf.org/下载wkhtmltopdf  ,下 ...

  8. C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !

    原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...

  9. 使用python把html网页转成pdf文件

    我们看到一些比较写的比较好文章或者博客的时候,想保存下来到本地当一个pdf文件,当做自己的知识储备,以后即使这个博客或者文章的连接不存在了,或者被删掉,咱们自己也还有. 当然咱们作为一个coder,这 ...

随机推荐

  1. Enze fifth day(循环语句2)

    又是新的一周开始了,我还在云和学院继续学习.因为想要急切的想学会更多的知识,所以我有些急.可是我越急就越容易出错,这应该就是所谓的欲速则不达吧.这一周,我要重新把控好自己的一切,尽我最大的努力来学习! ...

  2. jz2440不能成功地启动文件系统, Failed to execute /linuxrc.

    文件系统加载失败,错误信息提示:    VFS: Mounted root (nfs filesystem).    Freeing init memory: 140K    Failed to ex ...

  3. Flask中全局变量的实现

    我们都知道在Flask中g,request,session和request是作为全局对象来提供信息的,既然是全局的又如何保持线程安全呢,接下来我们就看看flask是如何做到这点的.在源码中的ctx.p ...

  4. (Problem 22)Names scores

    Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-tho ...

  5. SQL——找出某一字段中内容相同的数据

    SELECT columnName from dbo.tableName group by columnName having count(*)>1

  6. Qt分析:Qt中的两种定时器(可是QObject为什么要提高定时器呢,没必要啊。。。)

    Qt有两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器.   (1)QObject类的定时器   QObject类提供了一个基本的定时器,通过函数startTimer()来启 ...

  7. perl encode_utf8 和decode_utf8

    encode_utf8 等于 $octets = encode_utf8($string); 这个字符串 在$string 在Perl的内部格式,返回结果是作为一个顺序的字节. 因为所有的可能的字符串 ...

  8. Physiological Processes of Speech Production--Reading Notes (8)

    Upper Jaw The upper jaw, or the maxilla with the upper teeth, is the structure fixed to the skull, f ...

  9. Codeforces 360C Levko and Strings dp

    题目链接:点击打开链接 题意: 给定长度为n的字符串s,常数k 显然s的子串一共同拥有 n(n-1)/2 个 要求找到一个长度为n的字符串t,使得t相应位置的k个子串字典序>s #include ...

  10. iOSAPP启动时实现加载广告

    现在很多APP在启动的时候都在加载广告,现在也很流行,主要是盈利啊.笔者也做了很多关于广告的事情.现在记录下自己在APP启动的时候,怎么加载广告的. 下面总结下广告加载的三种方式 1.现在很多APP的 ...