[英]Android: PDF created using PrintedPdfDocument looks different on different devices
我正在尝试将视图呈现给 PrintedPdfDocument。 正如预期的那样,页面的大小以 1/72 英寸为单位。 因此,对于 A0 大小的页面(宽度 = 33.11 英寸), document.getPageWidth()
返回 2384 (33.11 * 72)。 页面 canvas 宽度等于一个像素等于 1/72 英寸单位 - 因此, pageCanvas.getWidth()
返回 2384。这在不同的设备上是正确的。 到目前为止,一切都很好。
我面临的问题是,在不同的设备上,为同一视图生成的 PDF 文档看起来不同。 在某些设备上,它在 PDF 页面上被拉伸,而在某些设备上,它按应有的方式呈现。
这里可能是什么问题? PDF 的生成不应该与设备无关吗? 我注意到pageCanvas.getDensity()
在不同的手机上是不同的。 为什么手机屏幕密度会影响 PDF 页面 canvas 的密度?
鉴于 1/72 英寸的数字document.getPageWidth()
== pageCanvas.getWidth()
以像素为单位, pageCanvas.getDensity()
不应该总是 72 DPI 吗? 在某些手机上是 320(正确显示的位置),而在其他手机上是 420(视图被拉伸的位置)。
有点卡在这里,所以非常感谢任何指针。 提前致谢!
我找到了解决这个问题的方法。
我仍然不知道为什么pageCanvas.getDensity()
设置为显示密度而不是 PDF Page (72dpi) 的密度。 我的猜测是,这可能是因为某些视图在绘制到 canvas 时可能会错误地使用屏幕的显示指标,即使 canvas 不是屏幕 - 但这只是我的猜测。
不管为什么pageCanvas.getDensity()
设置为屏幕密度,我解决它的方法是使用屏幕密度计算页面尺寸(以 dp 为单位)。 因此,如果我想绘制到 A0 页面(33.11 英寸宽),我将页面宽度(在创建PrintedPdfDocument
时)设置为 33.11 * 420 = 13906 dp,而不是推荐的 33.11 * 72 = 2384 dp . 这样,当视图绘制到具有 420 dpi 密度的 canvas 时,生成的页面是所需的 33.11 英寸宽。
这是完美的工作,创建的 PDF 页面现在看起来是一样的,不管它是在哪里创建的。 唯一的副作用是 Adobe Acrobat 认为页面是 33.11 * 420 / 72 英寸宽,而不是 33.11 英寸宽。 但这实际上并不重要,因为我们可以在打印时缩小页面以适合 A0 纸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.