Java 백엔드: HTML에서 PDF로의 실용 노트

1. htmltopdf의 용도는 무엇입니까?

htmltopdf는 wkhtmltopdf 기술을 기반으로 html을 pdf로 변환하는 자바 라이브러리로, html to pdf와 url to pdf를 지원합니다.

2. wkhtmltopdf란 무엇입니까?

wkhtmltopdf는 html을 pdf로 변환하기 위해 웹킷 웹 페이지 렌더링 엔진으로 개발된 도구입니다.다양한 스크립팅 언어와 통합되어 문서를 변환할 수 있습니다.Windows, Linux 및 기타 플랫폼용 버전이 있습니다.

Wkhtmltopdf는 브라우저에서 열람한 웹 페이지를 직접 pdf로 변환할 수 있습니다.html 페이지를 pdf로 변환하는 소프트웨어입니다(서버에 설치 필요). 사용시 자바 코드를 통해 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

메이븐 웨이

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

그래들 방식


// 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 미리보기는 다음과 같습니다.

사용 중 문제가 발생하면 서로 소통할 수 있습니다!

Supongo que te gusta

Origin blog.csdn.net/xishining/article/details/130452063
Recomendado
Clasificación