问题标签 [apple-pdfkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
102699 浏览

ios - 适用于 iPhone / iPad / iOS 的快速精益 PDF 查看器 - 提示和提示?

最近有很多关于绘制 PDF 的问题。

是的,您可以使用 a 轻松渲染 PDF,UIWebView但这不能提供您期望从一个好的 PDF 查看器获得的性能和功能。

您可以将 PDF 页面绘制到 CALayerUIImageApple 甚至有示例代码来展示如何在可缩放 UIScrollview 中绘制大型 PDF

但同样的问题不断出现。

UIImage 方法:

  1. PDF 在UIImage不光学缩放以及图层方法中。
  2. CPU 和内存在生成UIImages限制PDFcontext /阻止时使用它来创建新缩放级别的实时渲染。

CATiledLayer 方法:

  1. 将完整的 PDF 页面绘制到一个显着的开销(时间)CALayer:可以看到单个图块呈现(即使使用 tileSize 调整)
  2. CALayers无法提前准备(渲染到屏幕外)。

一般来说,PDF 查看器的内存也很重。甚至监控苹果的可缩放 PDF 示例的内存使用情况。

在我当前的项目中,我正在开发一个 PDF 查看器,并UIImage在一个单独的线程中呈现一个页面(这里也有问题!)并在比例为 x1 时呈现它。CATiledLayer一旦比例大于 1,渲染就会开始。iBooks 采用了类似的双重拍摄方法,就像您滚动页面时,您可以在不到一秒钟的时间内看到较低分辨率的页面,然后出现清晰的版本。

我在焦点页面的每一侧渲染 2 页,以便 PDF 图像在开始绘制之前准备好遮盖图层。当页面距离焦点页面 +2 页时,它们会再次被销毁。

有没有人有任何见解,无论改善绘图 PDF 的性能/内存处理多么小或多么明显?或这里讨论的任何其他问题?

编辑:一些提示(信用 - Luke Mcneice,VdesmedT,Matt Gallagher,Johann):

  • 尽可能将任何媒体保存到磁盘。

  • 如果在 TiledLayers 上渲染,请使用更大的 tileSizes

  • 用占位符对象初始化经常使用的数组,或者另一种设计方法是这个

  • 请注意,图像的渲染速度比CGPDFPageRef

  • 使用NSOperations或 GCD & Blocks提前准备页面。

  • 在绘图时调用CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);beforeCGContextDrawPDFPage以减少内存使用

  • 用docRef 初始化你NSOperations是一个坏主意(内存),将 docRef 包装成一个单例。

  • 不必要的取消NSOperations如果可以,尤其是当他们将使用内存时,请注意不要让上下文保持打开状态!

  • 回收页面对象并销毁未使用的视图

  • 不需要时立即关闭所有打开的上下文

  • 在收到内存警告时释放并重新加载 DocRef 和任何页面缓存

其他 PDF 功能:

文档

示例项目

0 投票
1 回答
1771 浏览

storyboard - 我可以在 iOS 11 中通过 Storyboard 添加 PDFView

我正在创建一个 PDF 阅读器类型的应用程序,为此,我正在使用PDFKit该应用程序中显示 PDF 文件。

我可以PDFView通过代码添加并且工作正常。

但是我是否可以PDFView通过添加storyboard然后通过 Outlet 将 PDF 文件分配给该视图?

0 投票
2 回答
2533 浏览

ios - PDFKit 交换注释的内容

可以在不删除注释/构建新注释的情况下在 PDFKit 中更改注释的文本(即contents)吗?FreeText

在 a 中查看时,以下代码段不会更改注释的内容PDFView

这可行 - 但需要替换注释(因此必须复制注释的所有其他细节):

注意:添加/删除相同的注释也无济于事。

0 投票
1 回答
1184 浏览

ios - PDFKit / PDFView 禁用与表单注释的交互

对于PDFDocument包含带有 awidgetFieldType的注释的 a PDFAnnotationWidgetSubtype.textPDFAnnotationWidgetSubtype.button是否可以禁用这些注释的用户交互(即单击复选框不会导致它切换)?

0 投票
1 回答
659 浏览

ios - 如何在 PDFView 中启用连续文本的选择以便我可以添加注释?

目前,我已经使用 PDFDocument 在 PDFView 上呈现了一个示例 pdf 文件。

