当前位置: 首页 > news >正文

Java后端:html转pdf实战笔记

目录

1、htmltopdf有什么用?

2、什么是wkhtmltopdf

3、wkhtmltopdf 参数介绍

4、示例项目

5、预览效果


 

1、htmltopdf有什么用?

htmltopdf 是一款基于wkhtmltopdf技术的html转pdf文档java类库,支持html转pdf和url转pdf。

2、什么是wkhtmltopdf

wkhtmltopdf是一个用webkit网页渲染引擎开发的用来将html转成 pdf的工具,可跟多种脚本语言进行集成来转换文档,有windows、linux等平台版本。

Wkhtmltopdf可直接把浏览器中浏览的网页转换成一个pdf,他是一个把html页面转换成pdf的软件(需要安装在服务器上)。使用时可通过java代码调用cmd指令完成网页转换为pdf的功能。

3、wkhtmltopdf 参数介绍

常规选项 
–allow 允许加载从指定的文件夹中的文件或文件(可重复) 
–book* 设置一会打印一本书的时候,通常设置的选项 
–collate 打印多份副本时整理 
–cookie 设置一个额外的cookie(可重复) 
–cookie-jar 读取和写入的Cookie,并在提供的cookie jar文件 
–copies 复印打印成pdf文件数(默认为1) 
–cover* 使用HTML文件作为封面。它会带页眉和页脚的TOC之前插入 
–custom-header 设置一个附加的HTTP头(可重复) 
–debug-javascript 显示的javascript调试输出 
–default-header* 添加一个缺省的头部,与页面的左边的名称,页面数到右边,例如: –header-left ‘[webpage]’ –header-right ‘[page]/[toPage]’ –header-line 
–disable-external-links* 禁止生成链接到远程网页 
–disable-internal-links* 禁止使用本地链接 
–disable-javascript 禁止让网页执行JavaScript 
–disable-pdf-compression* 禁止在PDF对象使用无损压缩 
–disable-smart-shrinking* 禁止使用WebKit的智能战略收缩,使像素/ DPI比没有不变 
–disallow-local-file-access 禁止允许转换的本地文件读取其他本地文件,除非explecitily允许用 –allow 
–dpi 显式更改DPI(这对基于X11的系统没有任何影响) 
–enable-plugins 启用已安装的插件(如Flash 
–encoding 设置默认的文字编码 
–extended-help 显示更广泛的帮助,详细介绍了不常见的命令开关 
–forms* 打开HTML表单字段转换为PDF表单域 
–grayscale PDF格式将在灰阶产生 
–help Display help 
–htmldoc 输出程序HTML帮助 
–ignore-load-errors 忽略claimes加载过程中已经遇到了一个错误页面 
–lowquality 产生低品质的PDF/ PS。有用缩小结果文档的空间 
–manpage 输出程序手册页 
–margin-bottom 设置页面下边距 (default 10mm) 
–margin-left 将左边页边距 (default 10mm) 
–margin-right 设置页面右边距 (default 10mm) 
–margin-top 设置页面上边距 (default 10mm) 
–minimum-font-size 最小字体大小 (default 5) 
–no-background 不打印背景 
–orientation 设置方向为横向或纵向 
–page-height 页面高度 (default unit millimeter) 
–page-offset* 设置起始页码 (default 1) 
–page-size 设置纸张大小: A4, Letter, etc. 
–page-width 页面宽度 (default unit millimeter) 
–password HTTP验证密码 
–post Add an additional post field (repeatable) 
–post-file Post an aditional file (repeatable) 
–print-media-type* 使用的打印介质类型,而不是屏幕 
–proxy 使用代理 
–quiet Be less verbose 
–read-args-from-stdin 读取标准输入的命令行参数 
–readme 输出程序自述 
–redirect-delay 等待几毫秒为JS-重定向(default 200) 
–replace* 替换名称,值的页眉和页脚(可重复) 
–stop-slow-scripts 停止运行缓慢的JavaScripts 
–title 生成的PDF文件的标题(第一个文档的标题使用,如果没有指定) 
–toc* 插入的内容的表中的文件的开头 
–use-xserver* 使用X服务器(一些插件和其他的东西没有X11可能无法正常工作) 
–user-style-sheet 指定用户的样式表,加载在每一页中 
–username HTTP认证的用户名 
–version 输出版本信息退出 
–zoom 使用这个缩放因子 (default 1)页眉和页脚选项 
–header-center* (设置在中心位置的页眉内容) 
–header-font-name* (default Arial) (设置页眉的字体名称) 
–header-font-size* (设置页眉的字体大小) 
–header-html* (添加一个HTML页眉,后面是网址) 
–header-left* (左对齐的页眉文本) 
–header-line* (显示一条线在页眉下) 
–header-right* (右对齐页眉文本) 
–header-spacing* (设置页眉和内容的距离,默认0) 
–footer-center* (设置在中心位置的页脚内容) 
–footer-font-name* (设置页脚的字体名称) 
–footer-font-size* (设置页脚的字体大小default 11) 
–footer-html* (添加一个HTML页脚,后面是网址) 
–footer-left* (左对齐的页脚文本) 
–footer-line* 显示一条线在页脚内容上) 
–footer-right* (右对齐页脚文本) 
–footer-spacing* (设置页脚和内容的距离) 
./wkhtmltopdf –footer-right ‘[page]/[topage]’ http://www.baidu.com baidu.pdf 
./wkhtmltopdf –header-center ‘报表’ –header-line –margin-top 2cm –header-line http://192.168.212.139/oma/ oma.pdf 
表内容选项中 
–toc-depth* Set the depth of the toc (default 3) 
–toc-disable-back-links* Do not link from section header to toc 
–toc-disable-links* Do not link from toc to sections 
–toc-font-name* Set the font used for the toc (default Arial) 
–toc-header-font-name* The font of the toc header (if unset use –toc-font-name) 
–toc-header-font-size* The font size of the toc header (default 15) 
–toc-header-text* The header text of the toc (default Table Of Contents) 
–toc-l1-font-size* Set the font size on level 1 of the toc (default 12) 
–toc-l1-indentation* Set indentation on level 1 of the toc (default 0) 
–toc-l2-font-size* Set the font size on level 2 of the toc (default 10) 
–toc-l2-indentation* Set indentation on level 2 of the toc (default 20) 
–toc-l3-font-size* Set the font size on level 3 of the toc (default 8) 
–toc-l3-indentation* Set indentation on level 3 of the toc (default 40) 
–toc-l4-font-size* Set the font size on level 4 of the toc (default 6) 
–toc-l4-indentation* Set indentation on level 4 of the toc (default 60) 
–toc-l5-font-size* Set the font size on level 5 of the toc (default 4) 
–toc-l5-indentation* Set indentation on level 5 of the toc (default 80) 
–toc-l6-font-size* Set the font size on level 6 of the toc (default 2) 
–toc-l6-indentation* Set indentation on level 6 of the toc (default 100) 
–toc-l7-font-size* Set the font size on level 7 of the toc (default 0) 
–toc-l7-indentation* Set indentation on level 7 of the toc (default 120) 
–toc-no-dots* Do not use dots, in the toc 
轮廓选项 
–dump-outline 转储目录到一个文件 
–outline 显示目录(文章中h1,h2来定) 
–outline-depth 设置目录的深度(默认为4) 
页脚和页眉 
* [page] 由当前正在打印的页的数目代替 
* [frompage] 由要打印的第一页的数量取代 
* [topage] 由最后一页要打印的数量取代 
* [webpage] 通过正在打印的页面的URL替换 
* [section] 由当前节的名称替换 
* [subsection] 由当前小节的名称替换 
* [date] 由当前日期系统的本地格式取代 
* [time] 由当前时间,系统的本地格式取代 

