我正在尝试绘制注释,并且在80%的时间内注释正确绘制,但有时注释会在中间切割,然后在我放大并缩小注释完全绘制之后。
这是我绘制注释的代码:
public void createNoteIconOnPage(AnnotationData annotationData, Point noteIconPoint) {
try {
mPDFView.docLock(true);
PDFDoc pdfDoc = mPDFView.getDoc();
double[] pts = mPDFView.convScreenPtToPagePt(noteIconPoint.x, noteIconPoint.y, annotationData.getPage());
Point p = new Point(pts[0], pts[1]);
com.pdftron.pdf.annots.Text text = com.pdftron.pdf.annots.Text.create(pdfDoc, p);
text.setUniqueID(annotationData.getUniqueId());
//creating the annotation appearance - icon
// Let's create an appearance for the annotation using an image
ElementBuilder builder = new ElementBuilder();
ElementWriter writer = new ElementWriter();
writer.begin(pdfDoc);
Bitmap imageBitmap = Bitmap.createBitmap(150, 150, Bitmap.Config.ARGB_8888);
imageBitmap.eraseColor(Color.RED);
Image image = Image.create(mPDFView.getDoc(), imageBitmap);
// Image image = Image.create(pdfDoc, annotationData.getDrawable());
int w = image.getImageWidth(), h = image.getImageHeight();
Element element = builder.createImage(image, 0, 0, w, h);
writer.writePlacedElement(element);
writer.writeElement(builder.createTextBegin(Font.create(pdfDoc, Font.e_times_roman), 12));
writer.writeElement(element);
writer.writeElement(builder.createTextEnd());
Obj appearance = writer.end();
appearance.putRect("BBox", 0.1, 0.1, w, h);
text.setAppearance(appearance);
/*
The left icons spouse to be bigger the the regular icons
*/
if(annotationData.getType() == AnnotationData.AnnotationType.LINK && (annotationData.getShard() == AnnotationData.LEFT_LINK_A || annotationData.getShard() == AnnotationData.LEFT_LINK_B)){
text.setRect(new Rect(pts[0],pts[1],pts[0] + 30,pts[1] + 30));
}
if (annotationData.getType() == AnnotationData.AnnotationType.NOTE) {
text.setContents(AnnotationData.NOTE_TYPE_CONTENTS);
} else if (annotationData.getType() == AnnotationData.AnnotationType.LINK) {
text.setContents(AnnotationData.LINK_TYPE_CONTENTS);
}
Page page = pdfDoc.getPage(annotationData.getPage());
if (page != null) {
page.annotPushBack(text);
}
mAnnotPushedBack = true;
mAnnot = text;
mAnnotPageNum = mDownPageNum;
buildAnnotBBox();
mPDFView.update(mAnnot, mAnnotPageNum);
raiseAnnotationAddedEvent(mAnnot, mAnnotPageNum);
} catch (Exception ex) {
Log.e(PDFTronReader.TAG, ex.toString());
mNextToolMode = ToolManager.e_pan;
} finally {
mPDFView.docUnlock();
}
mPDFView.waitForRendering();
}
如您所见,我们在左侧尺寸中有3个注释(3个红色方块),第一个在中间切割
有人知道为什么会这样吗? 谢谢大家。
答案 0 :(得分:2)
我认为annotationData.getPage()
返回的内容与mAnnotPageNum
之间存在差异。
我会围绕这两个变量之一整合这段代码。也就是说,使用一个或另一个。我怀疑20%的时间他们不是同一个数字。
此外,Text annots只有一个位置,因为它们的大小是固定的。它们不像普通注释那样缩放。所以我会将对buildAnnotBBox
的调用注释掉。
我会改变的其他事情。
如上所述,尺寸是固定的。所以删除以下行
text.setRect(new Rect(pts[0],pts[1],pts[0] + 30,pts[1] + 30));
您将BBox
来源设置为0.1
,根据您的自定义外观,该值应为0.