PDFTron: рисование аннотации чернил программно

Я рисую аннотацию чернил из точек, хранящихся в дБ. Где эти точки были извлечены из ранее нарисованной формы над PDF. Я сослался на этот пример, приведенный PDFTron, но я не могу видеть аннотацию, нарисованную на странице надлежащим образом. Фактическое изображение Актуальный рисунок

Нарисовано программно Нарисовано программноВот код, который я использовал для рисования аннотации.

for (Integer integer : uniqueShapeIds) {
                        Config.debug("Shape Id's unique "+integer);
                        pdftron.PDF.Annots.Ink ink = pdftron.PDF.Annots.Ink.create(
                                mPDFViewCtrl.getDoc(),
                                getAnnotationRect(pointsArray, integer));
                        for (SaveAnnotationState annot : pointsArray) {
                            Config.debug("Draw "+annot.getxCord()+" "+annot.getyCord()+" "+annot.getPathIndex()+" "+annot.getPointIndex());
                            Point pt = new Point(annot.getxCord(), annot.getyCord());

                            ink.setPoint(annot.getPathIndex(), annot.getPointIndex(),pt);
                            ink.setColor(
                                    new ColorPt(annot.getR()/255, annot.getG()/255, annot
                                            .getB()/255), 3);
                            ink.setOpacity(annot.getOpacity());
                            BorderStyle border=ink.getBorderStyle();
                            border.setWidth(annot.getThickness());
                            ink.setBorderStyle(border);

                        }
                        ink.refreshAppearance();
                        Page page = mPDFViewCtrl.getDoc().getPage(mPDFViewCtrl.getCurrentPage());
                        Annot mAnnot=ink;
                        page.annotPushBack(mAnnot);
                        mPDFViewCtrl.update(mAnnot, mPDFViewCtrl.getCurrentPage());


                    }

Кто-нибудь может сказать мне, что здесь происходит не так?

1 ответ

На типичной странице PDF нижний левый угол страницы имеет координату 0,0. Однако для аннотаций источником является нижний левый угол прямоугольника, указанного в записи BBox. Запись BBox - это третий параметр вашего вызова Ink.Create, который, к сожалению, называется pos.

Это означает, что Rect, переданный в Ink.Create, должен быть минимальным выравнивающим ось ограничивающим прямоугольником всех точек, которые составляют Ank Ink.

Я подозреваю, что в вашем вызове getAnnotationRect вы начинаете с Rect(), который действительно является Rect(0,0,0,0), поэтому, когда вы объединяете все остальные точки, вы получаете завышенный Rect.

Что вы должны сделать, это сохранить BBox в вашей базе данных, вызвав Annot.getRect().

Если это невозможно или слишком поздно, инициализируйте Rect с первой точкой в ​​вашей базе данных.

Rect rect = new Rect(pt.x, pt.y, pt.x, pt.y);

API: http://www.pdftron.com/pdfnet/mobile/docs/Android/pdftron http://www.pdftron.com/pdfnet/mobile/docs/Android/pdftron/PDF/Annot.html

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