4、示例项目

首先使用IDEA新建一个java空项目,可以使用maven管理依赖包

导入依赖

https://mvnrepository.com/artifact/io.woo/htmltopdf/1.0.8

maven方式

<!-- https://mvnrepository.com/artifact/io.woo/htmltopdf -->
<dependency>
    <groupId>io.woo</groupId>
    <artifactId>htmltopdf</artifactId>
    <version>1.0.8</version>
</dependency>

gradle方式


// https://mvnrepository.com/artifact/io.woo/htmltopdf
implementation group: 'io.woo', name: 'htmltopdf', version: '1.0.8'

新建PdfDemo.java 文件

import io.woo.htmltopdf.HtmlToPdf;
import io.woo.htmltopdf.HtmlToPdfObject;public class PdfDemo {
    public static void main(String[] args) {
        urlToPdf();
    }    /**
     * 根据Html转换为pdf文件 支持多个str
     */
    private static void htmlToPdf()
    {
        String str=" <div id=\"view\" align=\"center\">\n" +
                "        <h1>Html To PDf 测试</h1>\n" +
                "        <h3>支持文字图片表格</h3>\n" +
                "\t\t<img src=\"https://img-blog.csdnimg.cn/img_convert/064a1b73f27a517f2cd69602d7848d7e.jpeg\" alt=\"\"/> \n" +
                "    </div>";        String str2=" <ul style=\"font-size:18px;color:red;list-style:none;\">\n" +
                "\t<li>苏州</li>\n" +
                "\t<li>南京</li>\n" +
                "\t<li>无锡</li>\n" +
                "</ul>\n" +
                "<br />\n" +
                "<table border=\"1\" style=\"align:center;\">\n" +
                "\t<tr>\n" +
                "\t\t<th>学科</th>\n" +
                "\t\t<th>成绩</th>\n" +
                "\t</tr>\n" +
                "\t<tr>\n" +
                "\t\t<td>数学</td>\n" +
                "\t\t<td>100</td>\n" +
                "\t</tr>\n" +
                "\t<tr>\n" +
                "\t\t<td>语文</td>\n" +
                "\t\t<td>93</td>\n" +
                "\t</tr>\n" +
                "\t<tr>\n" +
                "\t\t<td>物理</td>\n" +
                "\t\t<td>80</td>\n" +
                "\t</tr>\n" +
                "</table>";
        HtmlToPdf.create().object(HtmlToPdfObject.forHtml(str).defaultEncoding("utf8"))
                .object(HtmlToPdfObject.forHtml(str2).defaultEncoding("utf8")).convert("D:\\Test\\htmltest.pdf");
    }    /**
     * 根据url转换为pdf文件 支持多个url html和url可以混合使用
     */
    private static  void urlToPdf()
    {
        HtmlToPdf.create()
                .object(HtmlToPdfObject.forUrl("https://blog.51cto.com/itShareArea/6182341"))
                .object(HtmlToPdfObject.forUrl("https://blog.51cto.com/itShareArea/6179253"))
                .convert("D:\\Test\\url-html.pdf");
    }}

