标签:
相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接集成中文字体)。
当然这样的问题,早就有高手解决了,那就是使用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是我们最常见的字体。
标签:
原文地址:http://my.oschina.net/mobinchao/blog/524112