html 模版转 pdf

1:jar包

<dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.8</version>
        </dependency>

2:测试类

 

package test;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
public class Tes {
    
    public static String htmlFile = "D:\\tmp\\q\\template.html";
    public static String  pdfFile = "D:\\tmp\\q\\template.pdf";
    
    
    
    public void before() {
        File pdf = new File(pdfFile);
        if(pdf.exists()) 
            pdf.delete();
    }
    
    //public void htmp2pdf(){
    public static void main(String[] args) {
         Document document = null;
         PdfWriter pdfWriter = null;
        try {
            document = new Document(PageSize.A4);
            pdfWriter = PdfWriter.getInstance(document,
                     new FileOutputStream(pdfFile));
            document.open();
            
            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
            //读取模板文件并且写入String中
            InputStream in = new FileInputStream(htmlFile);
            InputStreamReader isr = new InputStreamReader(in, "utf-8");
            BufferedReader brd = new BufferedReader(isr);
            StringBuffer sbf = new StringBuffer();
            String line = "";
            while((line=brd.readLine())!=null) {
                sbf.append(line);
            }
            String htmlTemplete = sbf.toString();
            //此处替换特定字符或者拼接html代码的处理
            //平台收费说明
            htmlTemplete = htmlTemplete.replaceAll("###NAME###", "工会");
            htmlTemplete = htmlTemplete.replaceAll("###YEARS###", "2019");
            htmlTemplete = htmlTemplete.replaceAll("###ACTIVITY_NAME###", "额度发放内测0914");
            htmlTemplete = htmlTemplete.replaceAll("###CONSUMPTION_AMOUNT###", "500");
            htmlTemplete = htmlTemplete.replaceAll("###POUNDAGE_AMOUNT###", "12.5");
            htmlTemplete = htmlTemplete.replaceAll("###YYYYMMDD###", "2019年9月5日");
           
            
            //AmountConvertUtil.amount2CNYUnit(new BigDecimal(paymentAmount));
            //模板不支持svg格式图片
            worker.parseXHtml(pdfWriter, document, new ByteArrayInputStream(htmlTemplete.getBytes("UTF-8")), Charset.forName("utf8"), new AsianFontProvider());
            
            System.out.println("complete");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(document!=null)
                //如果不关闭则会生成空的破损的pdf
            document.close();
        }
    }
    
    /*public static void main(String[] args) {
        String q = "512.62";
        BigDecimal bds=new BigDecimal("0.025");
        BigDecimal bd=new BigDecimal(q);
        System.out.println(bd);
        BigDecimal multiply = bd.multiply(bds);
        System.out.println(multiply);

        DecimalFormat df = new DecimalFormat("0.00"); 

        //手续费
        String result = df.format(multiply);
        
        System.out.println(result);
    }*/
}

 

3:引用

 

package com.unicom.groupmall.manager.util;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;

public class AsianFontProvider extends XMLWorkerFontProvider {/*
    public AsianFontProvider(){
        super(null, null);
    }

    @Override
    public Font getFont(final String fontname, String encoding, float size, final int style) {
        String fntname = fontname;
        if (fntname == null) {
            fntname = "/app/gmfront/groupmall2.0/groupmall-manager/simkai.ttf";
            //fntname = "宋体";
        }
        if (size == 0) {
            size = 1;
        }
        return super.getFont(fntname, encoding, size, style);
    }
*/
    @Override
    public Font getFont(final String fontname, String encoding, float size, final int style) {
        try {
            BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            return new Font(bfChinese, size, style);
        } catch (Exception e) {
        }
        return super.getFont(fontname, encoding, size, style);
    }
}

4:模版    template.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>说明函</title>

        <style type="text/css">
            
            p {letter-spacing: 3px}
            p.big {line-height: 200%}
            p {font-size: 14pt}
            p.pt {font-size: 15pt}
        </style>
        
    </head>
    <body>
        <div class="text" style=" text-align:center;">
            <font face="宋体">
                <h4><p class="pt">说明函</p></h4>
            </font>
        </div>
        
        <div>
            <font face="宋体"><u><p><br/>###NAME###:<br/><br/></p></u></font>
            <font face="宋体">
                <p class="big">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;自2017年以来,安达市自2017年以来,安达市自2017年以来,安达市自2017年以来,安达市自2017年以来,安达市自2017年以来,安达市
                </P>
            </font>
            <br/>
            <font face="宋体">
                <p class="big">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安达市自2017年以来安达市自2017年以来安达市自2017年以来安达市自2017年以来安达市自2017年以来安达市自2017年以来安达市自2017年以来
                </P>
            </font>
            <br/>
            <font face="宋体">
                <p class="big">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在###ACTIVITY_NAME###中,<u><p>###NAME###</p></u>安达市自2017年以来<u><p>###CONSUMPTION_AMOUNT###元</p></u>。安达市自2017年以来安达市自2017年以来安达市自2017年以来=<u><p>###NAME###</p></u>安达市自2017年以来*费率(2.5%)。因此,本次信息技术服务费金额为<u><p>###CONSUMPTION_AMOUNT###</p></u>元*2.5%=<u><p>###POUNDAGE_AMOUNT###元</p></u>。
                </P>
            </font>
            <br/>
            <font face="宋体">
                <h4><p class="big"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;收款账户信息:<br/></p></h4>
                <p class="big">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安达市自2017年以来<br/></p>
                <p class="big">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安达市自2017年以来<br/></p>
                <p class="big">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安达市自2017年以来<br/><br/><br/></p>
            </font>
            
        </div>
        <div class="text" style=" text-align:right;">
            <p class="big">安达市自2017年以来</p>
            <p>###YYYYMMDD###</p>
        </div>
       
     </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值