注意事项

  • 针对html导出pdf注意增加默认编码为 utf8,这样可以避免中文乱码的情况
  • 可以针对pdf设置样式(字体、页面、边距等等),大家可以可以参考参数设置进行调整

5、预览效果

通过url方式生成pdf预览效果如下

大家如果使用过程中遇到问题可以互相沟通交流!

相关文章:

Java后端:html转pdf实战笔记

目录 1、htmltopdf有什么用&#xff1f; 2、什么是wkhtmltopdf 3、wkhtmltopdf 参数介绍 4、示例项目 5、预览效果 1、htmltopdf有什么用&#xff1f; htmltopdf 是一款基于wkhtmltopdf技术的html转pdf文档java类库&#xff0c;支持html转pdf和url转pdf。 2、什么是wkhtmltopdf…...

设计模式-适配器模式

适配器模式 文章目录 适配器模式1、什么是适配器模式2、为什么要用适配器模式2.1、封装有缺陷的接口设计2.2、统一多个类的接口设计2.3、替换依赖的外部系统2.4、兼容老版本接口2.5、适配不同格式的数据 3、如何使用适配器模式1、类适配器2、对象适配器 总结 1、什么是适配器模…...

一款支持全文检索、工作流审批、知识图谱的企事业知识库

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 获取方式q:262086839 为什么建立知识库平台&…...

SAP MRP例外信息解释

SAP中MRP的例外信息&#xff0c;一共分为八类&#xff0c;下面是所有例外信息的解释 第一类&#xff1a; 69&#xff1a;BOM组件可能是递归的&#xff0c;即自己的子集中包括了自己。 02&#xff1a;订单创建日期在过去&#xff0c;可能是没有及时处理&#xff0c;这个建议表…...

广义的S变换

广义的S变换 S变换中窗函数是高斯函数 1 2 π σ e − 1 2 σ t 2 \frac{1}{{\sqrt {2\pi } \sigma }}{e^{ - \frac{1}{{2\sigma }}{t^2}}} 2π ​σ1​e−2σ1​t2&#xff0c;它的形状由方差 σ 1 f \sigma\frac{1}{f} σf1​控制。许多研究表明&#xff0c;S变换中窗函数的…...

python异常及其捕获

文章目录 异常的捕获异常是可传递的 异常的捕获 1.为什么要捕获异常? 在可能发生异常的地方&#xff0c;进行捕获。当异常出现的时候&#xff0c;提供解决方式&#xff0c;而不是任由其导致程序无法运行。 2.捕获异常的语法? try: 可能要发生异常的语句 except 异常名 as 别…...

mysql实现存在则保存,不存在则更新

方式1 ON DUPLICATE KEY UPDATE 使用前提&#xff1a;表必须配置唯一键或者主键&#xff0c;且保存的字段中包含该键【重点】 原理&#xff1a; ON DUPLICATE KEY UPDATE如果配合主键&#xff0c;存在数据a&#xff0c;新插入b&#xff0c;如果主键不冲突&#xff0c;会保存b…...

