itext转html为pdf遇到的问题

记录一下使用itext将html文件转为pdf文件遇到的一些问题

1、中文不显示

原因:itext默认不支持中文

解决方法:引入中文字体

需要注意的是在java代码中设置好中文字体后,还需要在html引用该字体,否则不会起效果。

 

 

2、css不起作用

原因:css文件使用的是相对路径

解决方法:将相对路径改为绝对路径或者将css写在html文件内部

3、html内容转换为pdf后,内容显示不全

原因:

解决方法:在html文件中设定纸张大小,如A4纸张@page{ size:a4}

 

 

具体请参考以下代码

 

首先在pom.xml文件中引入itext相关jar包

<!--itext-->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>core-renderer</artifactId>
    <version>R8</version>
</dependency>

 

实现将html文件转换为pdf文件代码如下:

package com.lnjecit.util;

import com.lowagie.text.pdf.BaseFont;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.*;
import java.net.MalformedURLException;

/**
 * Pdf处理工具类
 *
 * @author
 * @create 2017-12-18 21:25
 **/
public class PdfUtil {

    protected static Logger logger = LoggerFactory.getLogger(PdfUtil.class);

    /**
     *
     * @param htmlFile html文件存储路径
     * @param pdfFile  生成的pdf文件存储路径
     * @param chineseFontPath 中文字体存储路径
     */
    public static void html2pdf(String htmlFile, String pdfFile, String chineseFontPath)  {
        // step 1
        String url;
        OutputStream os = null;
        try {
            url = new File(htmlFile).toURI().toURL().toString();
            os = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iText 是一个非常流行的 Java PDF 库,它可以用来生成 PDF 文件、PDF 表单等。要将动态 HTML 换为 PDF,可以使用 iTextHTMLWorker 类。HTMLWorker 类可以将 HTML 格式的文本换为 PDF 文档的段落、表格和图片等元素,从而生成 PDF 文件。下面是一个基本的示例代码: ``` import java.io.FileOutputStream; import java.io.StringReader; import com.itextpdf.text.Document; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; public class HtmlToPdfConverter { public static void main(String[] args) { try { // 创建一个 Document 对象 Document document = new Document(PageSize.A4); // 创建一个 PdfWriter 对象 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 打开 Document 对象 document.open(); // 读取 HTML 文件内容 String html = "<html><body><h1>Hello, World!</h1></body></html>"; // 创建一个 StringReader 对象 StringReader reader = new StringReader(html); // 使用 XMLWorkerHelper 类将 HTML 内容换为 PDF 文档 XMLWorkerHelper.getInstance().parseXHtml(writer, document, reader); // 关闭 Document 对象 document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例代码,我们首先创建了一个 Document 对象和一个 PdfWriter 对象,然后打开 Document 对象,读取 HTML 内容,并创建一个 StringReader 对象。接下来,我们使用 XMLWorkerHelper 类的 parseXHtml 方法将 HTML 内容换为 PDF 文档,并将其写入到输出流。最后,我们关闭 Document 对象,生成 PDF 文件。 需要注意的是,iTextHTMLWorker 类只支持 HTML 4.01 规范,对于一些较新的 HTML5 标签可能无法正确解析。如果遇到解析问题,可以尝试使用其他的 HTML 换库,比如 Flying Saucer 或 jsoup 等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值