1. 首先去http://wkhtmltopdf.org/downloads.html 下载最新版本的安装包

2. 执行安装完成

3. CMD 命令行运行wkhtmltopdf.exe程序生成PDF

C:\Program Files\wkhtmltopdf\bin>wkhtmltopdf.exe --orientation Landscape --javascript-delay  c:\BPReport.html c:\BPReport_L.pdf
Loading pages (/)
Counting pages (/)
Resolving links (/)
Loading headers and footers (/)
Printing pages (/)
Done

参数:

--orientation Landscape 是横向导出

--javascript-delay 5000  是延时5秒导出,用于页面异步加载数据时可以导出到PDF

代码调用exe

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, , file.Length);
fs.Close(); //Response给客户端下载
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=" + fileNameWithOutExtention + ".pdf");//强制下载
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(file); }
}

如果要在Web项目中导入Pechkin的话,有许多很雷的注意事项,以下是这几天导入项目的经验…

实作

1.首先在ASP.net MVC项目里,项目的建置平台目标维持预设的「Any CPU」即可,虽说WkHtmlToPdf.exe是32位应用程序,但之后布署在IIS上的相关32位设定并不是从Web项目设定的

如果要在Web项目中导入Pechkin的话,有许多很雷的注意事项,以下是这几天导入项目的经验…

实作

1.首先在ASP.net MVC项目里,项目的建置平台目标维持预设的「Any CPU」即可,虽说WkHtmlToPdf.exe是32位应用程序,但之后布署在IIS上的相关32位设定并不是从Web项目设定的


 

2.要加入Pechkin套件的话,不能从NuGet或官网(https://github.com/gmanny/Pechkin)下载使用

因为Pechkin原始作者释出来的套件在Web项目中使用的话会有DLL档案Lock住的问题,如果产过一次PDF档,之后Web项目就再也Build不过


 

网络上已有人释出修正后的版本:https://github.com/tuespetre/Pechkin

建议直接下载这个:https://pechkinwebtest.codeplex.com/downloads/get/729855

3.将上述的载点档案PechkinDLLs.zip下载解压后,会有以下几个档

Web项目加入参考「Common.Logging.dll」、「Pechkin.dll」


 

然后把剩下的五个.dll复制到Web项目根目录下,不然会无法产PDF檔


 

再对着那五个.dll设定属性>复制到输出目录> 永远复制


 

4..dll参考都准备完毕,接下来是程序代码实作

注意点1:产生PDF对象的Url,须是Http开头的绝对路径URL,而不是直接用Url.Action()方法

注意点2:因为是另一条执行绪另一个工作阶段发出Request产出PDF,所以Session不共享,如果要把需要登入才可以看得到的页面产出PDF档的话,要另外套不用登入也可以看得到的画面给Pechkin呼叫

HomeController.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Pechkin;
using System.IO;


namespace WkHtmlToPdf
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{


}


protected void button1_Click(object sender, EventArgs e)
{
string url = "http://www.cnblogs.com";

var config = new GlobalConfig();
config //.SetPaperOrientation(true)//设置纸张方向为横向
.SetMargins(new System.Drawing.Printing.Margins(0, 0, 0, 0));
using (IPechkin pechkin = Factory.Create(config))

{


ObjectConfig oc = new ObjectConfig();
oc.SetPrintBackground(true)
.SetLoadImages(true)
.SetScreenMediaType(true)
.SetPageUri(url)
.SetRunJavascript(true) //允许javaScript
.SetRenderDelay(5000);//延时5秒;
byte[] pdf = pechkin.Convert(oc);
File.WriteAllBytes("c:\\BPReport-news.pdf", pdf);
}


}
}
}

 

※注意此套件不支持Gif图片

※如果执行过程中发生Common.Logging错误

Could not load file or assembly 'Common.Logging' or one of its dependencies.


 

要先看加入参考的Common.Logging.dll档案版本(2.1.1.0)

再确保Web.config里的assemblyBinding区段设定也是一样的档案版本即可


 

6.接下来如果直接将网站布署到IIS上的话,会出现错误

无法加载档案或组件 'Pechkin' 或其相依性的其中之一。 试图加载格式错误的程序。

Could not load file or assembly ‘Pechkin’ or one of its dependencies. An attempt was made to load a program with an incorrect format.


 

这要看网站使用的是哪个应用程序集区,再设定启用32位应用程序


 

