XMLWorkerHelper生成pdf在windows下正常。但是linux下因为font文件不存在所以中文不显示。
要使用itext-assian jar包。 1.maven中添加
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2.新建一个类,重写父类的getFont方法
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import lombok.extern.slf4j.Slf4j;
/**
* 解决XMLWorkerHelper中文不显示。
* <p>使用iTextAsian.jar中自带的中文字体
*
*/
@Slf4j
public class CustomXMLWorkerFontProvider extends XMLWorkerFontProvider {
@Override
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("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font font = new Font(bf, size, style, color);
font.setColor(color);
// log.info("PDF文档字体初始化完成!");
return font;
} catch (Exception e) {
log.error("exception:", e);
}
return null;
}
}
3.xml转pdf关键代码(具体的代码请到以下博客查看:java生成pdf的方法)
private void convertToPDF(PdfWriter writer, Document document, String htmlString) {
document.open();
try {
XMLWorkerHelper.getInstance().parseXHtml(writer,
document,
new ByteArrayInputStream(htmlString.getBytes()),
XMLWorkerHelper.class.getResourceAsStream("/default.css"),
Charset.forName("UTF-8"),
new CustomXMLWorkerFontProvider());
} catch (IOException e) {
e.printStackTrace();
throw new PDFException("PDF文件生成异常", e);
} finally {
document.close();
}
}
参考文章1:(四)XMLWorkerHelper中文不显示_张小姐~```的博客-CSDN博客
参考文章2:itextpdf使用中文字体的三种方式 - 走看看
参考文章3:itextpdf 中文字体设置_o_瓜田李下_o的博客-CSDN博客_itextpdf设置字体
|