PDF 显示错误字符而不是换行
PDF showing wrong character instead of Line feed
我的应用程序创建了一个 PDF,但是当用户写入的字符串包含换行符 (\n) 时,它显示错误的字符(在大多数字体中显示一个小方块)
使用 this 在线验证工具时出现错误
The encoding for character code 10 in font 'Arial' is missing.
当我开始嵌入字体时,"square character" 开始出现,但在较旧的 PDF 中使用相同的在线验证器(没有嵌入字体)它给了我同样的信息。
Link 到 PDF 示例。
PS: Acrobat, Foxit Reader 和 Windows reader 在 Windows 8 中出现错误,但在 chrome 中没有.
任何帮助将不胜感激,提前致谢!
要显示的字符串中的换行符本身就是错误。
详细
您的应用程序使用
等指令创建页面内容流
1 0 0 1 15.1732 592.4547 Tm
(Test with line break
) Tj
1 0 0 1 15.1732 580.4547 Tm
(New Line.) Tj
特别是第一个 Tj 指令的字符串参数在右括号前包含一个 0x0a 字节。
Tj 是一个文本显示运算符。如果您查看 PDF 规范,您会读到
A string operand of a text-showing operator shall be interpreted as a sequence of character codes identifying the glyphs to be painted.
(ISO 32000-1 第 9.4.3 节文本显示运算符)
即这种字符串中的每个字节都属于一个字节序列,形成一个字符代码以从字体中识别一个字形。
在你的例子中,字体定义为
<<
/Type /Font
/Subtype /TrueType
/BaseFont /Arial
/FirstChar 30
/LastChar 255
/Widths 4 0 R
/FontDescriptor 5 0 R
/Encoding /WinAnsiEncoding
>>
即编码是 WinAnsiEncoding,它在 ISO 32000-1 的附件 D 中定义。正如您将在此处看到的那样,没有为此编码定义的 040 = 0x20 = 32 以下字符代码的映射,尤其是您使用的字符代码 0x0a。
因此,PDF验证器的错误信息是正确的:
The encoding for character code 10 in font 'Arial' is missing.
PDF 查看器显示一些“错误字符”(如您所说)只是试图弄清楚 Tj 的字符串参数中的无效元素 0x0a。
我的应用程序创建了一个 PDF,但是当用户写入的字符串包含换行符 (\n) 时,它显示错误的字符(在大多数字体中显示一个小方块)
使用 this 在线验证工具时出现错误
The encoding for character code 10 in font 'Arial' is missing.
当我开始嵌入字体时,"square character" 开始出现,但在较旧的 PDF 中使用相同的在线验证器(没有嵌入字体)它给了我同样的信息。
Link 到 PDF 示例。
PS: Acrobat, Foxit Reader 和 Windows reader 在 Windows 8 中出现错误,但在 chrome 中没有.
任何帮助将不胜感激,提前致谢!
要显示的字符串中的换行符本身就是错误。
详细
您的应用程序使用
等指令创建页面内容流1 0 0 1 15.1732 592.4547 Tm
(Test with line break
) Tj
1 0 0 1 15.1732 580.4547 Tm
(New Line.) Tj
特别是第一个 Tj 指令的字符串参数在右括号前包含一个 0x0a 字节。
Tj 是一个文本显示运算符。如果您查看 PDF 规范,您会读到
A string operand of a text-showing operator shall be interpreted as a sequence of character codes identifying the glyphs to be painted.
(ISO 32000-1 第 9.4.3 节文本显示运算符)
即这种字符串中的每个字节都属于一个字节序列,形成一个字符代码以从字体中识别一个字形。
在你的例子中,字体定义为
<<
/Type /Font
/Subtype /TrueType
/BaseFont /Arial
/FirstChar 30
/LastChar 255
/Widths 4 0 R
/FontDescriptor 5 0 R
/Encoding /WinAnsiEncoding
>>
即编码是 WinAnsiEncoding,它在 ISO 32000-1 的附件 D 中定义。正如您将在此处看到的那样,没有为此编码定义的 040 = 0x20 = 32 以下字符代码的映射,尤其是您使用的字符代码 0x0a。
因此,PDF验证器的错误信息是正确的:
The encoding for character code 10 in font 'Arial' is missing.
PDF 查看器显示一些“错误字符”(如您所说)只是试图弄清楚 Tj 的字符串参数中的无效元素 0x0a。