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