WkHtmlToPdf 生成 PDF
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的更多相关文章
- java调用wkhtmltopdf生成pdf文件,美观,省事
最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...
- wkhtmltopdf 生成pdf
public class PdfHelper { static string RootPath { get { string AppPath = ""; HttpContext H ...
- PHP 生成PDF
一个项目中需要用到网页生成PDF,就是将整个网页生成一个PDF文件, 以前也用过HTML2PDF,只能生成一些简单的HTML代码,复杂的HTML + css 生成的效果惨不忍睹, 百度了一下,发现有个 ...
- wkhtmltopdfhtml php生成pdf快照,网页截图,网页快照完整版 (原)
首先,安装(linux安装为例) 1.下载wkhtmltopdf wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf ...
- 页面导出生成pdf,使用wkhtmltopdf第三方工具
把页面导出生成pdf,这里用到第三方的工具,使用方法中文文档没有找到,网上也没找到网友详细的神作.没有深入研究,所以也不赘述了,当然最基本的使用大多数也够用了,详细参数的官网也没介绍,大家使用的时候, ...
- wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)
目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...
- C# html生成PDF遇到的问题,从iTextSharp到wkhtmltopdf
我们的网站业务会生成一个报告,用网页展示出来,要有生成pdf并下载的功能,关键是生成pdf. 用内容一段段去拼pdf,想想就很崩溃,所以就去网上找直接把html生成pdf的方法. 网上资料大部分都是用 ...
- C#使用wkhtmltopdf,把HTML生成PDF(包含分页)
最近花了2天多的时间终于把HTML生成PDF弄好了.步骤如下: 1.首先是技术选型.看了好多都是收费的就不考虑了. 免费的有: jsPDF(前端生成,清晰度不高,生成比较慢) iText(严格要求ht ...
- html 生成pdf
HTML生成PDF(c#) 最近因为工作需要,小小的研究了一下HTML生成PDF的方法,这方面的内容很多,但要么是不尽如人意的方法,要么就是那种收费的类库!为了广大.neter的福利,把自己的一点小小 ...
随机推荐
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- jQuery常用方法验证
验证邮箱: $('input[data-name="email"]').keyup(function () { var em; em = $(this).val(); if (!e ...
- C#向文本文件中写入日志
今天看了一篇文章,说的是使用微软自带的日志类写日志,然后晚上我就花了2个多小时自己动手试了一下,然后模仿者自己封装了一个类库. 下面是自己封转的类: /***** * 创建人:金河 * 创建日期:20 ...
- java读取邮件
package com.zz.mail; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- PS中常用快捷键
Prtsc:印屏幕 Tab:隐藏工具栏 F:图片在编辑区的显示模式 F8:显示选中框区域的信息 Ctrl+N:新建画布 Ctrl+'+':放大 Ctrl+'-':缩小 工具栏三角形+鼠标:拖拽(只移动 ...
- Curl参数一览
* 目录 1. 介绍 2. curl扩展的安装 3. curl_init 4. curl_setopt 5. curl_exec 6. curl_close 7. curl_version * 介绍 ...
- 用CSS设置Table的细边框的最好用的方法
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java.lang.StringBuilder
1.StringBuilder 的对象和 String 的对象类似,并且 StringBuilder 的对象能被修改.Internally,这个对象被当做一个包含一系列字符的可变长度的数组对待.这个序 ...
- tab1
<html> <head> <meta charset="UTF-8"> <title>tab</title> < ...
- DIV与CSS布局需知
对于一个网页布局,我们需要知道一些关键点: 第一:什么是样式(CSS),什么是容器,怎么认识容器, 第二:样式的优先级和继承的关系,那些是不被继承的,那些元素是能被继承的 第三:文字的颜色,字体大小, ...