iText生成pdf中文字体

本文详细介绍了如何使用iText解决PDF中文显示问题,包括直接使用iTextAsian.jar中的中文字体、加载系统字体文件及项目内的字体文件。同时,针对中英文混排时的显示不齐问题,提供了FontSelector的解决方案,确保了文本的正确呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用iText生成pdf时,内容有中文的时候用到中文字体。

直接使用iTextAsian.jar中的字体

BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

或者使用系统字体文件

BaseFont.createFont("C:/WINDOWS/Fonts/simsun.ttc", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

或者把字体文件放到项目使用

BaseFont.createFont("/simsun.ttc", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 

这样就解决了中文不显示的问题,但是使用第一个的时候有一个问题,就是当字符中存在英文的时候看起来不整齐,有的中间会有空格,代码:

Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream("D:/test/test_cn.pdf"));
document.addTitle("中文测试");
document.open();
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(base, 30);
Paragraph p = new Paragraph();
p.setFont(font);
p.add("这是一个段落 hello world");
document.add(p);
Phrase ph = new Phrase("中文测试 My name is Jim Green.", font);
document.add(ph);
document.close();

结果:

这时候可以用到com.itextpdf.text.pdf.FontSelector,根据保存的字体,选择包含正确呈现文本所需的字形的相应字体。 按顺序检查字体,直到找到该字符。

Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream("D:/test/test_cn.pdf"));
document.addTitle("中文测试");
document.open();
FontSelector selector = new FontSelector();
selector.addFont(FontFactory.getFont(FontFactory.TIMES_ROMAN, 30));
selector.addFont(FontFactory.getFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED, 30));
Phrase ph = selector.process("中文测试 My name is Jim Green.");
document.add(ph);
document.close();

结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值