【问题标题】:Set PDFViewCtrl scroll to an absolute position in the document设置 PDFViewCtrl 滚动到文档中的绝对位置
【发布时间】:2015-08-27 15:23:15
【问题描述】:

我使用的是 Android 版本的 PDFNet 6.5.0。

我需要将PDFViewCtrl的垂直滚动设置为pdf中的一个绝对点,用PDF Canvas坐标表示。

比如说我要放大到第二页的中间。

我可以得到 y 坐标,在 PDF Canvas 位置,如:

int y = doc.getPage(1).getPageHeight() + (doc.getPage(2).getPageHeight() / 2)

如何滚动到 y 位置?

我正在尝试使用PDFViewCtrl#setVScrollPos(),但我不知道如何将y 转换为此方法的有效参数。

【问题讨论】:

    标签: android scroll coordinate-systems pdftron pdfnet


    【解决方案1】:

    您是否尝试过使用 PDFViewCtrl#scrollTo(int, int)?

    即首先将点从 PDF 空间转换到画布空间(PDFViewCtrl#convPagePtToCanvasPt),然后滚动到该位置。

    【讨论】:

    • 您确实可以使用 PDFViewCtrl#scrollTo(int, int) 或 PDFViewCtrl#setVScrollPos(int, int) 滚动。我缺少的棘手的事情是,除了需要将页面位置转换为屏幕位置之外,您还需要将当前滚动位置添加到您正在滚动到的点。
    【解决方案2】:

    虽然我已经接受了 Shirley G 的回答,但我还是发布了这个其他答案以进行澄清。

    棘手的一点是将哪个数字作为参数传递给PDFViewCtrl#setVScrollPos(int)PDFViewCtrl#scrollTo(int, int)

    • 您需要使用 PDFViewCtrl#convPagePtToScreenPt() 将页面位置转换为物理屏幕点。

    • 但是还需要考虑到当前滚动视图的滚动偏移量pdfViewCtrl#getVScrollPos()

    所以,假设你想在page 中滚动到verticalPosition

    public void scrollToDocPosition( final int verticalPosition, final int page) {
    
                double[] screenPos = pdfViewCtrl.convPagePtToScreenPt(0, verticalPosition, page);
                pdfViewCtrl.setVScrollPos((int) screenPos[1] + pdfViewCtrl.getVScrollPos());
    
        }
    

    感谢https://groups.google.com/forum/?fromgroups#!searchin/pdfnet-sdk/scroll/pdfnet-sdk/7Wy00goWfyQ/t1tvApNDrr8J,Thomas Hoffman 解释道:

    首先要看的是滚动位置。之后 转换在屏幕空间中,而 SetX/YScrollPos 在 滚动查看器的坐标。也就是说,左上角 PDFViewCtrl 位于屏幕空间中的位置 (0, 0),但在位置 (GetHScrollPos 和 GetVScrollPos) 在滚动坐标中

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      相关资源
      最近更新 更多