zoukankan      html  css  js  c++  java
  • 使用wkhtmltopdf工具生成pdf

    背景:将前台页面转换成pdf文档保存到服务器

    最开始计划使用canvas2pdf在前端进行生成。但是canva2pdf转换的pdf有严重的失真问题,然后决定使用wkhtmltopdf工具进行生成。

    思路:服务器准备好模板(html页面),前台将数据传回后台,将数据把模板中的占位符替换掉,然后生成临时html页面,再使用wkhtmltopdf工具将html页面转换成pdf

    这里注意:模板中使用到的图片和引用css的路径需要使用绝对路径(带盘符如:c:a.jpg 或者为localhost:5555/src/a.css)否则wkhtmltopdf工具会找不到引用资源。

    将数据填充到html的过程这里就不做展示。只展示转换过程

    //导出html
                string outputDir = ConvertPdfHelper.GetAbsolutePath("outputDir", false);
                DateTime now = DateTime.Now;
                string filePath = now.ToString("yyyy/MM/dd") + "/" + salesOrderNo + ".html";
                string temphtmlPath = Path.Combine(outputDir, filePath);
                string pdfPath = temphtmlPath.Replace(".html", ".pdf");
                //保證文件夾存在
                FileInfo fileInfo = new FileInfo(temphtmlPath);
                fileInfo.Directory.Create();
                string wtHtmlToPdfEXEPath = ConvertPdfHelper.GetAbsolutePath("htmltopdfTool", false);
                using (StreamWriter writer = new StreamWriter(temphtmlPath, false, Encoding.UTF8))
                {
                    writer.WriteLine(layoutSb);
                    writer.Flush();
                    writer.Close();
                }
                //轉pdf
                string switches = "";
                switches += "--margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm ";
    
                switches += "--page-size A5 ";
                switches += "--orientation Landscape ";
    
                switches += "--javascript-delay 1000 ";
                switches += "--image-quality 50 --lowquality ";
                switches += "--disable-smart-shrinking ";
                switches += " " + temphtmlPath + " " + pdfPath + "";
                ProcessStartInfo startInfo = new ProcessStartInfo(wtHtmlToPdfEXEPath, switches);
                startInfo.CreateNoWindow = true;
                startInfo.UseShellExecute = false;
                //将输出信息重定向
                startInfo.RedirectStandardOutput = true;
                Process process = Process.Start(startInfo);
                process.WaitForExit();

    Done!

    wkhtmltopdf的工具参数详解在这里 

    HTML 转 PDF 之 wkhtmltopdf 工具精讲

  • 相关阅读:
    表单提交
    js 设备判断(移动端pc端 安卓ios 微信)
    js 页面history.back()返回上一页,ios 不重新加载ready的解决办法
    移动端解决单机事件延迟fastclick
    定时器时间动态变化(变速)
    gulp配置(编译压缩转码自动刷新注释全)
    ios和安卓H5交互桥接
    倒计时
    PHP跨域jsonp方式
    1.Redis简介/配置文件
  • 原文地址:https://www.cnblogs.com/c-supreme/p/9894753.html
Copyright © 2011-2022 走看看