我在 Jasper Report 中有一个字段。我正在打印 PDF 格式的报告。
该字段包含一些特殊字符,例如:🔵 ( & # 128309;)
但是字符打印不正确。我只打印了文本 & # 128309;
有谁知道如何让Jasperreport正确打印特殊字符吗?
谢谢。
PDF 的问题是它不能直接使用 Unicode,也不能使用表情符号字符,例如蓝色圆圈符号。
像 Windows Chrome 这样的 PDF 编写器必须做的是找到最近的 TTF 字体字符,因此在本例中是“Segoe UI emoji”字体使用的黑色圆圈(见图像下部的文本描述)。然后将其用于文本,然后 HTML 2 PDF 打印机驱动程序可以在顶部打印彩色圆圈。我们可以看到 2 个圆圈中的 1 个未受影响,为淡蓝色,但为了对比,我将内圈(左侧的所有文字)设置为粉红色。
因此,使用 SVG 或彩色表情符号字体会占用大量存储空间,因为这些字符应该只是将一个圆定义为 4 条弧线的几个字符。
黑色字符的定义要小得多,但对于一个圆形字符来说,简单地说它是
<a0>
并且没有字体嵌入所需的千字节也有点过分了。显然,使用的字符越多,开销就越少,但仍然远远超出了所需的范围,例如 Arial 中的 ◌ (blue)
。
/P <</MCID 12>> BDC
.137 .149 .161 RG
BT
/F1 15 Tf
1 0 0 -1 383.81056 168 Tm
<a0> Tj
ET
EMC
这里是嵌入字体的 KB 映射,其中页面上绘制的符号
<a0>
被转换为 Unicode <D83DDD35>
4 0 obj
<</Length 336>>
stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
/Ordering (UCS)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<00> <FF>
endcodespacerange
1 beginbfchar
<A0> <D83DDD35>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
endstream
endobj