【问题标题】:Flutter / Android PDF viewer is low qualityFlutter / Android PDF 查看器质量低下
【发布时间】:2022-01-09 00:27:30
【问题描述】:

我正在制作一个 Flutter 应用来查看 PDF 文件。

我尝试了一堆不同的包(native_pdf_view、flutter_cached_pdfview、uc_pdfview),似乎它们都导致渲染质量有点低。

当我使用 Google Drive 的 PDF 查看器查看同一个文件时,质量得到了显着提高。是否有我遗漏的抗锯齿设置可以提高 PDF 渲染性能?

放大的屏幕截图显示了 native_pdf_view 的抗锯齿效果不佳:

放大的屏幕截图显示使用 Google 云端硬盘的相同文件:

任何关于如何改进 PDF 呈现的建议​​都将不胜感激。 PdfView 小部件的相关代码部分如下。 (如果我增加 'width' 和 'height' 参数,质量看起来会稍微好一些,但仍远不及 Google Drive 的质量,但很快就会耗尽内存)

PdfView(
                documentLoader: Center(child: CircularProgressIndicator()),
                pageLoader: Center(child: CircularProgressIndicator()),
                controller: _pdfController,
                renderer: (PdfPage page) => page.render(
                  width: page.width * 2,
                  height: page.height * 2,
                  format: PdfPageFormat.JPEG,
                  backgroundColor: '#FFFFFF',
                ),
              ))

编辑:这是这些屏幕截图中使用的源 PDF 文件(尽管其他音乐 PDF 文件也显示相同的低质量渲染): https://www.free-scores.com/PDF_EN/chopin-frederic-prelude-15-296.pdf

此 PDF 使用字体显示音乐 (https://lilypond.org/doc/v2.18/Documentation/notation/the-feta-font)。

【问题讨论】:

  • 我尝试过 .JPEG、.PNG 和 .WEBM(通过 native_pdf_viewer 库公开的三个选项);它们似乎都对最终的图像质量没有任何影响。将 *2 更改为 *1 会使它看起来更加阻塞。我认为没有任何其他设置可以更改 DPI - 只是宽度/高度(大概会缩小图像以适应屏幕)
  • 两个屏幕截图都是在设备上拍摄的,它在没有互联网连接的情况下也能工作,这意味着 Google Drive 应用程序在设备上(而不是服务器端)呈现了更好的图像。此 PDF 使用字体 (lilypond.org/doc/v2.18/Documentation/notation/the-feta-font),所以是的,它是矢量图像。我想澄清一下,我的问题是如何提高 Flutter 的渲染质量?即使我不能使用 native_pdf_render 包并且需要更手动地渲染和显示 PDF 中的图像,很高兴知道有一种方法可以以更高的质量显示 PDF 文件。
  • 当我增加 native_pdf_view 中的高度/宽度乘数时,大概会生成分辨率更高的图像。但是,它仍然不像同一设备上的 Google Drive 那样清晰。对于 native_pdf_view 开发人员来说,这可能更像是一个问题,看看他们是否可以向 Android PDF 渲染器公开任何其他设置来解决这个问题。或者,可以使用任何缩放选项来更好地缩小图像,使其在缩小时看起来不会像块状。
  • 我对 native_pdf_view 有同样的问题。我也试过:宽度:page.width * 2 和高度:page.height * 2,但没有检测到改进。我成功了告诉我谢谢。

标签: flutter pdf view native


【解决方案1】:

我通过增加page.render 中的widthheight 属性并为quality 赋予100 的值,成功解决了低质量问题。这是我的代码的 sn-p:

renderer: (PdfPage page) => page.render(
          width: page.width * 5,
          height: page.height * 5,
          format: PdfPageImageFormat.jpeg,
          backgroundColor: '#FFFFFF',
          quality: 100,
        ),

注意:使用最新版本的 native_pdf_view 软件包,因为不再支持 format: PdfPageFormat。现在它使用PdfPageImageFormat 而不是PdfPageFormat

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多