ITEXT HTML CONVERT PDF

POM

        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>kernel</artifactId>
            <version>7.1.14</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>3.0.3</version>
        </dependency>

PdfUtil

import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.io.font.FontProgram;
import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.kernel.counter.event.IMetaInfo;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.DocumentProperties;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.font.FontProvider;
import com.itextpdf.layout.property.TextAlignment;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * PDF 工具
 */
public final class PdfUtil {

    private static class HtmlMetaInfo implements IMetaInfo {
        private static final long serialVersionUID = -295587336698550627L;
    }
    private static ConverterProperties converter_properties;
    /**
     * 转换配置
     * @return
     * @throws Exception
     */
    private static ConverterProperties get_converter_properties() throws Exception {
        if (null != converter_properties){
            return converter_properties;
        }
        FontProgram font_song = FontProgramFactory.createFont("/opt/font/SIMSUN.TTC,0");
        FontProgram font_song_blod = FontProgramFactory.createFont("/opt/font/SIMSUN_BLOD.OTF");
        FontProvider fontProvider = new DefaultFontProvider();
        fontProvider.addFont(font_song);
        fontProvider.addFont(font_song_blod);
        ConverterProperties converter_properties = new ConverterProperties();
        converter_properties.setFontProvider(fontProvider);
        converter_properties.setCharset("UTF-8");
        PdfUtil.converter_properties = converter_properties;
        return converter_properties;
    }

    /**
     * 返回PDF文件 BYTE
     * @param html_str
     * @return
     * @throws Exception
     */
    public static byte[] html_to_pdf(String html_str) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter pdf_writer = new PdfWriter(baos);
        DocumentProperties doc_properties = new DocumentProperties()
                .setEventCountingMetaInfo(new HtmlMetaInfo());
        PdfDocument pdf_doc = new PdfDocument(pdf_writer,doc_properties);
        Document doc = HtmlConverter.convertToDocument(html_str, pdf_doc, get_converter_properties());
        flag_pdf_index(pdf_doc);
        doc.close();
        return baos.toByteArray();
    }

    /**
     * 转换后保存到指定位置 不做文件目录创建
     * @param html_str
     * @param save_path
     * @throws Exception
     */
    public static void html_to_pdf(String html_str,String save_path) throws Exception {
        OutputStream out = new FileOutputStream(save_path);
        out.write(html_to_pdf(html_str));
        out.flush();
        out.close();
    }


    /**
     * 标记页码
     * @param pdf_doc
     */
     private static void flag_pdf_index(PdfDocument pdf_doc){
        int num = pdf_doc.getNumberOfPages();
        int index = 1;
        PdfFont font = pdf_doc.getDefaultFont();
        PdfPage page = null;
        Rectangle page_size = null;
        PdfCanvas pdf_canvas = null;
        Canvas canvas = null;
        Paragraph p = null;
        float x = 0;
        float y = 0;
        while (index <= num){
            page = pdf_doc.getPage(index);
            page_size = page.getPageSize();
            pdf_canvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), pdf_doc);
            canvas = new Canvas(pdf_canvas, page_size);
            p = new Paragraph().add(index + " / " + num)
                    .setFont(font)
                    .setFontSize(8)
                    .setMarginTop(10f);
            x = (page_size.getLeft() + page_size.getRight()) / 2;
            y = page_size.getBottom() + 15;
            canvas.showTextAligned(p, x, y,TextAlignment.CENTER);
            pdf_canvas.release();
            index++;
        }
    }
}

test


@Test
public void t2() throws Exception {
	String html = "<h1>O(∩_∩)O哈哈~</h1>";
	String path = "/opt/test.pdf";
	PdfUtil.html_to_pdf(html,path);
}

linux 需要上传文件字体文件支持中文(宋体),上传到 /opt/font

字体文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值