gpt4 book ai didi

Android PdfDocument.Page - 图像大小问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:40 26 4
gpt4 key购买 nike

在 PdfDocument.Page 上绘图时,我遇到了图像变大的问题。该应用程序适用于运行 Android 4.4.4(API 级别 19)的设备。

我正在生成一个 pdf 文档并添加一个图像,如下所示:

PdfDocument document = new PdfDocument();

//Create an A4 sized page 595 x 842 in Postscript points.
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();

PdfDocument.Page page = document.startPage(pageInfo);
Canvas canvas = page.getCanvas();

Bitmap logo = BitmapFactory.decodeResource(context.getResources(), R.drawable.pdf_logo);

Log.i(Consts.LOG_TAG, "pdf canvas density = " + canvas.getDensity());
Log.i(Consts.LOG_TAG, "pdf UOD logo density = " + logo.getDensity());

canvas.drawBitmap(logo, 50, 50, null);

document.finishPage(page);

/*
document is written out to a FileOuputStream().
Details omitted.
*/

文档写得正确,我使用 Canvas.drawText() 方法渲染的其他文本看起来很好。
但是在pdf文档中绘制的图像总是太大。

我检查了图像和 Canvas 的密度是否相同。图像 (pdf_logo.jpg) 是:
- 160dpi
- 分辨率为 160 x 160 物理像素。
- 1 英寸 x 1 英寸的尺寸也是如此。

上述代码中的日志还返回了以下内容:

04-22 11:55:50.607: I/App(7856): pdf Canvas 密度 = 160
04-22 11:55:50.607: I/App(7856): pdf UOD logo density = 160

这表明图像 dpi 也与 Canvas 密度相匹配。但是,当将图像绘制到 pdf 文档上时,图像远大于 1 英寸 x 1 英寸。它大约是原来的两倍,刚好超过 2 英寸 x 2 英寸。

我怀疑 Android 使用图像的物理分辨率 (160 x 160) 并将其转换为 PdfDocument.Page 大小单位,Postscript 点为 1/72 英寸。所以 160 个 Postscript 点等于 2.2 英寸 ~ 是原始图像尺寸的两倍(1 x 1 英寸)。

如果我将图像的大小减半,则会出现像素化,因为它实际上会将 0.5 x 0.5 英寸的图像绘制到 1 x 1 英寸的空间中。

我想知道如何在 PdfDocument.Page 上将图像绘制为实际大小,而不会出现这些缩放/大小问题。

最佳答案

这是一个迟到的答案,但一直在处理同样的问题,并找到了解决方案,并附有解释。

解释:

PdfDocument.Page size units, Postscript points which are 1/72 inch.

这意味着,PdfDocument 在物理打印时使用测量 1/72 英寸的点,这等于说在打印文档中,1 英寸将有 72 个点。这也称为 72 DPI ( Dots Per Inch )。

因此,对于 72 DPI,如果您想在屏幕上看到与打印文档完全相同的大小(没有缩放),则每英寸需要 72 像素 ( PPI )

与图片不同,PDF 文件具有物理尺寸,因此 PdfDocument.Page 的 Canvas 可以理解为打印文档的“屏幕”。此“屏幕”的密度必须为 72 PPI,内容才能显示为原始内容。

解决方法:

不需要 logo.setDensity(DisplayMetrics.DENSITY_XHIGH); 因为你不想改变图像的比例,你需要指定 Canvas 的密度。

解决方案是 canvas.setDensity(72);

关于Android PdfDocument.Page - 图像大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com