使用itext7将HTML转为pdf

itext出7版本已经很久了,记得早期itext7刚出来的时候还没有提供升级版的HTML转pdf工具库,今天看的时候itext已经为7版本提供了新的HTML转pdf工具包了,以前itext5时是叫xmlworker,现在itext7里面是html2pdf,很直观。

不得不说itext7真的更简单了好多。以前写过一个简单的itext5的HTML转pdf文章,现在itext7更简单。

首先maven引入,截止这篇文章,当前最新版本为2.0.0:

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

先来一个简单的demo:

public static void main(String[] args) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    FontProvider font = new FontProvider();
    font.addSystemFonts();
    properties.setFontProvider(font);
    File htmlFile = new File("/xx/xx/source.html");
    File outputPdf = new File("/xx/xx/output.pdf");
    HtmlConverter.convertToPdf(htmlFile,outputPdf,properties);
}

是的,就是这么简单。如果你系统有中文字库,那么因为font.addSystemFonts()有这句,所以pdf已经支持了中文。

当然如果你想指定字体,以及有更特殊的需求,如生成页脚等也是可以的:

public static void main(String[] args) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    FontProvider font = new FontProvider();
    font.addFont("/xx/xx/msyh.ttf");//你的字体文件
    properties.setFontProvider(font);
    Optional<FontInfo> fontinfo = font.getFontSet().getFonts().stream().findFirst();

    PdfDocument doc = new PdfDocument(new PdfWriter("/xx/xx/output.pdf"));
    doc.setDefaultPageSize(PageSize.A4.rotate());
    doc.addEventHandler(PdfDocumentEvent.END_PAGE, new IEventHandler() {
        @Override
        public void handleEvent(Event event) {
            PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
            PdfDocument pdf = docEvent.getDocument();
            PdfPage page = docEvent.getPage();
            Rectangle pageSize = page.getPageSize();
            PdfCanvas pdfCanvas = new PdfCanvas(
                    page.getLastContentStream(), page.getResources(), pdf);
            Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);
            float x = (pageSize.getLeft() + pageSize.getRight()) / 2;
            float y = pageSize.getBottom() + 15;
            try {
                Paragraph p =  new Paragraph();
                fontinfo.ifPresent(fontInfo -> p.setFont(font.getPdfFont(fontInfo)));
                p.add("第"+pdf.getPageNumber(page)+"页");
                canvas.showTextAligned(p, x, y, TextAlignment.CENTER);
                canvas.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    HtmlConverter.convertToPdf(new FileInputStream("/xx/xx/source.html"),doc,properties);
}

嗯,没错,就这么简单。而且测试itext7的HTML转pdf支持如css3的圆角等。对HTML的要求也没有itext5那个时候严格了


本文地址:http://darren.ink/archives/166

相关文章:

标签: html, itext, pdf

添加新评论