【发布时间】:2015-05-19 16:38:59
【问题描述】:
你们用过 RM SDK for iOS 吗? RM SDK 以如下格式保存注解:
startBookmark = "#pdfloc(bd0d,0,101,5,2,0,0,1)"; endBookmark = "#pdfloc(bd0d,0,101,14,0,0,1,1)";
我们如何从这两行得到 rect?
【问题讨论】:
你们用过 RM SDK for iOS 吗? RM SDK 以如下格式保存注解:
startBookmark = "#pdfloc(bd0d,0,101,5,2,0,0,1)"; endBookmark = "#pdfloc(bd0d,0,101,14,0,0,1,1)";
我们如何从这两行得到 rect?
【问题讨论】:
您拥有的 PDF 位置指向 PDF 文件中的特定对象。此对象与屏幕上的 (x,y) 坐标没有直接关系,因为这取决于您用于渲染 PDF 文件的分辨率和 DPI。它还取决于您用于渲染文件的渲染引擎。
要在 iOS 中绘制一个框,您需要使用 (x,y) 坐标来绘制它。您需要获取您正在使用的注释周围的框的 (x,y) 坐标。您可以使用 getRangeInfo 对 RMSDK 执行此操作。您还可以使用上面的 PDF 位置导航到特定的注释。请注意,您将返回的框仅对您拥有的参数的文件的再现有效。如果您更改任何参数 - RMSDK 版本、导航矩阵值、dpi、渲染分辨率,您将需要从 RMSDK 获取框的新值。
这里有一些代码可以帮助您使用 RMSDK 从两个位置获取 (x,y) 坐标。该代码用于主 C/C++ 库,因为我不确定您的 Objective-C 层是什么样的。根据您使用的 RMSDK 版本,可能会有所不同。
dpdoc::RangeInfo* rangeInfo = renderer->getRangeInfo(startBookmark, endBookmark);
dpdoc::Rectangle* rect;
rangeInfo->getBox(0, false, rect&);
那么“rect”变量将包含 (x,y) 坐标,用于您需要绘制的框。请注意,每 2 组坐标可能有多个框。在这种情况下,您需要遍历它们。
如果您确实有 RMSDK 通常附带的 Objective-C 层,那么它应该会稍微容易一些。在这种情况下,您的代码应如下所示:
NSArray *boxes = nil;
RMRangeInfo *rangeInfo = [document getRangeInfoWithStart:startBookmark end:endBookmark];
boxes = rangeInfo.boxes
然后您可以遍历框数组以获取 (x,y) 并将它们绘制在屏幕上。在大多数情况下,您将获得 1 个框,但您应该考虑到要绘制多个框的情况。一个简单的循环就可以解决问题。
【讨论】: