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



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

我面临的问题是,在不同的设备上,为同一视图生成的PDF文档看起来不同。在一些设备上,它在PDF页面上被拉伸,而在一些设备中,它会按原样渲染。

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

给定1/72英寸的数值document.getPageWidth()==像素的pageCanvas.getWidth()pageCanvas.getDensity()不应该总是72 DPI吗?在一些手机上,它是320(在正确显示的地方(,而在另一些手机上是420(在拉伸视图的地方(。

有点粘在这里,所以如果有任何建议,我将不胜感激。提前感谢!

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

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

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

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

相关内容

最新更新