繁体   English   中英

Android:使用 PrintedPdfDocument 创建的 PDF 在不同的设备上看起来不同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM