将 PDFViewCtrl 滚动到文档中的绝对位置

Set PDFViewCtrl scroll to an absolute position in the document

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

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

即先把点从PDFspace转成canvasspace(PDFViewCtrl#convPagePtToCanvasPt),然后滚动到位置。

尽管我接受了 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 解释道:

The first thing to look at is the scroll position. y after converting is in screen space, while SetX/YScrollPos is in the coordinates of the scroll viewer. That is, the top left corner of the PDFViewCtrl is at position (0, 0) in screen space, but at position (GetHScrollPos and GetVScrollPos) in scroll coordinates