由于jasper report使用itext库,因此最简单的测试字体是否将在pdf中正确显示的方法是直接使用itext测试它。
示例
程序*,改编自iText:第11章:选择正确的字体
import java.io.FileOutputStream;import java.io.IOException;import com.lowagie.text.document;import com.lowagie.text.documentException;import com.lowagie.text.Font;import com.lowagie.text.Paragraph;import com.lowagie.text.pdf.baseFont;import com.lowagie.text.pdf.ColumnText;import com.lowagie.text.pdf.PdfWriter;public class FontTest { public static final String RESULT = "fontTest.pdf"; public static final String TEST = "Test to render this text with the turkish lira character u20BA"; public void createPdf(String filename) throws IOException, documentException { document document = new document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); baseFont bf = baseFont.createFont( "pathToMyFont/myFont.ttf", baseFont.IDENTITY_H, baseFont.EMBEDDED); Font font = new Font(bf, 20); ColumnText column = new ColumnText(writer.getDirectContent()); column.setSimpleColumn(36, 730, 569, 36); column.addElement(new Paragraph(TEST, font)); column.go(); document.close(); } public static void main(String[] args) throws IOException, documentException { new FontTest().createPdf(RESULT); }}一些注意事项(如示例所示):
- 要渲染特殊字符,请使用其编码值示例
u20BA
来避免文件编码类型出现问题。 - 考虑始终使用 Unipre 编码,这是更新的PDF标准(PDF / A,PDF / UA)中推荐的方法,它使您可以混合使用不同的编码类型,但唯一的缺点是文件大小稍大。
结论:
如果在“ fontTest.pdf”中 正确 显示了字体,则在jasper报告中字体扩展名有问题。
如果您在“ fontTest.pdf”中 无法正确显示 字体,则在jasper报告中您无能为力,您需要查找其他字体。
*最新的jasper-reports发行版使用特殊版本itext-2.1.7,此版本中的导入为
com.lowagie.text,如果您使用的是更高版本,则导入
com.itextpdf.text如改编示例中所示。



