使用itext将HTML 生成PDF文件_itext html转pdf_笨笨熊咦的博客-CSDN博客

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、需要在本地存放 字体 文件,本例使用的是 黑体字。

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


原网址: 访问
创建于: 2023-08-08 18:19:41
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论