HTML生成PDF(c#)

Calling wkhtmltopdf to generate PDF from HTML 老外最多人加分的那篇做法,使用wkhtmtopdf(GPL协议)可以省很多程序代码, 首先到官网http://code.google.com/p/wkhtmltopdf/downloads/list 找installer.exe下载

wkhtmltopdf,一个集成好了的exe文件(C++编写),基本的调用方法是, wkhtmltopdf.exe http://passport.yupsky.com/ac count/register e:\yupskyreg.pdf

,可以先在命令行测试一下,有其他的需要可以在命令行通过wkhtmltopdf --help查询,如果是超长页的花,可以用命令

wkhtmltopdf.exe http://passport.yupsky.com/ac count/register e:\yupskyreg.pdf  -H --outline (-H是添加默认标题,--outline是添加pdf的左侧概要哦!)而且可以批量生成哦,中间用空格隔开

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);
 
    }     
}

在GitHub上发现2个相关的项目,其中Pechkin这个项目不需要单独安装wkhtmltopdf ,就是.NET的库了。

C# wrapper around excellent wkhtmltopdf console utility  https://github.com/codaxy/wkhtmltopdf

.NET Wrapper for WkHtmlToPdf static DLL. Allows you to utilize full power of the libra:https://github.com/gmanny/Pechkin

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JadePeng的技术博客

C#温故而知新—闲话.Net

在Java搞得如火如荼时,微软为了巩固自己的霸主地位,自然要来分一杯羹,于是.NET应运而生。 .Net的战略。 NET是一种面向网络、支持各种用户终端的开...

22780
来自专栏JadePeng的技术博客

c# IO&&线程 打造 定时打开指定程序

     用IO以及线程轻松实现 定时器 ,在指定的时间打开指定的程序:) ?     首先是如何实现定时?这可以单独的用个线程,在时间到的时候打开程序    ...

21560
来自专栏cnblogs

通用网页调用本地应用程序方案(windows平台)

一、更新注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\receiveOutOfArg]...

27190
来自专栏我和未来有约会

(保存)C#基础概念二十五问

注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除!     当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了...

23180
来自专栏大内老A

谈谈C# 4.0新特性“缺省参数”的实现

C#4.0关于缺省参数的新特性,相信大家都不会陌生。所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值...

208100
来自专栏飞扬的花生

C# XML操作

1.XML帮助类 using System; using System.Collections.Generic; using System.Text; usin...

28070
来自专栏程序员与猫

《C#并发编程经典实例》笔记

1.前言 最近趁着项目的一段平稳期研读了不少书籍,其中《C#并发编程经典实例》给我的印象还是比较深刻的。当然,这可能是由于近段日子看的书大多嘴炮大于实际,如《...

28670
来自专栏飞扬的花生

C#中返回值封装

      在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类:...

313100
来自专栏程序员与猫

c# 协变和逆变的理解

1. 是什么 1.1 协变 协变指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。如 string 到 object 的转换。多见于类型参数用作...

31160
来自专栏飞扬的花生

文件方法

C# 获取指定目录下所有文件信息、移动目录、拷贝目录 /// <summary> /// 获取目录下的所有文件夹和文件的path ...

20250

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励