在jasper报告中使用不同的字体时,您需要使用font-extensions。
但是,如果字体未正确呈现,我可以测试pdf是否支持该字体,这样我就能理解问题是否与我的字体扩展相关或者是我的.ttf
字体?
从jasper报告导出为pdf时,字体的错误呈现是一个常见问题示例Jasper Reports PDF doesn't export cyrillic values,如清单第1点所示,使用字体扩展并不总是足够,字体需要也是由pdf生成库支持并能够呈现实际角色。这就是为什么我决定通过这个Q-A风格的问题,以便未来的用户在点击清单1时可以参考如何快速测试字体。
答案 0 :(得分:9)
由于jasper报告使用itext库,最简单的方法是测试你的字体是否在pdf中正确呈现,是用itext直接测试它。
示例程序 * ,改编自iText: Chapter 11: Choosing the right font
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 {
/** The resulting PDF file. */
public static final String RESULT = "fontTest.pdf";
/** the text to render. */
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
以避免文件中的编码类型问题。<强>结论:强>
如果“fontTest.pdf”中的字体正确呈现,则表示 jasper报告中的字体扩展问题。
如果“fontTest.pdf”中的字体未正确呈现,则 在jasper报告中你无能为力,你需要找到另一种字体。
*最新的jasper-reports发行版使用特殊版本itext-2.1.7,此版本中的导入为com.lowagie.text
,如果您使用的是更高版本,则导入为com.itextpdf.text
,如同改编的例子。