问题标签 [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.
ios - 适用于 iPhone / iPad / iOS 的快速精益 PDF 查看器 - 提示和提示?
最近有很多关于绘制 PDF 的问题。
是的,您可以使用 a 轻松渲染 PDF,UIWebView
但这不能提供您期望从一个好的 PDF 查看器获得的性能和功能。
您可以将 PDF 页面绘制到 CALayer或UIImage。Apple 甚至有示例代码来展示如何在可缩放 UIScrollview 中绘制大型 PDF
但同样的问题不断出现。
UIImage 方法:
- PDF 在
UIImage
不光学缩放以及图层方法中。 - CPU 和内存在生成
UIImages
限制PDFcontext
/阻止时使用它来创建新缩放级别的实时渲染。
CATiledLayer 方法:
- 将完整的 PDF 页面绘制到一个显着的开销(时间)
CALayer
:可以看到单个图块呈现(即使使用 tileSize 调整) 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 功能:
获取 PDF 中的链接(以及此处和此处)
获取链接的目标
/Dest
(从数组中获取页码)
搜索(和此处)(不适用于所有 PDF(有些只是显示奇怪的字符,我猜这是编码问题,但我不确定)-Credit BrainFeeder)
CALayer 和屏幕外渲染- 渲染下一页以获得快速/流畅的显示
文档
- Quartz PDFObjects(用于元信息、注释、拇指)
- Abobe PDF 规范
示例项目
- Apple/ZoomingPDF - 缩放,
UIScrollView
,CATiledLayer
- vfr/阅读器- 缩放、分页
UIScrollView
、、CATiledView
- 眉毛/叶子- 带有漂亮过渡的分页
- /skim - 一切看起来(OSX 的 PDF 阅读器/编辑器)
storyboard - 我可以在 iOS 11 中通过 Storyboard 添加 PDFView
我正在创建一个 PDF 阅读器类型的应用程序,为此,我正在使用PDFKit
该应用程序中显示 PDF 文件。
我可以PDFView
通过代码添加并且工作正常。
但是我是否可以PDFView
通过添加storyboard
然后通过 Outlet 将 PDF 文件分配给该视图?
ios - PDFKit 交换注释的内容
可以在不删除注释/构建新注释的情况下在 PDFKit 中更改注释的文本(即contents
)吗?FreeText
在 a 中查看时,以下代码段不会更改注释的内容PDFView
:
这可行 - 但需要替换注释(因此必须复制注释的所有其他细节):
注意:添加/删除相同的注释也无济于事。
ios - PDFKit / PDFView 禁用与表单注释的交互
对于PDFDocument
包含带有 awidgetFieldType
的注释的 a PDFAnnotationWidgetSubtype.text
,PDFAnnotationWidgetSubtype.button
是否可以禁用这些注释的用户交互(即单击复选框不会导致它切换)?
ios - 如何在 PDFView 中启用连续文本的选择以便我可以添加注释?
目前,我已经使用 PDFDocument 在 PDFView 上呈现了一个示例 pdf 文件。
因此,当我在视图上滑动时,它会在我使用 pageViewController 时分别滑到下一页或上一页。
问题就出现在这里,
如果我想注释文本的某些部分,那么当我开始拖动文本时,它会滑动到下一页而不是连续选择文本。
如果我长按,那么我只能选择一个单词或使用 Copy 选择本机操作系统,Selectall 会弹出,这不是我的要求。
当用户开始选择文本时,我需要添加高亮注释。
ios - Apple PDFKit - 带有验证脚本的 PDF 问题。
我有一组 PDF 文件,其中使用 JavaScript 嵌入了一些验证。验证,如日期或时间格式、从各个字段计算的总数等。
我已经测试了这些 PDF,它们在 Mac Chrome 浏览器、Windows Chrome 浏览器、Windows Adobe Reader 和 iPad Adobe Reader 上运行良好。但是,当使用 Apple PDFKit 以PDFView
. 它不会像在 iPad Adobe Reader App 中那样验证、格式化任何字段或给出弹出验证错误。出于测试目的,我将此 pdf 保存在应用程序中并直接从那里访问它。
是否可以获得与 iPad Adobe Reader 应用程序相同的功能,当出现错误时我们会收到验证错误/弹出窗口?
ios - 使用 UIGraphicsPDFRenderer 创建 PDF 时添加页脚,如“y 页 x”
我正在我的应用程序中开发一个功能,该功能允许用户将他们的数据导出到设计精美的 PDF 中。
我正在使用UIGraphicsPDFRenderer
这个,我浏览了Apple 的文档。
我在添加像“y 页 x”这样的页脚时遇到问题。虽然“x”很容易 - 我在确定“y”时遇到了麻烦,因为我只知道在完全呈现 PDF 后我的文档有多少页。由于布局相当复杂,我无法提前确定页数。
现在我也知道新页面是用beginPage()
. 有没有办法转到上一页?- 因为那时我可以简单地浏览文档并添加缺少的页脚。
这是我在 Swift 4 中使用的代码(非常简化,但应该足以理解):
ios - PDFDestination 没有给我正确的信息(Apple PDFKit)
我有一个技术图纸的 PDF 文件,其中包含一个页面,其中包含链接到文档特定区域的书签。
当我在 Adobe Reader 或 Foxit Reader 中单击这些书签时,它会放大到这个指定区域。但在 Apple 的 Preview.app 或 iBooks 或基于 PDFKit 的 iOS 应用程序中,它将无法工作。甚至 PSPDFKit 也无法处理这些书签。
我正在构建一个PDFView
可以处理这些书签的基于 iOS 的应用程序。当我调试PDFOutline
属性时,我可以看到包含PDFDestination
的对象包含信息,但在私有字段中。我可以在调试期间观看它们。
此外,当我访问对象的description
属性时PDFDestination
,我得到以下信息:
但是值zoom
和point
返回3.40282347e+38F
值是 32 位系统上的最大值,CGFloat
这意味着它们没有正确设置。
PDFView
配置
这是更多代码,显示了我如何配置我的PDFView
去PDFOutline
问题
- 那些现有的插入值没有正确计算属性
zoom
和point
的属性是 PDFKit 中的一个错误吗?PDFDestination
- 我可以解析
description
ofPDFDestination
并使用这些值吗?还是苹果会因为访问私人信息而拒绝我的应用程序?
更新
我在 Apple 提交了一个错误,并在收到回复时更新此问题。
macos - 如何以编程方式将 PDF 数据发送到打印机?
在 MacOS 中,我使用 python 编写 PDF 服务工作流,在处理传入的 PDF(使用 PyObjC Quartz API 操作它)之后,我想将它发送回打印队列并在没有任何用户努力的情况下打印它。
是否可以将图形上下文或 PDFKit 数据直接发送到打印机?
ios - 应该如何定义 PDFView usePageViewController withViewOptions 的选项字典:
应该如何为 PDFKit 中的 PDFView 定义 pageViewController 的选项字典?
我对这面旗帜特别感兴趣
UIPageViewController.NavigationOrientation.horizontal