Pechkin:html -> pdf 利器

简介: Pechkin 是GitHub上的一个开源项目,可方便将html转化成pdf文档,使用也很方便,下面是winform项目中的示例代码: using System; using System.Diagnostics; using System.

Pechkin 是GitHub上的一个开源项目,可方便将html转化成pdf文档,使用也很方便,下面是winform项目中的示例代码:

using System;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO;
using System.Windows.Forms;
using Pechkin;
using Pechkin.Synchronized;

namespace PdfTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCreatePDF_Click(object sender, EventArgs e)
        {

            SynchronizedPechkin sc = new SynchronizedPechkin(new GlobalConfig()
                .SetMargins(new Margins() { Left = 0, Right = 0, Top = 0, Bottom = 0 }) //设置边距
                .SetPaperOrientation(true) //设置纸张方向为横向
                .SetPaperSize(ConvertToHundredthsInch(50), ConvertToHundredthsInch(100))); //设置纸张大小50mm * 100mm

            byte[] buf = sc.Convert(new ObjectConfig(), this.txtHtml.Text);

            if (buf == null)
            {
                MessageBox.Show("Error converting!");
                return;
            }

            try
            {
                string fn = Path.GetTempFileName() + ".pdf";
                FileStream fs = new FileStream(fn, FileMode.Create);
                fs.Write(buf, 0, buf.Length);
                fs.Close();

                Process myProcess = new Process();
                myProcess.StartInfo.FileName = fn;
                myProcess.Start();
            }
            catch { }
        }


        private int ConvertToHundredthsInch(int millimeter)
        {
            return (int)((millimeter * 10.0) / 2.54);
        }
    }
}

web项目中也可以使用:

1.  新建一个待打印的页面,比如index.htm,示例内容如下:

