实现方法
#region HTML生成PDF
public static bool HtmlToPdf(string url, string path)
{
if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(path))
return false;
path = HttpContext.Current.Server.MapPath(path);
string cookie = "cookieKey123 cookieValue123";
string Arguments = $"-q -B 0 -L 0 -R 0 -T 0 -s A4 --disable-smart-shrinking --cookie {cookie} {url} {path}";
try
{
var p = new Process();
string strWK = HttpContext.Current.Server.MapPath("/bin/wkhtmltopdf.exe");
if (!File.Exists(strWK))
return false;
p.StartInfo.FileName = strWK;
p.StartInfo.Arguments = Arguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.WaitForExit();
System.Threading.Thread.Sleep(1000);
return true;
}
catch
{
return false;
}
}
#endregion
参数说明
全局参数
--collate 当输出多个副本时进行校验(这是默认设置)
--no-collate 当输出多个副本时不进行校验
--cookie-jar 从提供的JAR文件中读写cookie数据
--copies 设置输出副本的数量(默认主1),其实为1就够了
-d, --dpi 指定一个要分辨率(这在 X11 系统中并没有什么卵用)
-H, --extended-help 相对 -h 参数,显示更详细的说明文档
-g, --grayscale 指定以灰度图生成PDF文档。占用的空间更小
-h, --help 显示帮助信息
--htmldoc 输出程序的html帮助文档
--image-dpi 当页面中有内嵌的图片时,
会下载此命令行参数指定尺寸的图片(默认值是 600)
--image-quality 当使用 jpeg 算法压缩图片时使用这个参数指定的质量(默认为 94)
--license 输出授权信息并退出
-l, --lowquality 生成低质量的 PDF/PS ,能够很好的节约最终生成文档所占存储空间
--manpage 输出程序的手册页
-B, --margin-bottom 设置页面的 底边距
-L, --margin-left 设置页面的 左边距 (默认是 10mm)
-R, --margin-right 设置页面的 右边距 (默认是 10mm)
-T, --margin-top 设置页面的 上边距
-O, --orientation 设置为“风景(Landscape)”或“肖像(Portrait)”模式,
默认是肖像模块(Portrait)
--page-height 页面高度
-s, --page-size 设置页面的尺寸,如:A4,Letter等,默认是:A4
--page-width 页面宽度
--no-pdf-compression 不对PDF对象使用丢失少量信息的压缩算法,不建议使用些参数,
因为生成的PDF文件会非常大。
-q, --quiet 静态模式,不在标准输出中打印任何信息
--read-args-from-stdin 从标准输入中读取命令行参数,后续会有针对此指令的详细介绍,
请参见 **从标准输入获取参数**
--readme 输出程序的 readme 文档
--title 生成的PDF文档的标题,如果不指定则使用第一个文档的标题
-V, --version 输出版本信息后退出
大纲参数
--dump-default-toc-xsl 输出默认的 TOC xsl 样式表到标准输出
--dump-outline 输出“大纲”到指定的文件(文件内容为xml)
--outline 在生成的PDF文档中输出“大纲”(这是默认设置)
--no-outline 不在pdf文档中输出大纲
--outline-depth 设置生成大纲的深度(默认为 4)
页面参数
--allow 指定加载HTML中相对路径文件的目录(可重复使用此参数指定多个
目录),这个参数会在后面进行更详细的讲解
--background 输出页面背景到PDF文档(这是默认设置)
--no-background 不输出页面背景到PDF文档
--cache-dir 网页的缓存目录
--checkbox-checked-svg 使用指定的SVG文件渲染选中的复选框
--checkbox-svg 使用指定的SVG文件渲染未选中的筛选框
--cookie 设置访问网页时的cookie,value 需要进行url编码
(可重复使用此参数指定多个cookie)
--custom-header 设置访问网页时的HTTP头(可重复使用此参数指定多个HTTP头)
--custom-header-propagation 为每个要加载的资源添加由 --custom-header 指定的HTTP头
--no-custom-header-propagation 不为每个要加载的资源添加由 --custom-header 指定的HTTP头
--debug-javascript 显示javascript调试输出的信息
--no-debug-javascript 不显示javascript调试输出的信息(这是默认设置)
--default-header 添加一个默认的“头”,在页面的左头显示页面的名字,
在页面的右头显示页码,这相对于进行了如下设置:
--header-left='[webpage]'
--header-right='[page]/[toPage]'
--top 2cm
--header-line
--encoding 为输入的文本设置默认的编码方式
--disable-external-links 禁止页面中的外链生成超链接
--enable-external-links 允许页面中的外链生成超链接(这是默认设置)
--disable-forms 不转换HTML表单为PDF表单(这是默认设置)
--enable-forms 转换HTML表单为PDF表单
--images 加载图片并输出到PDF文档(这是默认设置)
--no-images 在生成的PDF文档中过滤掉图片
--disable-internal-links 禁止页面中的内链生成超链接
--enable-internal-links 允许页面中的内链生成超连接(这是默认设置)
-n, --disable-javascript 禁止WEB页面执行 javascript
--enable-javascript 允许WEB页面执行 javascript(这是默认设置)
--javascript-delay 延迟一定的毫秒等待javascript 执行完成(默认值是200)
--load-error-handling 指定当页面加载失败后的动作,可以指定为:abort(中止)、
ignore(忽略)、skip(跳过);(默认值是:abort)
--load-media-error-handling 指定当媒体文件加载失败后的动作,可以指定为:
abort(中止)、ignore(忽略)、skip(跳过);
(默认值是:ignore)
--disable-local-file-access 不允许一个本地文件加载其他的本地文件,使用命令行参数
`--allow` 指定的目录除外。
--enable-local-file-access 允许本地文件加载其他的本地文件(这是默认设置)
--minimum-font-size 设置最小的字号,除非必要不推荐使用该参数
--exclude-from-outline 拒绝加载当前页面到PDF文档的目录和大纲中
--include-in-outline 加载当前页面到PDF文档的目录和大纲中(这是默认设置)
--page-offset 设置页码的起始值(默认值为0)
--password HTTP身份认证的密码
--disable-plugins 禁止使用插件(这是默认设置)
--enable-plugins 允许使用插件,但插件可能并不工作
--post 添加一个POST字段,可以重复使用该参数添加多个POST字段。
--post-file 添加一个POST文件,可以重复使用该参数添加多个文件。
--print-media-type 用显示媒体类型代替屏幕
--no-print-media-type 不用显示媒体类型代替屏幕
-p, --proxy 使用代理
--radiobutton-checked-svg 使用指定的SVG文件渲染选中的单选框
--radiobutton-svg 使用指定的SVG文件渲染未选中的单选框
--run-sript 页面加载完成后执行一个附加的JS文件,可以重复使用此参数指定
多个要在页面加载完成后要执行的JS文件。
--disable-smart-shrinking 不使用智能收缩策略
--enable-smart-shrinking 使用智能收缩策略(这是默认设置)
--stop-slow-scripts 停止运行缓慢的javascript代码(这是默认设置)
--no-stop-slow-scripts 不停止运行缓慢的javascript代码
--disable-toc-back-links 禁止从标题链接到目录(这是默认设置)
--enable-toc-back-links 允许从标题链接到目录
--user-style-sheet 设置一个在每个页面都加载的用户自定义样式表
--username HTTP身谁的用户名
--viewport-size <> 设置窗口大小,需要你自定义滚动条或css属性来自适应窗口大小。
--window-status Wait until window.status is equal to
this string before rendering page
--zoom 设置转换成PDF时页面的缩放比例(默认为1)
页眉和页脚参数
--footer-center 在页脚的居中部分显示页脚文本
--footer-font-name 设置页脚的字体 (默认为 Arial)
--footer-font-size 设置页脚的字体大小 (默认为 12)
--footer-html 添加一个html作为页脚
--footer-left 在页脚的居左部分显示页脚文本
--footer-line 在页脚上方显示一条直线分隔正文
--no-footer-line 不使用直线分隔页脚与正文(这是默认设置)
--footer-right 在页脚的居右部分显示页脚文本
--footer-spacing 页脚与正文之间的距离(默认为零)
--header-center 在页眉的居中部分显示页眉文本
--header-font-name 设置页眉的字体 (默认为 Arial)
--header-font-size 设置页眉的字体大小 (默认为 12)
--header-html 添加一个html作为页眉
--header-left 在页眉的居左部分显示页眉文本
--header-line 在页眉下方显示一条直线分隔正文
--no-header-line 不使用直线分隔页眉与正文(这是默认设置)
--header-right 在页眉的居右部分显示页眉文本
--header-spacing 页眉与正文之间的距离(默认为零)
页眉和页脚text可设置变量参数
[page] 当前正在被输出页面的页码
[frompage] 第一页在文档中的页码
[topage] 最后一面在文档中的页码
[webpage] 当前正在被输出页面的URL
[section] 当前正在被输出的章节的名字
[subsection] 当前正在被输出的小节的名字
[date] 本地系统格式的当前日期
[isodate] ISO 8601 格式的当前日期
[time] 本地系统格式的当前时间
[title] 当前对象的标题
[doctitle] 输出文档的标题
[sitepage] 当前正在处理的对象中当前页面的页码
[sitepages] 当前正在处理的对象中的总页数
目录参数
--disable-dotted-lines 在目录中不使用虚线
--toc-header-text 设置目录的页眉文本
--toc-level-indentation 第级标题在目录中的缩进宽度(默认为1em)
--disable-toc-links 在目录中不生成指向内容锚点的超链接
--toc-text-size-shrink 在目录中每级标题的缩放比例(默认为0.8)
--xsl-style-sheet 使用自定义的 XSL 样式表显示目录内容