Установите PDFViewCtrl прокрутки до абсолютной позиции в документе

Я использую Android версию PDFNet 6.5.0.

Мне нужно установить вертикальную прокрутку PDFViewCtrl в абсолютную точку в PDF, выраженную в координатах PDF Canvas.

Например, скажите, что я хочу увеличить середину второй страницы.

Я мог бы получить координату Y, в позиции PDF Canvas, как:

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

Как я мог прокрутить в позицию у?

Я пытаюсь сделать это с PDFViewCtrl#setVScrollPos(), но я не знаю, как конвертировать y действительный параметр для этого метода.

2 ответа

Решение

Вы пытались использовать PDFViewCtrl#scrollTo(int, int)?

т.е. сначала преобразуйте точки из пространства PDF в пространство холста (PDFViewCtrl#convPagePtToCanvasPt), затем прокрутите до позиции.

Хотя я принял ответ Ширли Джи, я публикую этот другой ответ для разъяснения.

Хитрый бит - это какой номер передать в качестве параметра PDFViewCtrl#setVScrollPos(int) или же PDFViewCtrl#scrollTo(int, int)

  • Вам необходимо использовать PDFViewCtrl#convPagePtToScreenPt() для преобразования положения страницы в физическую точку экрана.

  • Но вам также нужно учитывать текущее смещение прокрутки в представлении прокрутки pdfViewCtrl#getVScrollPos()

Итак, если вы хотите, чтобы перейти к verticalPosition в 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, где Томас Хоффман объясняет:

Первое, на что нужно обратить внимание - это положение прокрутки. y после преобразования находится в пространстве экрана, а SetX/YScrollPos находится в координатах средства просмотра прокрутки. То есть верхний левый угол PDFViewCtrl находится в позиции (0, 0) в пространстве экрана, но в позиции (GetHScrollPos и ​​GetVScrollPos) в координатах прокрутки

Другие вопросы по тегам