[C#] 网页Html转PDF档(一行程式码解决)

原文 [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档

时间: 2024-09-22 04:20:13

[C#] 网页Html转PDF档(一行程式码解决)的相关文章

.net开发:为程式码加上行号的方法详解_实用技巧

Abstract若需要将程式码放进word交报告或做文件时,或许我们会想将程式码加上行号方便讲解,如同博客园显示程式码那样,我们该如何做呢? Introduction 使用环境:Visual C++ 9.0 / Visual Studio 2008 一段C++的小程式,可以帮程式码加上行号后输出. 以下为引用的内容:map_code_line.cpp / C++ 复制代码 代码如下:          /*         (C) OOMusou 2008          Filename  

解决方案-用safari打开网页时将pdf文档内置于网页中显示

问题描述 用safari打开网页时将pdf文档内置于网页中显示 ASP.NET网站 ,有个页面用iframe内嵌了一个PDF文档 通过 后台处理 showPdf.Attributes.Add(src,PdfFilePath); //PdfFilePath为pdf文件路径 D:File123.pdf 用IE浏览器打开此页面时,PDF内嵌在网页中显示,像百度文库一样(因为有在PDF阅读器中设置允许在Web浏览器中显示) 上面这种情况是能搞定的 但是现在系统需要在移动设备iPAD上显示,用safari

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

原文 [ASP.NET]利用itextsharp将GridView汇出PDF档 最近在讨论区看到有人说itextsharp可以把网页变成PDF 小弟就去抓一下itextsharp来玩玩,先教大家最实用的,就是把GridView汇出成PDF档 asp.net(c#)    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits=&quo

wkhtmltopdf:一个Linux中将网页转成PDF的智能工具

wkhtmltopdf 是一个开源.简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg.png 等). wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL (通用公共许可证)下发布.它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档且不会丢失页面的质量.这是一个用于实时创建和存储网页快照的非常有用且可信赖的解决方案. wkhtmltopdf 的功能 开源并且跨平台. 使用 WebKit 引擎将任意 HTML

wkhtmltopdf:一个 Linux 中将网页转成 PDF 的智能工具

wkhtmltopdf 是一个开源.简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg.png 等). wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL (通用公共许可证)下发布.它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档且不会丢失页面的质量.这是一个用于实时创建和存储网页快照的非常有用且可信赖的解决方案. wkhtmltopdf 的功能 开源并且跨平台. 使用 WebKit 引擎将任意 HTML

《Adobe Acrobat XI经典教程》—第2课将网页转换为Adobe PDF

将网页转换为Adobe PDFAdobe Acrobat XI经典教程用户可使用Acrobat从网络上下载(或捕捉)网页中选定内容.整个网页或多页网站的多层,并将它们转换为Adobe PDF.从Internet Explore和Firefox中,还可以只捕捉网页上选中的内容.用户可以定义页面布局,设置字体或其他可视化元素的显示选项,为转换成Adobe PDF的网页创建书签.HTML文件及其相关的所有文件(如JPEG图像.CSS.文本文件.图像映射和格式)都将被转换,因此转换后的PDF与原来的网页

用C#实现生成PDF文档(原码)

用C#实现生成PDF文档(原码) //write by wenhui.orgusing System;using System.IO;using System.Text;using System.Collections; namespace PDFGenerator{ public class PDFGenerator{static float pageWidth = 594.0f;static float pageDepth = 828.0f;static float pageMargin =

使用C#获得IE浏览器当前网页的HTML文档

本篇文章描述如何获得IE浏览器当前网页的HTML文档. Create a console application in any version of Visual Studio using .Net version 1|2|3|3.5. Add two Com object references which will allow us to manipulate IE. 用 Visual Studio 的任意版本建立一个控制台程序. 添加2个COM对象引用用来操作IE Note the code

Asp.net 网页显示word 文档

问题描述 怎么实现Asp.net网页显示word文档并且可以编辑的功能 解决方案 解决方案二:这个有难度,编辑完存在哪呢?本地?还是服务器?解决方案三:自己做很难找找插件吧解决方案四:原先我也在网上搜过,ocx+vb解决方案五:用office插件就行了解决方案六:office中间件,如SOAOffice..这些中间件大部分是收费的.也可以使用.NetFramework自带的Office组件,添加引用就可以使用了,但是不能在线编辑,而且必须要求服务器上安装Office,启动Office进程后有时不