我正在使用objective-c在pdf中绘制墨水注释。pdf规范说我们需要为墨水绘图提供一个点数组。我正在使用PoDoFo库。
这就是我目前绘制墨水注释的方式:
PoDoFo::PdfArray arr; //This is the array of points to be drawn
arr.push_back(X1);
arr.push_back(Y1);
arr.push_back(X2);
arr.push_back(Y2);
arr.push_back(X3);
arr.push_back(Y3);
.
.
.
arr.push_back(Xn-1);
arr.push_back(Yn-1);
arr.push_back(Xn);
arr.push_back(Yn);
PoDoFo::PdfMemDocument* doc = (PoDoFo::PdfMemDocument *)aDoc;
PoDoFo::PdfPage* pPage = doc->GetPage(pageIndex);
//PageIndex is page number
if (! pPage) {
// couldn't get that page
return;
}
PoDoFo::PdfAnnotation* anno;
PoDoFo::EPdfAnnotation type= PoDoFo::ePdfAnnotation_Ink;
PoDoFo::PdfRect rect;
rect.SetBottom(aRect.origin.y);
rect.SetLeft(aRect.origin.x);
rect.SetHeight(aRect.size.height);
rect.SetWidth(aRect.size.width);
//aRect is CGRect where annotation is to be drawn on page
anno = pPage->CreateAnnotation(type , rect);
anno->GetObject()->GetDictionary().AddKey("InkList", arr);
问题是我如何制作一个涵盖每个点的数组。我从触摸委托方法(例如 TouchesMoved)中获取点,但是当用户以高速绘制时,会跳过一些点/像素,并且 pdf 不能为自己插入这些跳过的点。贝塞尔曲线可以插值并绘制平滑曲线,但贝塞尔曲线不提供所有点的数组(包括跳过的点),我需要这样一个数组,以便在 adobe reader 中打开 pdf 时,它显示平滑曲线。现在我在任何 iOS 设备上都能获得平滑的曲线,但在 adobe reader 上曲线并不平滑。这是曲线的比较,一个在模拟器中使用贝塞尔曲线绘制,另一个在 adobe reader 中绘制。
上图取自 iPad 模拟器,使用贝塞尔曲线绘制,平滑。
上图取自adobe reader。你可以看到红色曲线不像蓝色曲线那样平滑。我怎样才能使它顺利?