0

我正在尝试将视图呈现给 PrintedPdfDocument。正如预期的那样,页面的大小以 1/72 英寸为单位。因此,对于 A0 大小的页面(宽度 = 33.11 英寸),document.getPageWidth()返回 2384 (33.11 * 72)。页面画布宽度等于 1 个像素等于 1/72 英寸单位 - 因此,pageCanvas.getWidth()返回 2384。这在不同的设备上是正确的。到目前为止,一切都很好。

我面临的问题是,在不同的设备上,为同一视图生成的 PDF 文档看起来不同。在某些设备上,它在 PDF 页面上被拉伸,而在某些设备上,它按应有的方式呈现。

这里可能是什么问题?PDF的生成不应该与设备无关吗?我注意到这pageCanvas.getDensity()在不同的手机上是不同的。为什么手机屏幕密度会影响 PDF 页面画布的密度?

鉴于document.getPageWidth()1/72 英寸的数值 ==pageCanvas.getWidth()以像素为单位,不应该pageCanvas.getDensity()总是 72 DPI?在某些手机上是 320(正确显示的位置),而在其他手机上是 420(视图被拉伸的位置)。

有点卡在这里,所以非常感谢任何指针。提前致谢!

4

1 回答 1

1

我找到了解决这个问题的方法。

我仍然不知道为什么pageCanvas.getDensity()设置为显示密度而不是PDF页面的密度(72dpi)。我的猜测是,这可能是因为某些视图在绘制到画布时可能会错误地使用屏幕的显示指标,即使画布不是屏幕 - 但这只是我的猜测。

不管为什么pageCanvas.getDensity()设置为屏幕密度,我解决它的方法是使用屏幕密度计算页面尺寸(以 dp 为单位)。因此,如果我想绘制到 A0 页面(33.11 英寸宽),我将页面宽度(创建时PrintedPdfDocument)设置为 33.11 * 420 = 13906 dp,而不是推荐的 33.11 * 72 = 2384 dp。这样,当视图绘制到具有 420 dpi 密度的画布上时,生成的页面是所需的 33.11 英寸宽。

这是完美的工作,创建的 PDF 页面现在看起来是一样的,不管它是在哪里创建的。唯一的副作用是 Adob​​e Acrobat 认为页面是 33.11 * 420 / 72 英寸宽,而不是 33.11 英寸宽。但这实际上并不重要,因为我们可以在打印时缩小页面以适合 A0 纸。

于 2020-08-10T17:37:52.627 回答