iText生成pdf中文字体解决方案
2016-07-20 08:46
489 查看
相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接集成中文字体)。
当然这样的问题,早就有高手解决了,那就是使用iTextAsian.jar。
但是本文介绍的,不是使用iTextAsian.jar,而是另一种解决方法。
在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体。比如我们常用的宋体simsun.ttf。
我们首先要做的,就是将simsun.ttf集成到我们的项目中:
测试例子:
生成效果:
其实看看BaseFont的实现,就会发现,iText还支持其他4种字体:
而ttf是我们最常见的字体。
当然这样的问题,早就有高手解决了,那就是使用iTextAsian.jar。
但是本文介绍的,不是使用iTextAsian.jar,而是另一种解决方法。
在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体。比如我们常用的宋体simsun.ttf。
我们首先要做的,就是将simsun.ttf集成到我们的项目中:
测试例子:
package com.example.itext; import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; public class Demo1 { //自定义中文字体位置 private static final String fontPath = "/com/example/itext/simsun.ttf"; private static final String cfontPath = "/com/example/itext/dnmbxs.ttf"; public static void main(String[] args) throws DocumentException, IOException { //创建基础字体 BaseFont bf = BaseFont.createFont(fontPath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED); //自定义字体属性 Font font = new Font(bf,30); Document document = new Document(PageSize.A4.rotate()); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test_cn.pdf")); writer.setPdfVersion(PdfWriter.PDF_VERSION_1_7); //Make document tagged writer.setTagged(); //=============== writer.setViewerPreferences(PdfWriter.DisplayDocTitle); document.addTitle("中文测试"); writer.createXmpMetadata(); //===================== document.open(); Paragraph p = new Paragraph(); //Embed font p.setFont(font); //================== Chunk c = new Chunk("中文测试"); p.add(c); document.add(p); BaseFont cbf = BaseFont.createFont(cfontPath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED); Font cfont = new Font(cbf,64); Phrase ph = new Phrase("中文测试",cfont); document.add(ph); document.close(); } }
生成效果:
其实看看BaseFont的实现,就会发现,iText还支持其他4种字体:
而ttf是我们最常见的字体。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树