提问人:ASOS Programer 提问时间:10/30/2023 最后编辑:K JASOS Programer 更新时间:10/30/2023 访问量:21
将 DOCX 文件导出为 PDF 文件时出现错误,如何修复?
I have an error when export a DOCX file to a PDF file, how can I fix it?
问:
粗体,斜体,..导出为 PDF 时,DOCX 文件中的 Unicode 文本出现错误,以粗体文本为例:
我尝试使用许多其他应用程序将 DOCX 文件导出为 PDF,但它们仍然无法更好。
答:
0赞
K J
10/30/2023
#1
这是某些混合字符类型的语言的不幸副作用。因此,当字体是子集时,一些拉丁字体的行为将与非拉丁字体不同。如果未应用和嵌入正确的 TTF 字体样式文件,则在使用粗体或斜体或粗体和斜体时,这可能会更明显。
没有你的例子,很难准确地展示出来,但在这里我们看到它是如何发生的。
在 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(中</F102f4>/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 中的错误字体而损坏,这些数字将被混淆并应用错误的字母。
评论