iOS下使用Swift+PDFKit检测PDF页面方向并按需添加按钮组件
解决方案
PDFKit 中没有你代码里写的page.orientation公开属性,要判断页面是否为横屏,最稳妥的方式是对比页面裁剪框(cropBox)的宽高:宽度大于高度即为横屏模式。
修正后的实现代码
首先是调整判断逻辑后的openPDFDocument方法:
func openPDFDocument() { if let documentURL = Bundle.main.url(forResource: "PDF document", withExtension: "pdf"), let document = PDFDocument(url: documentURL), let page = document.page(at: 0) { // 将文档加载到视图、开启自动缩放、设置背景色 pdfView?.document = document pdfView?.autoScales = true pdfView?.backgroundColor = UIColor.lightGray // 判断页面是否为横屏:宽大于高 let pageCropBounds = page.bounds(for: .cropBox) if pageCropBounds.width > pageCropBounds.height { self.insertResetButtonInto(page) } else { // 其他逻辑 } } }
你提供的insertResetButtonInto方法本身逻辑正确,可以直接使用:
func insertResetButtonInto(_ page: PDFPage) { let pageBounds = page.bounds(for: .cropBox) let resetButtonBounds = CGRect(x: 90, y: pageBounds.size.height - 300, width: 106, height: 32) let resetButton = PDFAnnotation(bounds: resetButtonBounds, forType: PDFAnnotationSubtype(rawValue: PDFAnnotationSubtype.widget.rawValue), withProperties: nil) resetButton.widgetFieldType = PDFAnnotationWidgetSubtype(rawValue: PDFAnnotationWidgetSubtype.button.rawValue) resetButton.widgetControlType = .pushButtonControl resetButton.caption = "Reset" page.addAnnotation(resetButton) // 绑定重置表单的动作,清空表单字段 let resetFormAction = PDFActionResetForm() resetFormAction.fieldsIncludedAreCleared = false resetButton.action = resetFormAction }
补充说明
- 如果你需要给PDF所有页面都添加重置按钮,遍历
document.pageCount获取所有页面对象判断即可,不需要只取第0页 - 如果你需要基于页面原始旋转角度判断,也可以读取
page.rotation属性:返回值为0/90/180/270,代表页面顺时针旋转的角度,旋转90/270度的页面通常为横屏
内容的提问来源于stack exchange,提问作者Rami Ammoun
相关产品推荐
相关产品推荐

