簡體   English   中英

如何測試我的字體是否在pdf中正確呈現?

[英]How can I test if my font is rendered correctly in pdf?

在jasper報告中使用不同的字體時,您需要使用字體擴展名

但是,如果字體沒有正確呈現有一種方法,我可以測試pdf是否支持該字體,以便我可以理解問題是否與我的font-extensions或我的.ttf字體有關?

從jasper報告導出為pdf時不正確的字體呈現是一個常見的問題示例Jasper Reports PDF不會導出西里爾文值 ,如清單第1點所示,使用字體擴展並不總是足夠,字體需要也得到支持pdf生成庫並能夠呈現實際角色。 這就是為什么我決定通過這個QA風格的問題,以便未來的用戶在點擊清單1時可以參考如何快速測試字體。

由於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);
    }
}

一些筆記(見例):

  • 要渲染特殊字符,請使用它的編碼值示例\₺以避免文件中的編碼類型出現問題。
  • 考慮始終使用Unicode編碼,這是較新的PDF標准(PDF / A,PDF / UA)中的推薦方法,並且為您提供了混合不同編碼類型的可能性,唯一的優點是稍大的文件大小。

結論:

如果您的字體在“fontTest.pdf”中正確呈現 ,則jasper報告中的字體擴展名出現問題。

如果在“fontTest.pdf”中未正確呈現字體,則無法在jasper報告中執行任何操作,您需要查找其他字體。


*最新的jasper-reports發行使用特殊版本itext-2.1.7,此版本中的導入是com.lowagie.text ,如果您使用的是更高版本,則導入為com.itextpdf.text如適應示例中所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM