Pdf.js: 缺少对 URL 片段标识符中的“viewrect”参数的支持

创建于 2019-04-28  ·  7评论  ·  资料来源: mozilla/pdf.js

根据打开 PDF 文件的参数(版本 9.0) (并在RFC 8118 中引用):

viewrect=_left_,_top_,_wd_,_ht_

使用坐标系中的浮点值或整数值设置视图矩形,其中 0,0 表示可见页面的左上角,与文档旋转无关。

目前似乎不支持 PDF URL 片段标识符中的viewrect参数。 为了验证,我进行了如下测试:


配置:

  • Web 浏览器及其版本:Firefox Quantum 66.0.3(64 位)
  • 操作系统及其版本:GNU/Linux x86_64
  • PDF.js 版本: https :
  • 是否为浏览器扩展:否

重现问题的步骤:

  1. 查看存储库,运行npm installgulp server ,然后将查看器导航到页面尺寸为 8.5" x 11" 的 PDF(例如 http://localhost:8888/web/viewer.pdf)。 html?file=%2Ftest%2Fpdfs%2Ftracemonkey.pdf)。
  2. #page=1&viewrect=72,72,288,432附加到地址栏中的 URL,然后重新加载页面。

什么是预期行为?

查看器应放大(大约)4" x 6" 矩形,该矩形距页面顶部偏移 1",距页面左边缘 1"。

什么地方出了错?

视口未按预期转换,因为 PDF JS 不支持viewrect


我也跑了

$ git grep viewrect

这产生了 0 个结果,并在 GitHub 上进行了以下搜索,但都没有返回:

1-viewer 2-feature

最有用的评论

随意在这方面工作。 我认为wd是“宽度”,而ht是“高度”。

所有7条评论

你好,
我是新来的,正在寻找要解决的问题,我想解决这个问题,除非有人已经这样做了。 而且我还阅读了有关 viewRect 的文档,我不太确定 wd 和 ht 指的是什么。
任何人都可以启发我关于那个 wd 和 ht,好吗? 提前致谢。

随意在这方面工作。 我认为wd是“宽度”,而ht是“高度”。

@AndrewMyint ,我只是想向您指出与此相关的几个问题,这些问题记录了(错误命名的)“ zoom ”参数的当前实现的错误行为: https://github .com/mozilla/pdf.js/issues/10773https://github.com/mozilla/pdf.js/issues/2843。

感谢@markmatney我一直在浏览 pdf_link_service.js,我很惊讶“ zoom ”参数正在处理Fit参数,而它应该在“ view ”中处理参数根据文档

@markmatney如果我没有错,所有作为参数提供的值,如(left, top, scale, Fit, ...)都在BaseViewer.scrollPageIntoView 。 并且,在scrollPageIntoView中有许多 switch case (Fit, FitB, FitH,......)处理。 而且,我发现的一个有趣的案例是FitR ,我什至没有在文档中看到FitR参数。

但在我看来,如果将#zoom=FitR,72,72,288,432附加到 URL 地址栏,“ FitR ”会产生“ viewrect ”行为。

你能确认这是viewrect的预期行为吗? 谢谢你。

是的,我相信BaseViewer.scrollPageIntoView是查看所有这些参数然后以某种方式基于它们转换视口的方法。

我还记得当我最初研究这个时看到FitR 。 它在d30fac0 (2011 年 9 月 4 日)与Fit* args 的其余部分一起被引入master ,并在PDF 参考规范中定义。 我不确定为什么它从“打开 PDF 文件的参数”规范中被省略(或者为什么甚至有两个单独的规范,就此而言)。

无论如何,我强烈认为viewrect实现方式应该与FitR 。 这当然值得商榷,但是:

  • 简单地将它们相同地对待将是多余的,并且会限制该软件可以实现的用例数量,并且
  • 由于 PDF 规范对每个语义的定义不同,我们当然_可以_以不同的方式实现它们,同时仍然遵守规范。

我希望看到viewrect的实现,其中与FitR ,生成的视图不依赖于用户 Web 浏览器窗口的尺寸。 要了解我的意思,请访问https://mozilla.github.io/pdf.js/web/viewer.html#zoom =FitR,0,0,144,144。 该 URL 片段要求查看器显示大约 2" x 2" 的方形区域 (_w_ x _h_, 1" ~ 72 px)。目前,如果我的浏览器以 1080 x 720(3:2 比例)​​全屏显示定向景观,那么我实际上会看到一个 3" x 2" 的区域。如果我将显示器旋转 90 度并在全屏浏览器中查看相同的矩形,那么我会看到一个 2" x 3" 的区域。这是因为根据 PDF 参考规范第 583 页,PDF.JS 填充了剩余的可用空间:

[_page_ /FitR _left_ _bottom_ _right_ _top_]

显示 _page_ 指定的页面,其内容被放大到刚好适合由坐标指定的矩形 [...] 完全在窗口内 [...] 如果所需的水平和垂直放大系数不同,请使用较小的他们俩 [...]

“打开 PDF 文件的参数”更松散地定义了viewrect (有关定义,请参阅此问题的开篇评论)。 我希望看到一个无论浏览器窗口大小如何都显示相同区域的实现,这样指定区域的任何 _outside_ 都会失去焦点(“变灰”或“变黑”)。 除非我遗漏了什么,否则这样的实现仍然符合规范。

阅读我的评论后,我才意识到FitR的 PDFjs 实现与 PDF 参考规范不同。 当它应该被解释为 _left,bottom,right,top_ 时,它将矩形解释为 _x,y,w,h_。

此页面是否有帮助?
0 / 5 - 0 等级