IText特殊字符编码

时间:2012-09-26 16:11:40

标签: xslt encoding itext

我认为我认为与IText中的编码有关。

我在xsl中开发了一个报告,想要从自定义.otf文件中打印一些特殊字符。

首先是.xsl代码

<span class="symbol card-logo">&#xf000;</span>

之后,.xsl代码将转换为HTML。 HTML代码在浏览器中运行良好,包含我想要的所有字符。但之后我将HTML字符串传递给ITextRenderer。

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont(otfFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

InputSource is = new InputSource(bais);
Document doc = builder.parse(is);

renderer.setDocument(doc, null);

renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();

当我添加BaseFont.IDENTITY_H时,我几乎解决了问题,同时将字体添加到渲染器,但是另一个字符从报告中消失了(&#8482; - 商标徽标)

奇怪的部分: 使用这样的代码,当且仅当&#xf000;字符打印​​在报告中的任何位置时,才会打印商标徽标。否则它只打印它的“空间”。 另外,如果我不添加BaseFont.IDENTITY_H,则商标徽标可以正常使用,但&#xf000;却没有。

我希望这不要太混淆!

似乎在打印&#xf000;字符时,它会拉伸“字符窗口”,然后将商标徽标打印得很好。但我不确定这一点。

&#xf000 - icon;
&#8482 - company logo

1 个答案:

答案 0 :(得分:0)

如何在底部添加一堆空格,然后让一个裁剪器 - 客户端 - 删除空格?

我就是这样解决的。