在单个 android 设备上使用 PdfDocument 得到奇怪的结果
Getting strange results with PdfDocument on single android device
在 android 应用程序中,我使用 PdfDocument 将报告保存为 pdf 文件。在客户的设备上,我得到了一个奇怪的报告文本结果。
以下是 header 的图像,在 DroidSansMono 中呈现以下文本:
Baus 演示公司
4727 第四大道西南 STE 202
华盛顿州西雅图市 9816
电话:206-932-986
传真:206-932-986
我在大多数设备上都能很好地呈现相同的过程。我检查了 pdf 文件,它有正确的字体。
这是完整的 PDF 文件:
PDF File
谁能帮我弄清楚为什么文本会这样呈现?
之所以出现这种奇怪的外观,是因为这正是 PDF 描述的格式。
水平缩放
页面的内容流由三部分组成:
顶部,签名图像上方的所有文本,开头包含说明
2000 Tz
在该部分内,在一些文本之后是 1000 Tz
,然后是 2000 Tz
,然后是 1000 Tz
。
Tz 运算符将水平缩放设置为前一个数字的百分比值。因此,这些指令导致所有后续文本(直到重置图形状态的部分结束)水平拉伸 10 或 20 倍!
这解释了为什么字形如此宽,但没有解释为什么它们重叠如此之多。
字形宽度和定位
它们如此重叠的原因是每个字形都单独放置在适合布局的距离,没有水平缩放。
首先,PDF 中的 DroidSansMono 字体信息声明该字体中几乎所有字形的宽度均为 0。因此,无论何时绘制字形,文本插入点不会移动到字形的末尾,而是保持在它的开头。
此外,每个字形都是使用单独的操作绘制的,并且在两个这样的单个字形绘制操作之间,文本插入点通过单独的指令前进。但是这条指令的距离参数适用于没有水平缩放的字形!
这会导致所有重叠。
如果这个 PDF 在大多数设备上渲染得“很好”(即错误地忽略了 Tz 操作),那么在这些设备上使用的 PDF 渲染器显然做的 PDF 很糟糕渲染。
在 android 应用程序中,我使用 PdfDocument 将报告保存为 pdf 文件。在客户的设备上,我得到了一个奇怪的报告文本结果。
以下是 header 的图像,在 DroidSansMono 中呈现以下文本:
Baus 演示公司
4727 第四大道西南 STE 202
华盛顿州西雅图市 9816
电话:206-932-986
传真:206-932-986
我在大多数设备上都能很好地呈现相同的过程。我检查了 pdf 文件,它有正确的字体。
这是完整的 PDF 文件: PDF File
谁能帮我弄清楚为什么文本会这样呈现?
之所以出现这种奇怪的外观,是因为这正是 PDF 描述的格式。
水平缩放
页面的内容流由三部分组成:
顶部,签名图像上方的所有文本,开头包含说明
2000 Tz
在该部分内,在一些文本之后是 1000 Tz
,然后是 2000 Tz
,然后是 1000 Tz
。
Tz 运算符将水平缩放设置为前一个数字的百分比值。因此,这些指令导致所有后续文本(直到重置图形状态的部分结束)水平拉伸 10 或 20 倍!
这解释了为什么字形如此宽,但没有解释为什么它们重叠如此之多。
字形宽度和定位
它们如此重叠的原因是每个字形都单独放置在适合布局的距离,没有水平缩放。
首先,PDF 中的 DroidSansMono 字体信息声明该字体中几乎所有字形的宽度均为 0。因此,无论何时绘制字形,文本插入点不会移动到字形的末尾,而是保持在它的开头。
此外,每个字形都是使用单独的操作绘制的,并且在两个这样的单个字形绘制操作之间,文本插入点通过单独的指令前进。但是这条指令的距离参数适用于没有水平缩放的字形!
这会导致所有重叠。
如果这个 PDF 在大多数设备上渲染得“很好”(即错误地忽略了 Tz 操作),那么在这些设备上使用的 PDF 渲染器显然做的 PDF 很糟糕渲染。