如何显示';正方形';itext中的字符

如何显示';正方形';itext中的字符,itext,Itext,我正在使用itext 7创建pdf报告。我发现它不能正确显示“正方形”字符。例如:m/s² 它总是抛出异常: java.lang.NullPointerException at com.itextpdf.kernel.font.PdfType0Font.getCidFontType2(PdfType0Font.java:723) at com.itextpdf.kernel.font.PdfType0Font.flushFontData(PdfType0Font.java:811

我正在使用itext 7创建pdf报告。我发现它不能正确显示“正方形”字符。例如:m/s²

它总是抛出异常:

java.lang.NullPointerException
    at com.itextpdf.kernel.font.PdfType0Font.getCidFontType2(PdfType0Font.java:723)
    at com.itextpdf.kernel.font.PdfType0Font.flushFontData(PdfType0Font.java:811)
    at com.itextpdf.kernel.font.PdfType0Font.flush(PdfType0Font.java:600)
    at com.itextpdf.kernel.pdf.PdfDocument.flushFonts(PdfDocument.java:1846)
    at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:800)
    at com.itextpdf.layout.Document.close(Document.java:120)
我尝试了一些我在谷歌上搜索的例子。比如:

代码如下:

    File baseFontFile = new File(this.getClass().getClassLoader().getResource("font/FreeSans.ttf").getPath());

    PdfFont baseFont = PdfFontFactory.createFont(baseFontFile.getAbsolutePath(), PdfEncodings.IDENTITY_H);

Text unitTxt = null;        
if("m/s²".equals(unit)) { 
    unitTxt = new Text(unit); 
    unitTxt .setFont(baseFont );
    unitTxt .setFontSize(11);

    }

上面的代码不会引发异常,但在PdfDocument.close时它最终会引发异常。您声明并初始化
baseFontFile
变量,但稍后会访问
baseFont
变量。完全不清楚它们之间的关系。@MKL嗨,对不起,我错过了示例中的一些代码,我已经编辑了它。我建议您不要通过路径
字符串
(由
baseFontFile.getAbsolutePath()返回)来使用资源因为此字符串可能不表示文件系统中的常规文件,如
PdfFontFactory.createFont(string,string)
所预期的,但表示JAR或WAR存档中的条目。不要使用
this.getClass().getClassLoader().getResource
而使用
…getResourceAsStream
StreamUtil.inputStreamToArray
将字体获取为
字节[]
,然后使用
PdfFontFactory.createFont(字节[],字符串)
。你试过吗?@mkl嗨,mkl,我按照你的指示试过了。但一切都没有改变。我也有同样的错误。