通过 itextpdf 的 HtmlConverter.convertToPdf(); 方法生成的pdf 有点让人失望,CSS啥的不起作用了,(有可能我用得不对)

后来用 wkhtmltopdf.exe 做了 网页生成PDF 效果还可以,下面是JAVA代码,C#的差不多

public static void main(String[] args) throws IOException{
String htmlPath = "http://www.vipsoft.com.cn/?id=" + id; //TODO application.yml 固定地址+参数
String savePath = "C:\\Users\\vipsoft\\Desktop\\Pdf\\" + fileName; //TODO 指定路径+动态文件名
String pdfTool = "D:\\Tools\\Dotnet\\wkhtmltopdf.exe";
stringBuilder.append(" " + pdfTool + " "); //TODO application.yml
stringBuilder.append(" --javascript-delay 5000 "); //参数要在地址前面,否则可能会失败
stringBuilder.append(" \"" + htmlPath + "\" "); //本地 HTML 的文件路径或网页 HTML 的URL地址,要加 \" 双引号,否则可能会失败
stringBuilder.append(" \"" + savePath + "\" "); //生成的 PDF 文档的保存路径 要加 \" 双引号,否则可能会失败
Process process = Runtime.getRuntime().exec(stringBuilder.toString());
}

https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

入参如下:

// 全局选项:
//--collate 打印多个副本时进行检查(默认设置)
//--no-collate 打印多个副本时不进行检查
//--cookie-jar <path> 从指定的cookie JAR文件中读写 cookie 数据
//--copies <number> 打印 PDF 文件的份数(默认值为:1)
//--dpi <dpi> 设置一个分辨率,对于 X11 系统没有作用(默认值为:96)
//--extended-help 相对 -H 参数的设置,显示更详细的说明文档
//--grayscale 将生成灰度的 PDF 文档,占用空间小,但是不会有彩色
//--help 显示帮助信息
//--htmldoc 输出程序的 HTML 帮助文档
//--image-dpi <integer> 当页面存在内嵌图片时,指定图像的分辨率(默认值为:600)
//--image-quality <interger> 当使用 JPEG 算法压缩图片时,指定图像的质量(默认值为:94)
//--license 输出授权许可信息并退出
//--lowquality 生成低质量的 PDF/PS,能够减少最终生成文档所占用的存储空间
//--manpage 输出程序的手册页
//--quiet 静默模式,不输出任何信息
//--read-args-from-stdin 从标准输入读取命令行参数
//--readme 输出程序的 Readme 文档
//--version 输出版本信息并退出
//--no-pdf-compression 设置为不要对 PDF 对象使用无损压缩
//--margin-bottom <unitreal> 设置页面的底边距,单位毫米(mm)
//--margin-left <unitreal> 设置页面的左边距 (默认值为:10mm)
//--margin-right <unitreal> 设置页面的右边距 (默认值为:10mm)
//--margin-top <unitreal> 设置页面的上边距,单位毫米(mm)
//--page-size <Size> 设置页面的大小,如:A4、Letter等(默认值为:A4)
//--page-height <unitreal> 设置页面高度,单位毫米(mm)
//--page-width <unitreal> 设置页面宽度,单位毫米(mm)
//--orientation <orientation> 设置文档模式为风景或肖像(默认值为:肖像)
//--title <text> 生成的 PDF 文档的标题(如果没有指定,则使用第一个文档的标题)

//大纲选项:
//--dump-default-toc-xsl 转储到默认的 TOC xsl 样式表到标准输出文件
//--dump-outline <file> 将大纲转储到指定的文件(XML 文件)
//--outline 在生成的 PDF 文档中添加大纲(默认设置)
//--no-outline 不要在生成的 PDF 文档中添加大纲
//--outline-depth <level> 设置大纲的深度(默认值为:4)

