PHP TCPDF - 半角假名被视为全角

PHP TCPDF - Half-width kana is being considered as Full-width

我在呈现 PDF 中包含半角假名的文本字符串时遇到问题。它认为半角假名是全角假名,所以结果是这样的:

这是我的代码片段:

PDF::Cell(15, 6, '商品コード', 1, 0, 'C', 0, '', 0);

我也在用TCPDF提供的cid0jp字体显示日文字体:

PDF::SetFont('cid0jp', 'B', 9);

最后,我希望它保持半角片假名以适合单元格并删除不必要的空格。

使用的 TCPDF 库:https://tcpdf.org/

当您使用 cid0jp 字体时,您会将字体渲染留给 PDF reader,这可能会导致不同 reader 和操作系统之间的渲染差异。间距差异可能非常大,但我不确定这是 TCPDF 实现的问题还是仅仅是依赖 reader 提供字体的结果。

下面,我提供了一个示例,比较 Microsoft Edge 和 Foxit Reader 在 cid0jp 中呈现该文本。我还在第二行包含了 full-width 版本。 Edge 在 half-widths 的间距上比 Foxit 更接近一点。 Google Drive 的 PDF 预览与 Foxit 所做的相同,只是在 half-widths 周围增加了间距。

由于您正在使用的 space 非常紧凑,可能值得将特定字体嵌入到文档中。在我的测试中,就渲染而言,它更加可靠。 (我还在下面提供了该测试的屏幕截图。如果您不想在每个文件中包含整个字体,请确保启用子集设置。)

以防万一您可能不知道该怎么做:

$embfont = TCPDF_FONTS::addTTFfont('/Path/to/font.ttf', 'TrueTypeUnicode', '', 32);
$pdf->setFont($embfont, '', '9');
$pdf->Cell(15,6,'商品コード',1,0,'C',0,'',0);

带有 cid0jp 的示例:

嵌入字体的示例:

(不可否认,这种字体在小尺寸时不是很好。)