如何在Jasper报告中编写像🔵这样的html字符?

问题描述 投票:0回答:1

我在 Jasper Report 中有一个字段。我正在打印 PDF 格式的报告。

该字段包含一些特殊字符,例如:🔵 ( & # 128309;)

但是字符打印不正确。我只打印了文本 & # 128309;

有谁知道如何让Jasperreport正确打印特殊字符吗?

谢谢。

jasper-reports
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.