Java使用itext实现html转pdf文件(可以中文)

Maven依赖

 		 <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.4.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.12</version>
        </dependency>

代码
Itext5HtmlToPDF

import cn.hutool.core.io.file.FileReader;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import org.springframework.util.ResourceUtils;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.charset.Charset;


public class Itext5HtmlToPDF {
    public static void main(String[] args) throws Exception {
        //第一步,创建一个 iTextSharp.text.Document对象的实例:
        Document document = new Document();
        //第二步,为该Document创建一个Writer实例:
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:\\test\\HelloWorld2.pdf"));
        //第三步,打开当前Document
        document.open();
        //第四步,为当前Document添加内容:

        // 4.1 该为加载html文件字符串生成pdf方式
        File file2 = ResourceUtils.getFile("D:\\test\\HelloWorld.html");
        String s = FileReader.create(file2).readString();

        ByteArrayInputStream fis = new ByteArrayInputStream(s.getBytes());

        // 4.2 该为加载html文件生成pdf方式
        //FileInputStream fis = new FileInputStream("D:\\test\\HelloWorld.html");
        XMLWorkerHelper.getInstance().parseXHtml(writer, document,fis ,null, Charset.defaultCharset(),new FontProviderUtil());
        //第五步,关闭Document
        document.close();
        System.out.println("OK!");

    }
}

FontProviderUtil 解决中文

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
//这里重写字体
public class FontProviderUtil extends XMLWorkerFontProvider {
    @Override
    public Font getFont(final String fontname, final String encoding,
                        final boolean embedded, final float size, final int style,
                        final BaseColor color) {
        BaseFont bf = null;
        try {
            bf = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Font font = new Font(bf, size, style, color);
        font.setColor(color);
        return font;
    }
}

HelloWorld.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8"/>
	<title>Insert title here</title>
	<style>
		h2{
			color: red;
		}
	</style>
	</head>
	<body>
		<h1>中文测试</h1>


		<h2>css测试!</h2>


		<h1>表格测试</h1>
		<table border="1">
			<tr>
			  <th>姓名</th>
			  <th>年龄</th>
			</tr>
			<tr>
			  <td>张三</td>
			  <td>11</td>
			</tr>
			<tr>
				<td>李四</td>
				<td>12</td>
			  </tr>
		  </table>
		  <h1>图片测试</h1>
		  <img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width="300px" height="200px" />

		  <h1>JS测试</h1>
		  <span id="sss">修改之前的内容</span>

		 <div>
			<h1>PDF分页测试</h1>
		 </div>
		 <div>
			<h1>PDF分页测试</h1>
		 </div>
		  <div>
			<h1>PDF分页测试</h1>
		 </div>
		  <div>
			<h1>PDF分页测试</h1>
		 </div>
		  <div>
			<h1>PDF分页测试</h1>
		 </div>
		  <div>
			<h1>PDF分页测试</h1>
		 </div>
	</body>
	<script>
			document.getElementById("sss").innerText="修改之后的内容";
	</script>
</html>

效果
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值