<!doctype html> 
<html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <title>html打印测试</title> 
        <style type="text/css" media="all"> 
            * { margin:0; padding:0; font-size:12px } 
            table { margin:10px; border:2px solid #000; border-collapse:collapse; margin:5px auto } 
            th, td { border:1px solid #000; border-collapse:collapse; padding:3px 5px } 
            h1 { font-size:24px } 
             @media print { 
                .no-print { display: none; } 
                .page-break { page-break-after: always; } 
            } 
        </style> 
        <script type="text/javascript">

           

            function createPdf() {               
                window.open("CreatePdf.ashx?html=index.htm");
            }
        </script>
    </head> 
    <body> 
        <div class="no-print" style="text-align:center;margin:5px"> 
            <button onClick="createPdf()">导出pdf</button> 
        </div> 
        <table > 
            <thead> 
                <tr> 
                    <th colspan="5"> 
                        <h1>XXXX报表</h1> 
                    </th> 
                </tr> 
                <tr> 
                    <th> 序号 </th> 
                    <th> 栏目1 </th> 
                    <th> 栏目2 </th> 
                    <th> 栏目3 </th> 
                    <th> 栏目4 </th> 
                </tr> 
            </thead> 
            <tbody> 
                <tr> 
                    <td> 1 </td> 
                    <td> 数据1 </td> 
                    <td> 数据2 </td> 
                    <td> 数据3 </td> 
                    <td> 数据4 </td> 
                </tr> 
                <tr class="page-break"> 
                    <td> 2 </td> 
                    <td> 数据1 </td> 
                    <td> 数据2 </td> 
                    <td> 数据3 </td> 
                    <td> 数据4 </td> 
                </tr> 
                <tr> 
                    <td> 3 </td> 
                    <td> 数据1 </td> 
                    <td> 数据2 </td> 
                    <td> 数据3 </td> 
                    <td> 数据4 </td> 
                </tr> 
                <tr> 
                    <td> 4 </td> 
                    <td> 数据1 </td> 
                    <td> 数据2 </td> 
                    <td> 数据3 </td> 
                    <td> 数据4 </td> 
                </tr> 
                <tr> 
                    <td> 5 </td> 
                    <td> 数据1 </td> 
                    <td> 数据2 </td> 
                    <td> 数据3 </td> 
                    <td> 数据4 </td> 
                </tr> 
            </tbody> 
            <tfoot> 
                <tr> 
                    <th> 合计: </th> 
                    <th> </th> 
                    <th> </th> 
                    <th> 300.00 </th> 
                    <th> 300.00 </th> 
                </tr> 
            </tfoot> 
        </table> 
    </body> 
</html>

 2、创建一个ashx来生成并输出pdf

using System;
using System.Drawing.Printing;
using System.IO;
using System.Web;
using Pechkin;
using Pechkin.Synchronized;

namespace PdfWebTest
{
    /// <summary>
    /// Summary description for CreatePdf
    /// </summary>
    public class CreatePdf : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {

            string htmlFile = context.Request["html"];

            if (!string.IsNullOrWhiteSpace(htmlFile))
            {
                string filePath = context.Server.MapPath(htmlFile);
                if (File.Exists(filePath))
                {
                    string html = File.ReadAllText(filePath);
                    SynchronizedPechkin sc = new SynchronizedPechkin(new GlobalConfig()
                                            .SetMargins(new Margins() { Left = 0, Right = 0, Top = 0, Bottom = 0 }) //设置边距
                                            .SetPaperOrientation(true) //设置纸张方向为横向
                                            .SetPaperSize(ConvertToHundredthsInch(50), ConvertToHundredthsInch(100))); //设置纸张大小50mm * 100mm

                    byte[] buf = sc.Convert(new ObjectConfig(), html);

                    if (buf == null)
                    {
                        context.Response.ContentType = "text/plain";
                        context.Response.Write("Error converting!");
                    }

                    try
                    {                        
                        context.Response.Clear();
                        

                        //方式1:提示浏览器下载pdf   
                        //context.Response.AddHeader("content-disposition", "attachment;filename=" + htmlFile + ".pdf");
                        //context.Response.ContentType = "application/octet-stream";
                        //context.Response.BinaryWrite(buf);

                        //方式2:直接在浏览器打开pdf
                        context.Response.ContentType = "application/pdf";
                        context.Response.OutputStream.Write(buf, 0, buf.Length);

                        context.Response.End();
            
                    }
                    catch(Exception e) {
                        context.Response.ContentType = "text/plain";
                        context.Response.Write(e.Message);
                    }
                }

            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }


        private int ConvertToHundredthsInch(int millimeter)
        {
            return (int)((millimeter * 10.0) / 2.54);
        }
    }
}

注意事项:部署web项目时,要保证bin目录下有以下相关dll文件

Common.Logging.dll
libeay32.dll
libgcc_s_dw2-1.dll
mingwm10.dll
Pechkin.dll
Pechkin.Synchronized.dll
ssleay32.dll
wkhtmltox0.dll 

目录
相关文章
|
28天前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
325 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
63 2
|
24天前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
47 0
|
2月前
|
移动开发 前端开发 JavaScript
使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)
本文介绍了在前端项目中,当使用`html2canvas`遇到问题时,如何使用`html-to-image`库作为替代方案,结合`jspdf`实现将DOM元素生成为PDF文件并提供下载。文章首先讨论了`html2canvas`可能遇到的问题,并提供了该库的使用示例代码。随后,详细介绍了`html-to-image`库的安装和使用方法,展示了如何将DOM元素转换为Canvas,再利用`jspdf`生成PDF文件。最后,文章通过示例代码说明了整个转换和下载的过程,并展示了效果截图。
73 0
|
4月前
|
Unix Linux Shell
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
|
5月前
使用LabVIEW打开默认应用程序中的文档(PDF,Word,Excel,Html)
使用LabVIEW的&quot;Open a Document on Disk.vi&quot;,存于&lt;LabVIEW&gt;\vi.lib\Platform\browser.llb,可让默认应用打开硬盘文档。此VI仅基础打开功能,高级控制推荐LabVIEW Report Generation Toolkit或ActiveX。注意:避免版本升级问题,最好将VI复制到vi.lib外的目录。
235 3
|
6月前
|
数据采集 移动开发 前端开发
springboot使用html模版导出pdf文档
springboot使用html模版导出pdf文档
|
6月前
|
前端开发 文件存储 Python
python之xhtml2pdf: HTML转PDF工具示例详解
python之xhtml2pdf: HTML转PDF工具示例详解
474 0
|
6月前
|
Python
python html(文件/url/html字符串)转pdf
python html(文件/url/html字符串)转pdf
50 0
|
6月前
|
前端开发 JavaScript API
使用 html2PDF 将内容导出为 PDF
使用 html2PDF 将内容导出为 PDF
394 0
下一篇
无影云桌面