根据打开 PDF 文件的参数(版本 9.0) (并在RFC 8118 中引用):
viewrect=_left_,_top_,_wd_,_ht_
使用坐标系中的浮点值或整数值设置视图矩形,其中 0,0 表示可见页面的左上角,与文档旋转无关。
目前似乎不支持 PDF URL 片段标识符中的viewrect
参数。 为了验证,我进行了如下测试:
配置:
重现问题的步骤:
npm install
和gulp server
,然后将查看器导航到页面尺寸为 8.5" x 11" 的 PDF(例如 http://localhost:8888/web/viewer.pdf)。 html?file=%2Ftest%2Fpdfs%2Ftracemonkey.pdf)。#page=1&viewrect=72,72,288,432
附加到地址栏中的 URL,然后重新加载页面。什么是预期行为?
查看器应放大(大约)4" x 6" 矩形,该矩形距页面顶部偏移 1",距页面左边缘 1"。
什么地方出了错?
视口未按预期转换,因为 PDF JS 不支持viewrect
。
我也跑了
$ git grep viewrect
这产生了 0 个结果,并在 GitHub 上进行了以下搜索,但都没有返回:
你好,
我是新来的,正在寻找要解决的问题,我想解决这个问题,除非有人已经这样做了。 而且我还阅读了有关 viewRect 的文档,我不太确定 wd 和 ht 指的是什么。
任何人都可以启发我关于那个 wd 和 ht,好吗? 提前致谢。
随意在这方面工作。 我认为wd
是“宽度”,而ht
是“高度”。
嗨@AndrewMyint ,我只是想向您指出与此相关的几个问题,这些问题记录了(错误命名的)“ zoom
”参数的当前实现的错误行为: https://github .com/mozilla/pdf.js/issues/10773和https://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
。 这当然值得商榷,但是:
我希望看到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_。
最有用的评论
随意在这方面工作。 我认为
wd
是“宽度”,而ht
是“高度”。