WkHtmlToPdf 生成 PDF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 5000 c:\BPReport.html c:\BPReport_L.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
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, 0, file.Length); 
        fs.Close();

        //Response给客户端下载 
        Response.Clear(); 
        Response.AddHeader("content-disposition", "attachment; filename=" + fileNameWithOutExtention + ".pdf");//强制下载 
        Response.ContentType = "application/octet-stream"; 
        Response.BinaryWrite(file);


    } 
}

 

如果是用.NET开发,已经有人包成NuGet套件,直接搜寻pechkin就可找到,它有两个版本: Pechkin适用单执行绪,如要非同步执行请选用Pechkin.Synchronized。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Pechkin;
 
namespace Html2Pdf
{
    class Program
    {
        static void Main(string[] args)
        {

//读取HTML
            var config = new GlobalConfig();
            var pechkin = new SimplePechkin(config);
            ObjectConfig oc = new ObjectConfig();
            oc.SetPrintBackground(true)
                .SetLoadImages(true)
                .SetPageUri("http://news.google.com.tw/");
            byte[] pdf = pechkin.Convert(oc);
            File.WriteAllBytes("d:\\temp\\google-news.pdf", pdf);
 
//自制HTML
            string html = @"
<html><head><style>
body { background: #ccc; }
div { 
width: 200px; height: 100px; border: 1px solid red; border-radius: 5px;
margin: 20px; padding: 4px; text-align: center;
}
</style></head>
<body>
<div>Jeffrey</div>
<script>document.write(‘<span>Generated by JavaScript</span>‘);</script>
</body></html>
";
            pdf = pechkin.Convert(oc, html);
            File.WriteAllBytes("d:\\temp\\myhtml.pdf", pdf);
        }
 
    }
}

 

以上是关于WkHtmlToPdf 生成 PDF的主要内容,如果未能解决你的问题,请参考以下文章

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

调用 wkhtmltopdf 从 HTML 生成 PDF

如何使用 wkhtmltopdf 获取 html 生成的 pdf 中的页码

wkhtmltopdf 能直接将登录后(后台页面)的某一网页生成pdf文件吗

使用 wkhtmltopdf 从 HTML 生成 Google Web 字体和 PDF

《html转pdf-----wkhtmltopdf踩坑总结》