2

我正在从存储在数据库中的点绘制墨水注释。这些点是从先前在 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());


                    }

谁能告诉我这里出了什么问题?

4

1 回答 1

0

在典型的 PDF 页面上,页面的左下角是坐标 0,0。但是,对于注释,原点是 BBox 条目中指定的矩形的左下角。BBox 条目是调用 Ink.Create 的第三个参数,不幸的是它被称为 pos。

这意味着传入 Ink.Create 的 Rect 应该是构成 Ink Annot 的所有点的最小轴对齐边界框。

我怀疑在您对 getAnnotationRect 的调用中,您从 Rect() 开始,它实际上是 Rect(0,0,0,0),因此当您合并所有其他点时,您最终会得到一个膨胀的 Rect。

您应该做的是通过调用 Annot.getRect() 将 BBox 存储在数据库中。

如果这是不可能的,或者为时已晚,则使用数据库中的第一个点初始化 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#getRect%28 %29/PDF/Annot.html#create%28pdftron.SDF.Doc,%20int,%20pdftron.PDF.Rect%29

于 2015-03-09T16:56:50.840 回答