Java backend: html to pdf practical notes

1. What is the use of htmltopdf?

htmltopdf is a java class library for converting html to pdf based on wkhtmltopdf technology, and supports html to pdf and url to pdf.

2. What is wkhtmltopdf

wkhtmltopdf is a tool developed with webkit web page rendering engine to convert html to pdf. It can be integrated with a variety of scripting languages ​​to convert documents. There are versions for windows, linux and other platforms.

Wkhtmltopdf can directly convert the webpage browsed in the browser into a pdf. It is a software that converts html pages into pdf (needs to be installed on the server). When using it, you can call the cmd command through the java code to complete the function of converting the web page to pdf.

3. Wkhtmltopdf parameter introduction

常规选项 
–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. Example project

First use IDEA to create a java empty project, you can use maven to manage dependency packages

import dependencies

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

maven way

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

gradle way


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

Create a new PdfDemo.java file

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");
    }

}

Precautions

  • Pay attention to increase the default encoding to utf8 for exporting pdf from html, so as to avoid Chinese garbled characters
  • You can set the style (font, page, margin, etc.) for pdf, and you can refer to the parameter settings to adjust

5. Preview effect

The pdf preview generated by url is as follows

If you encounter problems during use, you can communicate with each other!

Guess you like

Origin blog.csdn.net/xishining/article/details/130452063