1

我目前正在开发一个应用程序,我们想从远程服务器下载 PDF 然后在上面绘图。我们想在 PDF(静态绘制部分)上绘制 Google Maps pin-like annotation。此外,我们想检测用户是否触摸了一个图钉,然后在此 PDF 上绘制一个标注框(动态绘制部分)。我们显然希望 pdf 可以滚动/缩放。有谁知道实现这一目标的好方法?

我研究过的东西:1)在 UIWebView 中渲染。这似乎是一个很好的解决方案,但我不清楚如何在 PDF 上实现绘图代码。我听说有人说在 UIWebView 上方创建一个透明的 UIView 用于绘图。这似乎伴随着它的问题,它将如何处理缩放和滚动?

2) 使用 Quartz 2D 并从我从服务器获取的 PDF 生成我自己的 PDF。当我绘制自己的 PDF 内容时,我可以绘制静态标记图钉。一旦我有了这个 PDF,我就可以把它放到 WebView 中。然而,这种方法的问题是,当用户点击图钉时,我仍然需要处理标注框的动态绘制,这有点让我回到问题 1。

4

1 回答 1

2

你说得对,苹果在这个问题上没有提供太多东西。有UIWebView哪些可以预览和显示 PDF 文档,但它确实不适合添加注释,并且任何带有视图的“解决方案”都将非常脆弱,如果你能做到的话。它的意思是作为一个黑匣子来阅读 PDF 文档,而不是用于注释。

您必须一直返回CGContextRef并自己接管滚动、缩放和触摸处理/绘图。Apple 的ZoomingPDFViewer示例是一个好的开始。

自 2010 年以来,我一直在研究这个问题,我们为 iOS、Android 和 Web 的 PDF 注释提供了一个商业解决方案,称为 PSPDFKit。我们发布了一个自定义渲染器,它比 Apple 的 CoreGraphics 渲染器更好、更精确,但更有趣的是我们可以处理所有常见的 PDF 注释类型。您可以使用注释注释代表您的引脚并移动它们,添加注释,交互/覆盖默认的点击处理(例如,当人们点击它们时显示您自己的弹出窗口)。它们的大小也始终相同 - 因此它们可以固定在 PDF 中的某个确切点,然后您可以在它们保持相同大小的同时进行放大。最好的部分是这都是 PDF 规范的一部分,因此它们也可以与 Apple 的 Preview 应用程序或 Adob​​e Acrobat 一起使用,因此人们可以保存/自定义标记,然后所有内容都可以保存在 PDF 中。该架构非常灵活,因此您还可以简单地将所有内容保存在数据库中或将其同步备份到您的服务器,然后简单地将其用于触摸处理。

您也可以自己构建它 - 基本架构是一个UIScrollView和管理的视图。当您进行缩放并拥有需要保持相同大小+触摸处理的视图时,它很快就会变得棘手,也许您还想要多选或常规墨水绘图之类的东西。您还需要添加某种图像缓存层,因为在移动设备上渲染 PDF 文档可能会很慢。哦,如果您想使文本可选择或实现搜索,请准备好迎接称为Adob​​e CMap 和 CIDFont 文件规范的兔子洞。

于 2016-05-12T07:45:26.767 回答