gpt4 book ai didi

ios - 如何使用 Objective-C 在 iOS 中的 PDF 上绘制平滑的墨水注释

转载 作者:行者123 更新时间:2023-12-01 16:29:44 36 4
gpt4 key购买 nike

我正在使用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);

问题是我如何制作一个涵盖每个点的数组。我从触摸委托(delegate)方法(例如 TouchesMoved)中获得点数,但是当用户以高速绘制时,会跳过一些点/像素,而 pdf 无法为自己插入这些跳过的点。贝塞尔曲线可以插值并绘制平滑曲线,但贝塞尔曲线不提供所有点的数组(包括跳过的点),我需要这样的数组,以便在 adobe reader 中打开 pdf 时,它显示平滑曲线。现在我在任何 iOS 设备上都能获得平滑的曲线,但在 adobe reader 上曲线并不平滑。这是曲线的比较,一个在模拟器中使用贝塞尔曲线绘制,另一个在 adobe reader 中绘制。

enter image description here

上图取自 iPad 模拟器,使用贝塞尔曲线绘制,平滑。

enter image description here

上图取自adobe reader。你可以看到红色曲线不像蓝色曲线那样平滑。我怎样才能使它顺利?

最佳答案

根据 InkList 的 PDF 1.3 规范大批:

An array of n arrays, each representing a stroked path. Each array is a series of alternating x and y coordinates in default user space, specifying points along the path. When drawn, the points are connected by straight lines or curves in an implementation-dependent way. (See implementation note 60 in Appendix H.)



从注释 60 开始:

Acrobat viewers always connect the points along each path with straight lines.



所以你不能像贝塞尔曲线那样有平滑的线条。直到版本 1.7 都是如此。

使其平滑的唯一方法是使用 Core Graphics 渲染为图像并将其添加到 PDF。

关于ios - 如何使用 Objective-C 在 iOS 中的 PDF 上绘制平滑的墨水注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451118/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com