※即使部署的机器操作系统是64位,有把应用程序集区「启用32位应用程序」的话,网站也是可以正常执行。

到这边,Pechkin在Web项目上的设定才算全部完成~

WkHtmlToPdf 生成 PDF的更多相关文章

  1. java调用wkhtmltopdf生成pdf文件,美观,省事

    最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...

  2. wkhtmltopdf 生成pdf

    public class PdfHelper { static string RootPath { get { string AppPath = ""; HttpContext H ...

  3. PHP 生成PDF

    一个项目中需要用到网页生成PDF,就是将整个网页生成一个PDF文件, 以前也用过HTML2PDF,只能生成一些简单的HTML代码,复杂的HTML + css 生成的效果惨不忍睹, 百度了一下,发现有个 ...

  4. wkhtmltopdfhtml php生成pdf快照,网页截图,网页快照完整版 (原)

    首先,安装(linux安装为例) 1.下载wkhtmltopdf wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf ...

  5. 页面导出生成pdf,使用wkhtmltopdf第三方工具

    把页面导出生成pdf,这里用到第三方的工具,使用方法中文文档没有找到,网上也没找到网友详细的神作.没有深入研究,所以也不赘述了,当然最基本的使用大多数也够用了,详细参数的官网也没介绍,大家使用的时候, ...

  6. wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)

    目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...

  7. C# html生成PDF遇到的问题,从iTextSharp到wkhtmltopdf

    我们的网站业务会生成一个报告,用网页展示出来,要有生成pdf并下载的功能,关键是生成pdf. 用内容一段段去拼pdf,想想就很崩溃,所以就去网上找直接把html生成pdf的方法. 网上资料大部分都是用 ...

  8. C#使用wkhtmltopdf,把HTML生成PDF(包含分页)

    最近花了2天多的时间终于把HTML生成PDF弄好了.步骤如下: 1.首先是技术选型.看了好多都是收费的就不考虑了. 免费的有: jsPDF(前端生成,清晰度不高,生成比较慢) iText(严格要求ht ...

  9. html 生成pdf

    HTML生成PDF(c#) 最近因为工作需要,小小的研究了一下HTML生成PDF的方法,这方面的内容很多,但要么是不尽如人意的方法,要么就是那种收费的类库!为了广大.neter的福利,把自己的一点小小 ...

随机推荐

  1. /var文件系统

    /var文件系统  /var 包括系统一般运行时要改变的数据.每个系统是特定的,即不通过网络与其他计算机共享.   /var/catman    当要求格式化时的man页的cache.man页的源文件 ...

  2. iOS 获取UIView 动画的实时位置的方法

    [self.animationView.layer.presentationLayer frame].origin.x

  3. [代码] 类似 YYText 将表情文本转换成表情字符

    一,经历 1> 由于工作需要,得把 UITextView 中的属性文本转换成普通文字,并将处理后的普通文字转换成属性文本. 2> 将属性文本转换成普通文字简单,可以调用属性文本的enume ...

  4. 配置1000条ACE的脚本

    配置1000条ACE的脚本 测试 python 引言 在路由器或者交换机产品中,手工配置大量shell命令时,难免繁琐且效率低下,鉴于CRT中支持多种脚本语言,因此可通过脚本执行大量重复的shell配 ...

  5. 热烈庆祝华清远见2014嵌入式系统(Linux&Android)开发就业培训课程全面升级

    近日,华清远见公开宣布:2014嵌入式系统 (Linux&Android)开发就业培训课程再次升级!据悉,华清远见如今已经持续10年,一直保持课程每年2次的更新的频率.华清远见的每 次课程更新 ...

  6. Hashtable在ViewState中无法增加值

    在我调试程序的时候,我发现WebForm 2.0和MVC3解析ViewState的方式不同,同样的代码,在Weorm中管用,在MVC中不起作用. private Hashtable ht { get ...

  7. android api汇集

    参考文章: 知乎-想写个 App 练手,有什么有趣的 API 接口推荐吗? 使用 Espresso 和 Dagger 测试网络服务 http://developer.simsimi.com/apps# ...

  8. [LintCode] Parking Lot 停车场问题

    Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...

  9. [zt]系统中常用MIPS指令

    指令 功能 应用实例 LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2) LH 从存储器中读取半个字的数据到寄存器中 LH R1, 0(R2) LW 从存储器中读取一个字的数据到寄 ...

  10. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...