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 工具精讲

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/c-supreme/p/9894753.html
Copyright © 2011-2022 走看看