MCU固件升级系列1(STM32)

本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍&#xff0c;硬件选用STM32F407ZGT6&#xff08;手里只有&#xff09;&#xff0c;来完成这系列教程。 前言 为什么需要固件升级: 功能更新&#xff1a;随着产品的迭代和用户需求的变化&#xff0c;可能需要…...

ImageJ 用户手册——第五部分(菜单命令Window)

. 菜单命令32. Window32.1 Show All32.2 Put Behind32.3 Cascade32.4 Tile 33. Help33.1 ImageJ Website33.2 ImageJ News33.3 Documentation33.4 Installation33.5 Mailing List33.6 Dev. Resources33.7 Plugins33.8 Macros33.9 Macro Functions33.10 Update ImageJ33.11 Refr…...

利用css实现视差滚动和抖动效果

背景&#xff1a; 前端的设计效果&#xff0c;越来越炫酷&#xff0c;而这些炫酷的效果&#xff0c;利用css3的动画效果和js就可以实现&#xff0c;简单的代码就能实现非常炫酷的效果。 原理&#xff1a; 利用 js监控scrollTop的位置&#xff0c;通过 top定位图片的位置&#x…...

以桨为楫 修己度人(一)

目录 1.人工智能开创的新时代 2.使命开启飞桨一春独占 3.技术突破奠定飞桨品牌一骑绝尘 4.行业应用积淀飞桨品牌一枝独秀 5.生态传播造就飞桨品牌一众独妍 6.深度学习平台的现状和未来思考 7月28日&#xff0c;2022全球数字经济大会“人工智能驱动未来产业论坛”在京召开&…...

网络编程之简单socket通信

一.什么是Socket? Socket&#xff0c;又叫套接字&#xff0c;是在应用层和传输层的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。 socket分为流socket和数据报socket&#xff0c;分别基于tcp和udp实现。 SOCK_STREAM 有以下…...

计算机图形辐照度学、光度学

文章目录 前言&#xff1a;一、什么是辐照度学二、什么是光度学 前言&#xff1a; 在计算机图形学中是把辐射(Radiance)等概念和亮度(Luminance)等概念不做区分的。辐射是辐照度学的概念&#xff0c;而亮度则是光度学上的概念。 辐照强高度并不意味着亮度就强&#xff0c;就比如…...

【无功功率控制】连接到无限电网的小型风电场的无功功率控制(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

使用pandas、xlrd、openpyxl读取Excel

首先创建一个示例Excel文件example.xlsx&#xff0c;其中包含以下数据&#xff1a; NameAgeGenderAlice28FemaleBob35MaleCharlie42MaleDave29MaleEve31Female 安装 pip install pandas pip install xlrd pip install openpyxl方法一&#xff1a;使用Pandas库 使用Pandas库来…...

Java面试题接口

Collection接口 List接口 迭代器 Iterator 是什么&#xff1f; Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭 代器实例。迭代器取代了 Java 集合框架中的 Enumeration&#xff0c;迭代器允许调用者在迭代过程中移…...

内存取证小练习-基础训练

这是题目和wolatility2.6的链接 链接&#xff1a;https://pan.baidu.com/s/1wNYJOjLoXMKqbGgpKOE2tg?pwdybww 提取码&#xff1a;ybww --来自百度网盘超级会员V4的分享 压缩包很小&#xff0c;题目也比较简单基础&#xff0c;可以供入门使用 1&#xff1a;Which volatility…...

【Android -- 开源库】数据库 Realm 的基本使用

简介 Realm 是一个 MVCC &#xff08;多版本并发控制&#xff09;数据库&#xff0c;由Y Combinator公司在2014年7月发布一款支持运行在手机、平板和可穿戴设备上的嵌入式数据库&#xff0c;目标是取代 SQLite。Realm 本质上是一个嵌入式数据库&#xff0c;他并不是基于 SQLit…...

基于el-input的数字范围输入框

数字范围组件 在做筛选时可能会出现数字范围的筛选&#xff0c;例如&#xff1a;价格、面积&#xff0c;但是elementUI本身没有自带的数字范围组件&#xff0c;于是进行了简单的封装&#xff0c;不足可自行进行优化 满足功能&#xff1a; 最小值与最大值的相关约束&#xff0…...

车联网OTA安全实践

摘要&#xff1a; 近年来&#xff0c;智能汽车已成为全球汽车产业发展的战略方向&#xff0c;汽车技术与工程核心逐渐从传统硬件层面转移到软件层面&#xff0c;汽车行业已经踏上了软件定义汽车&#xff08;SDV&#xff09;的变革之路。 在SDV的大趋势下&#xff0c;汽车零部件…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...