使用itext将HTML 生成PDF文件

1、使用itext将HTML模板生成PDF文件

HTML模板注意事项:

  • 所有标签按语法正确闭合,否则会报错
  • table用border设置表格
  • 如果下载到空白文件,看看整体XML的宽度
  • width使用%来设置,itext解析%

2、项目需求


1.实现将html 内容(含中文) 生成pdf
2.将现有的png格式图片 合入 pdf 中的特定位置
3.将base64 编码的图腾 合入 pdf 中的特定位置 

3、实现效果

4、实现功能

1.所需jar 包


        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.11</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

2.代码功能实现

package com.sinosoft.cloudclaim.utils;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.sinosoft.cloudclaim.investigation.utility.Base64;

import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.charset.Charset;

/**
 * @Description:
 * @author: YaoGX
 * @version: 1.0.0
 * @createTime: 2021/7/27 19:46
 */
public class HtmlToPDF {

    private static final String FONT = "D:\\simhei.ttf";


    public static void main(String[] args) {
        new HtmlToPDF().createPdf();
    }

    /*
     * 生成PDF
     * */
    public void createPdf() {
        try {
//            BaseFont bfChinese = BaseFont.createFont();
            //直接引用 下载好的字体文件
//            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            BaseFont bfChinese = BaseFont.createFont("D:\\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font font = new Font(bfChinese, 12, Font.NORMAL);

            Document document = new Document(PageSize.A4, 10, 10, 10, 10);
            PdfWriter mPdfWriter = PdfWriter.getInstance(document, new FileOutputStream("D://htmltest.pdf"));
            document.open();

            document.add(new Paragraph("创建pdf文件.支持中文......创建pdf文件.支持中文创建pdf文件. 支持中文创建pdf文件. 支持中文创建pdf文件. 支持中文创建pdf文件. 支持中文", font));

            String s = getHtml();//html 标签内容
            ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
            XMLWorkerHelper.getInstance().parseXHtml(mPdfWriter, document, is, Charset.forName("UTF-8"), new AsianFontProvider());

            //将图片合成pdf
            Image image = Image.getInstance("D:\\data\\01.jpg");

            image.scalePercent(10);// 控制图片大小
            image.setAbsolutePosition(200, 500);
            document.add(image);

            //base64 编码的图片类型
            Image image2 = Image.getInstance(Base64.decode(TESTEVSCHOP));

            image2.scalePercent(20);// 控制图片大小
            image2.setAbsolutePosition(400, 500);
            document.add(image2);


            document.close();
            mPdfWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *  HTML 脚本
     * @author: YaoGX
     * @Date: 2021/7/28 0:39
     */
    public static String getHtml() {

        StringBuffer html = new StringBuffer();
        html.append("<div style='color:green;font-size:20px;'>你好世界!hello world !</div>");
        html.append("<span style='color:red'>what are you 弄啥咧!</span>");
        html.append("<h1>标题</h1>");
        html.append("<table>");
        html.append("<tr>");
        html.append("<th>序号</th>");
        html.append("<th>用户名</th>");
        html.append("<th>性别</th>");
        html.append("</tr>");
        html.append("<tr>");
        html.append("<td>1</td>");
        html.append("<td>fengxing</td>");
        html.append("<td>男</td>");
        html.append("</tr>");
        html.append("<tr>");
        html.append("<td>2</td>");
        html.append("<td>admin</td>");
        html.append("<td>女</td>");
        html.append("</tr>");


        html.append("</table>");
        return html.toString();

    }

    /**
     * 
     * @author:
     * @Date: 2021/7/28 0:39
     */
    public static final String TESTEVSCHOP = "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAQMAAADaX5RTAAAAA3NCSVQICAjb4U/gAAAABlBMVEX///+ZmZmOUEqyAAAAAnRSTlMA/1uRIrUAAAAJcEhZcwAACusAAArrAYKLDVoAAAAWdEVYdENyZWF0aW9uIFRpbWUAMDkvMjAvMTIGkKG+AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAAB1JREFUCJljONjA8LiBoZyBwY6BQQZMAtlAkYMNAF1fBs/zPvcnAAAAAElFTkSuQmCC";


}

 3. 样式渲染类

package com.sinosoft.cloudclaim.utils;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;

public class AsianFontProvider 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 bfChinese = null;
        try {
            bfChinese = BaseFont.createFont("D:\\simhei.ttf", BaseFont.IDENTITY_H,  BaseFont.NOT_EMBEDDED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Font font = new Font(bfChinese, size, style, color);
        font.setColor(color);
        return font;
    }
}

 

5、需要在本地存放 字体 文件,本例使用的是 黑体字。

 

若对你有所帮助,请评论或点赞!

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
iText是一个用于生成PDF文档的开源Java库,它提供了丰富的API和功能,可以通过编程方式创建、编辑和操作PDF文档。iText可以将HTML转换为PDF,以便在应用程序中生成具有复杂布局和样式的PDF文档。 要使用iTextHTML转换为PDF,你需要遵循以下步骤: 1. 导入iText库:首先,你需要将iText库添加到你的Java项目中。你可以从iText官方网站下载最新版本的库文件,并将其添加到你的项目依赖中。 2. 创建PDF文档对象:使用iText库中的PdfDocument类创建一个新的PDF文档对象。 3. 创建HTML解析器:使用iText库中的HtmlConverter类创建一个HTML解析器对象。 4. 将HTML转换为PDF使用HTML解析器对象的convertToPdf()方法,将HTML内容转换为PDF格式,并将其添加到PDF文档对象中。 5. 保存PDF文档:使用PDF文档对象的close()方法保存并关闭PDF文档。 下面是一个简单的示例代码,演示了如何使用iTextHTML转换为PDF: ```java import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; public class HtmlToPdfConverter { public static void main(String[] args) { // 创建PDF文档对象 PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf")); try { // 创建HTML解析器 HtmlConverter.convertToPdf("<html><body><h1>Hello, iText!</h1></body></html>", pdfDoc); // 保存PDF文档 pdfDoc.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 这是一个简单的示例,将一个包含标题的HTML转换为PDF,并将其保存为名为"output.pdf"的文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值