繁体   English   中英

用PdfRenderer类渲染的Pdf图像质量很差。 怎么修?

[英]Pdf rendered with PdfRenderer class shows very poor quality image. How to fix?

我正在尝试使用以下代码显示pdf文档

pdfRenderer = new PdfRenderer(parcelFileDescriptor);
PdfRenderer.Page page = pdfRenderer.openPage(position);
Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),
                Bitmap.Config.ARGB_8888);
        page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT);
        imageView.setImageBitmap(bitmap);

问题是显示的pdf非常模糊。 下图显示与wps office应用程序显示的pdf的比较。

在此处输入图片说明

当我的应用程序运行缓慢时,如何提高位图的质量和性能。

尝试这个:

pdfRenderer = new PdfRenderer(parcelFileDescriptor);
PdfRenderer.Page page = pdfRenderer.openPage(position);
Bitmap bitmap = Bitmap.createBitmap(
    getResources().getDisplayMetrics().densityDpi * mCurrentPage.getWidth() / 72,                        
    getResources().getDisplayMetrics().densityDpi * mCurrentPage.getHeight() / 72,
    Bitmap.Config.ARGB_8888
);
page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT);
imageView.setImageBitmap(bitmap);

哪里:

  1. getResources()。getDisplayMetrics()。densityDpi是目标DPI分辨率
  2. mCurrentPage.getWidth()返回以Postscript点为单位的宽度,其中每个pt为1/72英寸。
  3. 默认PDF分辨率为72(DPI)。

因此,将#2乘以72得到的是英寸,再乘以DPI得到的是像素。 换句话说,要匹配显示器的打印设备的质量,您应该增加渲染图像的大小,因为默认的PDF分辨率为72 DPI。 还请检查此帖子

积分: https : //stackoverflow.com/a/32327174/10471480

@Mangaldeep的回答是正确的。 但是,他没有解决内存需求。

请关注这篇文章https://developer.android.com/topic/performance/graphics/load-bitmap

您可以将位图的大小增加一个因子,例如

  x = size.x/page.getWidth(). 

其中size.x是您的屏幕尺寸。 宽度。 现在您可以创建新的位图,例如

 Bitmap b = Bitmap.create(x*page.getWidth(), page.getHeight(),....);

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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