我使用的是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)?
。首先将点从PDF空间转换为画布空间(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#!搜索/pdfnet-sdk/scroll/pdfnet-sdk/7Wy00goWfyQ/t1tvApNDrr8J,其中Thomas Hoffman解释:
首先要看的是滚动位置。y后转换是在屏幕空间,而SetX/YScrollPos是在滚动查看器的坐标。也就是左上角PDFViewCtrl在屏幕空间的位置(0,0),但在位置(GetHScrollPos和GetVScrollPos)在滚动坐标