我将 DOCX 文件导出为 PDF 文件时出现错误,如何修复它?

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

粗体、斜体、.. DOCX 文件中的 Unicode 文本导出到 PDF 时会出现错误,例如粗体文本:

docx 文件中的文本,

pdf 文件中的文本

我尝试使用许多其他应用程序将该 DOCX 文件导出为 PDF,但它们仍然不能更好。

fonts document
1个回答
0
投票

这是某些混合字符类型的语言的一个不幸的副作用。因此,当字体是子集时,某些拉丁字体的行为将与非拉丁字体不同。

没有你的例子,很难准确地展示,但在这里我们看到它是如何发生的。

在 PDF 中,您在屏幕上看到的字符实际上是数字的混合,并且有些字符具有熟悉的字符形状,因此请考虑这组字符

以下是这些字形在 PDF 中存储和呈现的方式。

BT
/F0 36.0014 Tf
1 0 0 1 0 -29.9892 Tm
(M) Tj
/F1 36.0014 Tf
1 0 0 1 21.6009 -29.9892 Tm
<02f4> Tj
/F0 36.0014 Tf
1 0 0 1 43.2018 -29.9892 Tm
( ) Tj
/F1 36.0014 Tf
1 0 0 1 64.802707 -29.9892 Tm
<00fe02ba> Tj
/F0 36.0014 Tf
1 0 0 1 108.0044 -29.9892 Tm
(u) Tj
ET

忽略位置,只看我们拥有的字母

/F0(M)/F1<02f4>/F0( )/F1<00fe02ba>/F0(u)

这意味着一种字体用于

M u
字母,另一种字体用于
ởđấ
字符

这些数字与真实字符(例如 unicode)没有任何关系,它们只是一个 ID,因此

的 CID 是 02f4,
đ
的 CID 是 00fe 等,因此这些字母需要一个查找表才能转换为 Unicode角色。

从一个到另一个的映射可能是这样的

/CMapName /GXUUYQ+Cousine def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
6 beginbfchar
<0003> <0020>
<0030> <004D>
<0058> <0075>
<00FE> <0111>
<02BA> <1EA5>
<02F4> <1EDF>
endbfchar
endcmap

我们现在可以使用它来依次映射每个字母

<0003> <0020> = space bar
<0030> <004D> = M
<0058> <0075> = u
<00FE> <0111> = đ
<02BA> <1EA5> = ấ
<02F4> <1EDF> = ở

因此,如果字体因映射不良或 PDF 中存储的字体错误而损坏,这些数字将会混淆并应用错误的字母。

© www.soinside.com 2019 - 2024. All rights reserved.