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

Pet*_*erg 6 java pdf fonts jasper-reports

在jasper报告中使用不同的字体时,您需要使用字体扩展名.

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

从jasper报告导出为pdf时不正确的字体呈现是一个常见的问题示例Jasper Reports PDF不会导出西里尔文值,如清单第1点所示,使用字体扩展并不总是足够,字体需要也得到支持pdf生成库并能够呈现实际角色.这就是为什么我决定通过这个QA风格的问题,以便未来的用户在点击清单1时可以参考如何快速测试字体.

Pet*_*erg 9

由于jasper报告使用库测试你的字体是否在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

一些笔记(见例):

  • 要渲染特殊字符,请使用它的编码值示例, \u20BA以避免文件上的编码类型出现问题.
  • 考虑始终使用Unicode编码,这是较新的PDF标准(PDF/A,PDF/UA)中的推荐方法,并且为您提供了混合不同编码类型的可能性,唯一的优点是稍大的文件大小.

结论:

如果您的字体在"fontTest.pdf"中正确呈现,则jasper报告中的字体扩展名出现问题.

如果在"fontTest.pdf"中未正确呈现字体,则无法在jasper报告中执行任何操作,您需要查找其他字体.


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