因此,当我在视图上滑动时,它会在我使用 pageViewController 时分别滑到下一页或上一页。

问题就出现在这里,

如果我想注释文本的某些部分,那么当我开始拖动文本时,它会滑动到下一页而不是连续选择文本。

如果我长按,那么我只能选择一个单词或使用 Copy 选择本机操作系统,Selectall 会弹出,这不是我的要求。

当用户开始选择文本时,我需要添加高亮注释。

0 投票
1 回答
184 浏览

ios - Apple PDFKit - 带有验证脚本的 PDF 问题。

我有一组 PDF 文件,其中使用 JavaScript 嵌入了一些验证。验证,如日期或时间格式、从各个字段计算的总数等。

我已经测试了这些 PDF,它们在 Mac Chrome 浏览器、Windows Chrome 浏览器、Windows Adob​​e Reader 和 iPad Adob​​e Reader 上运行良好。但是,当使用 Apple PDFKit 以PDFView. 它不会像在 iPad Adob​​e Reader App 中那样验证、格式化任何字段或给出弹出验证错误。出于测试目的,我将此 pdf 保存在应用程序中并直接从那里访问它。

是否可以获得与 iPad Adob​​e Reader 应用程序相同的功能,当出现错误时我们会收到验证错误/弹出窗口?

0 投票
1 回答
625 浏览

ios - 使用 UIGraphicsPDFRenderer 创建 PDF 时添加页脚,如“y 页 x”

我正在我的应用程序中开发一个功能,该功能允许用户将他们的数据导出到设计精美的 PDF 中。

我正在使用UIGraphicsPDFRenderer这个,我浏览了Apple 的文档

我在添加像“y 页 x”这样的页脚时遇到问题。虽然“x”很容易 - 我在确定“y”时遇到了麻烦,因为我只知道在完全呈现 PDF 后我的文档有多少页。由于布局相当复杂,我无法提前确定页数。

现在我也知道新页面是用beginPage(). 有没有办法转到上一页?- 因为那时我可以简单地浏览文档并添加缺少的页脚。

这是我在 Swift 4 中使用的代码(非常简化,但应该足以理解):

0 投票
0 回答
377 浏览

ios - PDFDestination 没有给我正确的信息(Apple PDFKit)

我有一个技术图纸的 PDF 文件,其中包含一个页面,其中包含链接到文档特定区域的书签。

当我在 Adob​​e Reader 或 Foxit Reader 中单击这些书签时,它会放大到这个指定区域。但在 Apple 的 Preview.app 或 iBooks 或基于 PDFKit 的 iOS 应用程序中,它将无法工作。甚至 PSPDFKit 也无法处理这些书签。

我正在构建一个PDFView可以处理这些书签的基于 iOS 的应用程序。当我调试PDFOutline属性时,我可以看到包含PDFDestination的对象包含信息,但在私有字段中。我可以在调试期间观看它们。

在此处输入图像描述

此外,当我访问对象的description属性时PDFDestination,我得到以下信息:

但是值zoompoint返回3.40282347e+38F值是 32 位系统上的最大值,CGFloat这意味着它们没有正确设置。


PDFView配置

这是更多代码,显示了我如何配置我的PDFView

PDFOutline


问题

  1. 那些现有的插入值没有正确计算属性zoompoint的属性是 PDFKit 中的一个错误吗?PDFDestination
  2. 我可以解析descriptionofPDFDestination并使用这些值吗?还是苹果会因为访问私人信息而拒绝我的应用程序?

更新

我在 Apple 提交了一个错误,并在收到回复时更新此问题。

0 投票
2 回答
125 浏览

macos - 如何以编程方式将 PDF 数据发送到打印机?

在 MacOS 中,我使用 python 编写 PDF 服务工作流,在处理传入的 PDF(使用 PyObjC Quartz API 操作它)之后,我想将它发送回打印队列并在没有任何用户努力的情况下打印它。

是否可以将图形上下文或 PDFKit 数据直接发送到打印机?

0 投票
1 回答
574 浏览

ios - 应该如何定义 PDFView usePageViewController withViewOptions 的选项字典:

应该如何为 PDFKit 中的 PDFView 定义 pageViewController 的选项字典?

我对这面旗帜特别感兴趣

UIPageViewController.NavigationOrientation.horizo​​ntal