1

我正在使用 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为该方法的有效参数。

4

2 回答 2

1

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

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

于 2015-09-02T00:18:29.090 回答
1

尽管我已经接受了 Shirley G 的回答,但我还是发布了另一个答案以进行澄清。

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

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

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

所以,如果你想滚动到verticalPositionin page

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 解释道:

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

于 2015-09-03T09:22:20.103 回答