java完美实现html转pdf

硅谷探秘者 6054 0 0

java完美实现html转pdf

1.pom依赖:

<dependency>  
                <groupId>com.itextpdf</groupId>  
                <artifactId>itextpdf</artifactId>  
                <version>5.5.9</version>
            </dependency>  
              
             <dependency>  
                <groupId>com.itextpdf.tool</groupId>  
                <artifactId>xmlworker</artifactId>  
                <version>5.5.9</version>
            </dependency>  
                       
            <dependency>  
                <groupId>com.itextpdf</groupId>  
                <artifactId>itext-asian</artifactId>  
                <version>5.2.0</version>
            </dependency>  
			
		<dependency>
		    <groupId>org.xhtmlrenderer</groupId>
		    <artifactId>flying-saucer-pdf-itext5</artifactId>
		    <version>9.0.3</version>
		</dependency>


2.工具类代码:

package club.jiajiajia.test;
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class FileTypeConvertUtil {
    /**
     * 将HTML转成PD格式的文件。html文件的格式比较严格
     * @throws Exception
     */
    public static void html2pdf(String htmlFile, String pdfFile) throws Exception {
        String url = new File(htmlFile).toURI().toURL().toString();
        OutputStream os = new FileOutputStream(pdfFile);
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(url);
        ITextFontResolver fontResolver = renderer.getFontResolver();
        if("linux".equals(getCurrentOperatingSystem())){
            fontResolver.addFont("simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        }else{
            fontResolver.addFont("simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        }
        renderer.getSharedContext().setBaseURL("file:/E:/test/m/");//本地文件
        //renderer.getSharedContext().setBaseURL("http://photo.jiajiajia.club/img/photo/");//网络文件
        renderer.layout();
        renderer.createPDF(os);
        os.close();
        System.out.println("create pdf done!!");
    }
    public static String getCurrentOperatingSystem(){
        String os = System.getProperty("os.name").toLowerCase();
        return os;
    }
    public static void main(String[] args) {
        String htmlFile = "E:\\test\\m\\a.html";
        String pdfFile = "E:\\test\\m\\a.pdf";
        try {
            FileTypeConvertUtil.html2pdf(htmlFile, pdfFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


3.html测试文件

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
</head>
<body  style = "font-family: SimSun;">
	sdfsdf dfgdfg asfdfgdfg<br></br>sfsdf是否
	<div style="width:100px;height:200px; word-wrap:break-word;">
	深刻的方式的发挥砍杀事件的雷锋精神动力
	风机收到了客户发送了的回复路上看到回复
	</div>
	<table border="1">
	  <tr>
		<th>Month</th>
		<th>Savings</th>
	  </tr>
	  <tr>
		<td>January</td>
		<td>$100</td>
	  </tr>
	</table>
	<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>
</body>
</html>

4.测试结果:

menu.saveimg.savepath20190314200332.jpg


5.注意点:

1.simsun.ttc文件可以到百度上下载,后期本站将会提供下载功能

2.设置图片路径:

    本地图片

renderer.getSharedContext().setBaseURL("file:/E:/test/m/");

    在html文件中使用相对路径:

<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>

    

    如果是网络上的图片则设置:

renderer.getSharedContext().setBaseURL("http://photo.jiajiajia.club/img/photo/")

    在html文件中使用相对路径

<img src="b2d9a10e-94c3-4b76-a8ec-52c3fc92a694.png"/>

3.div的文字换行

    在生成的pdf中,默认不会换行;实现换行在div的style中加入 word-wrap:break-word;

<div style="width:100px;height:200px; word-wrap:break-word;">

4.在转换pdf的时候对html文件的格式要求比较严格,标签必需有结束标签,否则将会报一系列错误

    例如:换行只有一个<br>标签

    则会报异常:

ERROR:  '元素类型 "br" 必须由匹配的结束标记 "</br>" 终止。'

    而<br></br>则不会报异常




评论区
请写下您的评论...
暂无评论...
猜你喜欢
jar依赖 2357 javaworldpdf所需jar包-pdf在线预览一、依赖文件二、java代码packagetest.pdftest;importjava.awt.Color
工具 2729 javawordpdf在线预览(可以带水印)使用之前需要两个jar包的依赖文件下载地址:http://www.jiajiajia.club/file/info/4uwe2d/111Java
其他 1054 Aspose  Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,主要提供.net跟java两个开发语言的控件套包,通过它,可以有计划地操纵一些商业中最流行的文件格
前端(h5) 1636 html纯js图片懒加载html纯js图片懒加载案例代码下载地址:http://www.jiajiajia.club/file/info/JA67P0
java基础 2039 java集合之TreeMap原理TreeMap集合的说简单也简单说复杂也复杂,说简单是因为TreeMap底层全依靠红黑树这个数据结构,相比与HashMap来说TreeMap不用考虑
java基础 2441 关键词URLEncoderURLDecoderescapeencodeURIencodeURIComponentdecodeURIunescapejavaStrings=URLEncoder.encode("这是上岛咖啡你哈卡斯","utf-8");Strings2=URLDecoder.decode("%E8%BF%99%E6%98%AF%E4%B8%8A%E5%B2%9B%E5%92%96%E
html图片懒加载 1291 纯js图片懒加载lazyLoading.html测试页面
数据结构与算法 2530 ; publicNode(intvalue,Nodenext){ super(); this.value=value; this.next=next; }}算法packageclub.test;/***
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。