如何测试我的字体在pdf中是否正确显示?

在jasper report中使用不同的字体时,您需要使用font-extensions。

但是,如果字体显示 ,有没有一种方法可以测试pdf是否支持该字体,以便我可以理解问题是否与我的字体扩展名或我的.ttf字体有关?

从jasper报告导出为pdf时,字体呈现不正确是一个常见的问题示例jasperReports

PDF不会导出西里尔字母值,如清单1所示,使用字体扩展名并不总是足够的,还需要字体支持pdf生成库,并能够呈现实际字符。这就是为什么我决定通过此QA样式问题的原因,以便将来的用户在点击清单1时可以参考如何快速测试字体。

回答:

由于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 {

/** 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来避免文件编码类型出现问题。
  • 考虑始终使用 编码,这是更新的PDF标准(PDF / A,PDF / UA)中推荐的方法,它使您可以混合使用不同的编码类型,但唯一的缺点是文件大小稍大。

如果在“ fontTest.pdf”中 显示了字体,则在jasper报告中字体扩展名有问题。

如果您在“ fontTest.pdf”中 字体,则在jasper报告中您无能为力,您需要查找其他字体。


*最新的jasper-reports发行版使用特殊版本itext-2.1.7,此版本中的导入为com.lowagie.text,如果您使用的是更高版本,则导入com.itextpdf.text如改编示例中所示。

以上是 如何测试我的字体在pdf中是否正确显示? 的全部内容, 来源链接: utcz.com/qa/404730.html

回到顶部