背景:将前台页面转换成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 工具精讲

使用wkhtmltopdf工具生成pdf的更多相关文章

  1. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

  2. 页面导出生成pdf,使用wkhtmltopdf第三方工具

    把页面导出生成pdf,这里用到第三方的工具,使用方法中文文档没有找到,网上也没找到网友详细的神作.没有深入研究,所以也不赘述了,当然最基本的使用大多数也够用了,详细参数的官网也没介绍,大家使用的时候, ...

  3. java调用wkhtmltopdf生成pdf文件,美观,省事

    最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...

  4. HTML 转 PDF 之 wkhtmltopdf 工具精讲

    术语定义 文档对象 “文档对象”是指PDF文档中的文档对象,共有三种类型的“文档对象”,他们分别是“页面对象”,“封面对象”和“目录对象”. 页面对象 “页面对象”是指以页面的形式在PDF文档中呈现的 ...

  5. wkhtmltopdf 生成pdf

    public class PdfHelper { static string RootPath { get { string AppPath = ""; HttpContext H ...

  6. wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)

    目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...

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

    我们的网站业务会生成一个报告,用网页展示出来,要有生成pdf并下载的功能,关键是生成pdf. 用内容一段段去拼pdf,想想就很崩溃,所以就去网上找直接把html生成pdf的方法. 网上资料大部分都是用 ...

  8. C#使用wkhtmltopdf,把HTML生成PDF(包含分页)

    最近花了2天多的时间终于把HTML生成PDF弄好了.步骤如下: 1.首先是技术选型.看了好多都是收费的就不考虑了. 免费的有: jsPDF(前端生成,清晰度不高,生成比较慢) iText(严格要求ht ...

  9. WkHtmlToPdf 生成 PDF

    1. 首先去http://wkhtmltopdf.org/downloads.html 下载最新版本的安装包 2. 执行安装完成 3. CMD 命令行运行wkhtmltopdf.exe程序生成PDF ...

随机推荐

  1. nginx windows 代理 80端口 500

    今天准备配置一个nginx 用来代理80端口分别访问.net core 和spring boot 服务器 配置使用的最基本的代理配置 #user nobody; worker_processes 1; ...

  2. Linux ssh内置sftp配置说明

    centos7 环境下已验证 首先建立两个用户,用于sftp访问使用. eg: useradd -d /opt/sftp  -s /bin/nologin sftp 说明 -s /bin/nologi ...

  3. 编译原理--NFA/DFA

    现成的, 讲义: https://www.cnblogs.com/AndyEvans/p/10240790.html https://www.cnblogs.com/AndyEvans/p/10241 ...

  4. vertica copy

    copy huimei.ken_copy  from '/home/dbadmin/file.txt' delimiter ';'

  5. Spring---Spring Integration

    1.概述 1.1.Spring Integration  提供了  基于spring  的 EIP(Enterprise Integration Patterns,企业集成模式)的实现: 1.2.Sp ...

  6. Jmeter BeanShell前置处理器、取样器、后置处理器

    前置处理器:BeanShell PreProcessor取样器 :BeanShell Sampler后置处理器:BeanShell PostProcessor 1.前置 import org.apac ...

  7. .HDF数据库与SQLSERVER / ORACLE的区别

    无论ArcGIS的.gbd文件还是MapGIS的.hdf文件,都是数据库文件. 后缀是无意义的.有意义的是其中内在的逻辑和数据结构. https://zhidao.baidu.com/question ...

  8. 如何判断WebBrowser浏览器网页加载完成

    在工作中遇到了这样的问题,那就是要判断WebBrowser浏览器网页是否加载完成,通过搜索发现网友们解决这一问题的几种方法,但都不能解决实际问题,现在我们就来看看网友们是如何解决这一问题的. 一.通过 ...

  9. Jenkins slave-agent.jnlp 无法安装为服务(install as a service)

    问题: 在部署持续集成环境,配置slave节点时遇到一个问题,slave-agent.jnlp可以正常启动运行(不能正常启动的点这里) 但是在保存为系统服务时,slave-agent.jnlp点击[i ...

  10. 使dialog可拖拽指令

    在项目开发过程中,需要支持dialog弹窗可拖拽,则需要对dialog添加指令.具体操作说明如下: (1)在用于存放指令的文件夹内,新建拖拽指令文件夹,例如命名为:el-dragDialog,如下所示 ...