导出pdf中文无法显示
今天导出pdf的时候遇到的一些问题,比如中文无法显示
需求:要根据一个模板来填充数据之后导出pdf
问题:导出的模板中文展示不了
解决方法如下代码,直接继承了XMLWorkerFontProvider 实现了获取字体的方法实现默认宋体显示:
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontProvider;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import static java.nio.charset.StandardCharsets.UTF_8;
@Component
public class PdfHelper extends XMLWorkerFontProvider implements FontProvider {
//将content生成pdf导入到os中
public void pdf(byte[] content, OutputStream os) throws DocumentException, IOException {
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, os);
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(content), null, UTF_8,
this);
document.close();
}
/** 解决转换pdf的时候,中文无法显示的问题 **/
@Override
public Font getFont(String fontname, String encoding, float size, int style) {
if (fontname == null) {
fontname = "宋体";
}
return super.getFont(fontname, encoding, size, style);
}
}