在单个android设备上使用PdfDocument获得奇怪的结果

在单个android设备上使用PdfDocument获得奇怪的结果,android,pdf,text,font-face,Android,Pdf,Text,Font Face,在android应用程序中,我使用PdfDocument将报告保存为pdf文件。在客户的设备上,我得到了一个奇怪的报告文本结果 以下是标题图像,其中包含DroidSansMono中呈现的以下文本: Baus演示公司 西南大街第四大道4727号,邮编202 西特尔,华盛顿9816 电话:206-932-986 传真:206-932-986 我认为,在大多数设备上,同样的过程也能很好地渲染。我检查了pdf文件,它有正确的字体 以下是完整的PDF文件: 有人能帮我弄清楚为什么文本呈现成这样吗?之所

在android应用程序中,我使用PdfDocument将报告保存为pdf文件。在客户的设备上,我得到了一个奇怪的报告文本结果

以下是标题图像,其中包含DroidSansMono中呈现的以下文本:


Baus演示公司
西南大街第四大道4727号,邮编202
西特尔,华盛顿9816
电话:206-932-986
传真:206-932-986

我认为,在大多数设备上,同样的过程也能很好地渲染。我检查了pdf文件,它有正确的字体

以下是完整的PDF文件:


有人能帮我弄清楚为什么文本呈现成这样吗?

之所以出现这种奇怪的外观,是因为这正是PDF描述的格式

水平缩放 页面的内容流包括三个部分:

顶部部分,即签名图像上方的所有文本,在开始处包含指令

2000 Tz
在某些文本后面的部分中,a
1000 Tz
紧跟其后,然后是a
2000 Tz
和a
1000 Tz

Tz操作符将水平缩放设置为前一个数字的百分比值。因此,这些指令会导致以下所有文本(直到图形状态重置的部分结束)水平拉伸10或20倍

这解释了为什么图示符如此之宽,而不是为什么它们重叠如此之多

字形宽度和定位 它们重叠如此之多的原因是,每个图示符都单独放置在适合布局的距离处,而没有水平缩放

首先,PDF中的DroidSansMono字体信息声明字体中几乎所有字形的宽度均为0。因此,每当绘制图示符时,文本插入点不会沿着图示符的端点移动,而是保持在其起点

此外,每个字形都使用单独的操作绘制,在两个这样的单个字形绘制操作之间,文本插入点由单独的指令推进。但此指令的距离参数适用于无水平缩放的图示符

这会导致所有的重叠



如果此PDF在大多数设备上呈现“良好”(即错误地忽略Tz操作),这些设备上使用的PDF渲染器显然在PDF渲染方面做得很糟糕。

你知道为什么在一台设备上创建的PDF的水平缩放比例会降低1000倍,而在其他设备上创建的PDF文件的水平缩放比例是正确的吗?我只能假设在底层的
PdfDocument
实现中存在错误(您是否检查过有问题的设备是否有共同之处?例如,相同的android版本?)或应用程序中。发现PdfDocuments画布的某些android 8设备上的paint textScaleX已损坏。我改用了canvas scale。这方面的问题跟踪程序是否存在错误?