//页面选项:
//--allow <path> 允许加载指定文件夹中的文件(可重复使用此参数指定多个文件)
//--background 输出页面背景到 PDF 文档(默认设置)
//--no-background 不输出页面背景到 PDF 文档
//--bypass-proxy-for <value> 设置主机的代理(可重复指定多个代理)
//--cache-dir <path> Web缓存目录
//--checkbox-checked-svg <path> 使用指定的SVG文件渲染选中的复选框
//--checkbox-svg <path> 使用指定的SVG文件渲染未选中的复选框
//--cookie <name> <value> 设置访问网页时额外的 cookie,value 应该是 url 编码的(可重复使用此参数指定多个 cookie)
//--custom-header <name> <value> 设置访问网页时额外的 HTTP 头(可重复使用此参数指定多个 HTTP 头)
//--custom-header-propagation 为每个资源请求添加自定义的 HTTP 头
//--no-custom-header-propagation 不要为每个资源请求添加自定义的 HTTP 头
//--debug-javascript 显示 JavaScript 调试输出的内容
//--no-debug-javascript 不显示 JavaScript 调试输出的内容(默认设置)
//--encoding <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 允许页面中的内链生成超连接(默认设置)
//--disable-javascript 禁止 Web 页面运行 JavaScript
//--enable-javascript 允许 Web 页面运行 JavaScript(默认设置)
//--javascript-delay <msec> 延迟指定的时间,等待 JavaScript 执行完成,单位毫秒(ms)(默认值为:200)
//--load-error-handling <handler> 指定如何处理无法加载的页面:abort、ignore、skip(默认值为:abort)
//--load-media-error-handling <handler> 指定如何处理无法加载的媒体文件:abort、ignore、skip(默认值为:ignore)
//--disable-local-file-access 不允许一个本地文件加载其他的本地文件,使用命令行参数 --allow 指定的目录除外。
//--enable-local-file-access 允许将本地文件转换到其他本地文件中读取(默认设置)
//--exclude-from-outline 不要将页面包含在内容表和大纲中
//--include-in-outline 将页面包含在内容表和大纲中(默认设置)
//--page-offset <offset> 设置页码的起始值(默认值为:0)
//--minimum-font-size <int> 设置最小的字体大小
//--disable-plugins 禁用已安装的插件(默认设置)
//--enable-plugins 启用已安装的插件(但插件可能不起作用)
//--post <name> <value> 添加一个附加字段(可以重复使用该参数添加多个附加字段)
//--post-file <name> <value> 添加一个附加文件(可以重复使用该参数添加多个附加文件)
//--print-media-type 使用打印媒体类型代替屏幕
//--no-print-media-type 不使用打印媒体类型代替屏幕(默认设置)
//--proxy <proxy> 使用代理
//--radiobutton-checked-svg <path> 使用指定的SVG文件渲染选中的单选按钮
//--radiobutton-svg <path> 使用指定的SVG文件渲染未选中的单选按钮
//--run-sript <js> 在页面加载完成后运行这个额外的 JavaScript(可以重复使用该参数添加多个额外的 JavaScript)
//--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 <url> 指定一个用户样式表,以便加载每个页面
//--username <username> HTTP 身份认证的用户名
//--password <password> HTTP 身份认证的密码
//--viewport-size <> 设置窗口大小,需要自定义滚动条或 CSS 属性来自适应窗口大小
//--window-status <windowStatus> 等到window.status等于这个字符串前渲染页面
//--zoom <float> 设置转换成 PDF 时页面的缩放比例(默认值为:1)
//--default-header 添加一个默认的页眉,左边是页面的名称,右边是页码,是下面的缩写:
// --header-left='[webpage]'
// --header-right='[page]/[toPage]'
// --top 2cm
// --header-line

//页眉和页脚选项:
//--footer-left <text> 居左显示页脚文本
//--footer-center <text> 居中显示页脚文本
//--footer-right <text> 居右显示页脚文本
//--footer-font-name <name> 设置页脚的字体名称(默认值为:Arial)
//--footer-font-size <size> 设置页脚的字体大小(默认值为:12)
//--footer-html <url> 添加一个 HTML 作为页脚
//--footer-line 在页脚上方显示一条直线
//--no-footer-line 不在页脚上方显示一条直线(默认设置)
//--footer-spacing <real> 设置页脚与内容之间的间距,单位毫米(mm)(默认值为:0)

//--header-left <text> 居左显示页眉文本
//--header-center <text> 居中显示页眉文本
//--header-right <text> 居右显示页眉文本
//--header-font-name <name> 设置页眉的字体名称(默认值为:Arial)
//--header-font-size <size> 设置页眉的字体大小(默认值为:12)
//--header-html <url> 添加一个 HTML 作为页眉
//--header-line 在页眉下方显示一条直线
//--no-header-line 不在页眉下方显示一条直线(默认设置)
//--header-spacing <real> 设置页眉与内容之间的间距,单位毫米(mm)(默认值为:0)
//--replace <name> <value> 在页眉和页脚中替换指定名称的值(可以重复使用该参数指定多个需要替换的名称和值)

//内容表选项:
//--disable-dotted-lines 不要在 TOC 中使用虚线
//--toc-header-text <text> 设置 TOC 的标题文本(默认值为:内容表)
//--toc-level-indentation <width> 在 TOC 缩进每一级的标题长度(默认值为:1em)
//--disable-toc-links 在 TOC 中不生成指向内容锚点的超链接
//--toc-text-size-shrink <real> 在 TOC 中的每一级标题,字体按这个比例缩放(默认值为:0.8)
//--xsl-style-sheet <file> 使用指定的 XSL 样式表打印内容表

//页眉和页脚:
//页眉和页脚可以使用参数 --header-* 和 --footer-* 添加到文档中。
//有些参数也需要提供一个字符串 text 作为参数值。例如:--header-left
//可以在 text 中使用以下变量,将会把以下变量替换为对应的值。

//* [page] 当前正在打印的页面的页码
//* [frompage] 打印的第一页的页码
//* [topage] 打印的最后一页的页码
//* [webpage] 当前正在打印的页面的 URL
//* [section] 当前正在打印的章节的名称
//* [subsection] 当前正在打印的分段的名称
//* [date] 本地系统格式的当前日期
//* [isodate] ISO 8601 扩展格式的当前日期
//* [time] 本地系统格式的当前时间
//* [title] 当前页对象的标题
//* [doctitle] 输出文档的标题
//* [sitepage] 当前正在处理的对象中当前页面的页码
//* [sitepages] 当前正在处理的对象中的总页数

