itext pdf转

问题总结

  1. 中文不显示
    解决:主要是ttf文件的问题,如果ttf支持中文就可以。
  2. 纸张大小,宽度不够 参考
    样式问题:
<table border="0" width="100%" columns="3" widths="50;10;40">

代码

HtmlToPDF.java

package com.example.demo.utils;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import java.io.*;
import java.nio.charset.StandardCharsets;

/**
*   @author baitao
*    @date 2018/11/13 10:21
*/
public class HtmlToPDF {
    /**
     * html 转换 pdf
     * @param txt html文件路径
     * @param path pdf文件路径
     * @param name pdf文件名字
     * @param ttf 字体文件
     */
    public static boolean htmlFileToPdf(String txt, String path, String name, String ttf){
        try {
            Document document = new Document(PageSize.A5);
            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(path+"/"+name));
            document.open();
            FileReader reader = new FileReader(txt);
            BufferedReader br = new BufferedReader(reader);
            String temStr = null;
            StringBuilder inputStr = new StringBuilder();
            while ((temStr = br.readLine()) != null) {
             inputStr.append(temStr);
            }
            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
            worker.parseXHtml(pdfWriter, document, new ByteArrayInputStream(inputStr.toString().getBytes()), (InputStream) null, new MyFontProviders(ttf));
            br.close();
            reader.close();
            document.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally {
            System.out.println("转换结束");
        }
    }

    /**
     * html 转换 pdf
     * @param txt html字符串
     * @param path pdf文件路径
     * @param name pdf文件名字
     * @param ttf 字体文件
     */
    public static boolean htmlStrToPdf(String txt, String path, String name, String ttf){
        try {
            Document document = new Document(PageSize.A5);

            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(path+"/"+name));
            document.open();
            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
            worker.parseXHtml(pdfWriter, document, new ByteArrayInputStream(txt.getBytes(StandardCharsets.UTF_8)), (InputStream) null, new MyFontProviders(ttf));
            document.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally {
            System.out.println("转换结束");
        }
    }
}
class MyFontProviders extends XMLWorkerFontProvider {
    private String ttf; //字体文件完整路径

    public MyFontProviders(String ttf) {
        super();
        this.ttf = ttf;
    }

    public Font getFont(final String fontname, final String encoding,
                        final boolean embedded, final float size, final int style,
                        final BaseColor color) {
        BaseFont bf = null;
        try {
            bf = BaseFont.createFont(ttf, BaseFont.IDENTITY_H,
                    BaseFont.NOT_EMBEDDED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Font font = new Font(bf, size, style, color);
        font.setColor(color);
        return font;
    }
}

MainTest.java

package com.example.demo;

import com.example.demo.utils.HtmlToPDF;

public class MainTest {
    public static void main(String[] arts) {
        HtmlToPDF.htmlFileToPdf("D:\\test\\test.html", "D:\\test", "wode.pdf", "D:\\test\\WeiRuanYaHei-1.ttf");
        System.out.printf("test");
    }
}

pom.xml

<dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.13</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值