//举个例子:
//--header-right "Page [page] of [toPage]",
//会在页面的右上角生成一个类似 Page x of y 的字符串,
//其中 x 是当前页面的页码, y 是当前文档最后一页的页码。

wkhtmltopdf 代替 itext 将 url 转成 pdf的更多相关文章

  1. 黄聪: PHP WkHtmlToPdf/WkHtmlToImage 将网页直接转换成pdf和图片

    function convert($type='pdf') { $filename=time(); $url=$this->input->get("url"); if( ...

  2. 使用Snappy将html或者url转成PDF文件

    这是一个操作简单的html文件或者url转PDF的php库 Github地址 https://github.com/KnpLabs/snappy 安装: $ composer require knpl ...

  3. 利用WkHtmlToPdf,把H5 转成PDF

    工具下载地址: 链接:https://pan.baidu.com/s/1TSq2WWZcvPwuIfPRHST-FA 提取码:wkx8 原理: 通过IIS访问页面,利用WkHtmlToPdf.exe, ...

  4. 老菜鸟学习:Javascript 将html转成pdf

    起因:处理某个项目,需要把页面上的数据(订单.运单)等导出pdf. 第一个想法:从 Java 层去想.但是经过各种资料查询和实践,第一个想法宣告放弃: 幸好客户的要求是:导出的 pdf 尺寸要和打印的 ...

  5. 将博客转成pdf

    前些天无意间看到了“birdben”的博客,写的比较详细,但是最新的文章更新时间是“2017-05-07”,时间很是久远,本打算有时间认真学习一下博主所写的文章,但是担心网站会因为某些原因停止服务,于 ...

  6. wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具

    wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档. 官网地址 http://wkhtmltopdf.org/ gi ...

  7. 使用wkhtmltopdf将多个html批量转成pdf

    相关工具:wkhtmltopdf 场景:比如笔者有 ognl中文文档,全部是html,现在想把它转成pdf,放到ipad阅读,文件如下: 下载好wkhtmltox(本地安装目录 D:\develop\ ...

  8. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  9. Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...

  10. 我是如何将博客转成PDF的

    前言 只有光头才能变强 之前有读者问过我:"3y你的博客有没有电子版的呀?我想要份电子版的".我说:"没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航 ...

随机推荐

  1. nginx 配置 proxy_next_upstream 会出现未预期 502 错误问题排查

    当使用nginx代理多个网关实例时, 当被请求服务的get 接口异常时,如 error timeout invalid_header http_500 http_502 http_503 http_5 ...

  2. DM数据库 回表优化案例

    京华开发一哥们找我优化条SQL,反馈在DM数据库执行时间很慢需要 40s 才能出结果,安排. 原SQL: SELECT A.IND_CODE, A.IND_NAME AS "specialN ...

  3. 推荐一个Node.js多版本管理的可视化工具

    关于Node.js的开发者来说,在开发机器上管理多个不同版本的Node.js是一个常见痛点.之前在开发者安全大全专栏中,提到过解决方法:使用nvm,如果对于nvm还不了解的话,可以前往了解. 对于TJ ...

  4. JAVA培训

    类 类名 对象名=new 类名(); 面向对象的三种特性 * 封装 原理:利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体.数据被保护在抽象数据类型的内部,尽可能地隐藏 ...

  5. 时间复杂度为 O(n^2) 的排序算法

    对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法.因为时间复杂度并不代表实际代码的执行时间,它省去了低阶.系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n2) 的排序算法 ...

  6. Axure实战应用:Axure设计可视化大屏!

    Axure是一款功能强大的原型设计工具,可以用于设计可视化大屏.设计一个有效的可视化大屏需要考虑多个方面,包括布局规划.信息展示.交互设计等. 以下是一个详细的描述,希望对你有所帮助. 第一部分:可视 ...

  7. Java8新特性之FlatMap&Reduce

    1.FlagMap // flatMap:接收一个T返回一个R,将一个元素转为一个新的流 ;R apply(T t); <R> Stream<R> flatMap(Functi ...

  8. 动态规划问题(三)最长递增子序列长度(LIS)

    问题描述 ​ 有一个数组,它内部的顺序是乱序的,现在要求你找出该数组中的最长的递增子序列长度. ​ 例如:对于数组 {10, 20, 9, 33, 21, 50, 41, 60, 80},它的最长递增 ...

  9. Golang实现JAVA虚拟机-指令集和解释器

    原文链接:https://gaoyubo.cn/blogs/f57f32cf.html 前置 Golang实现JAVA虚拟机-解析class文件 Golang实现JAVA虚拟机-运行时数据区 一.字节 ...

  10. 遍历菜单树得到所有菜单ids

    1.前言 在我们实现菜单管理页面的时候,有时候我们需要默认展开所有的菜单列表,但是因为后端有时候没有返回所有菜单ids数组. 而且我们也不容易获取到所有菜单ids,比如如果我们通过角色id查询到所有菜 ...