首页
学习
活动
专区
圈层
工具
发布

PdfKit注释突出显示并保存IOS 11

PDFKit 在 iOS 11 中的注释和突出显示功能

基础概念

PDFKit 是 Apple 提供的框架,用于在 iOS 和 macOS 应用中显示和操作 PDF 文档。在 iOS 11 中,Apple 对 PDFKit 进行了重大更新,增加了注释和标记功能。

主要功能

  1. 注释类型
    • 文本高亮(Highlight)
    • 下划线(Underline)
    • 删除线(StrikeOut)
    • 自由文本注释(FreeText)
    • 印章(Stamp)
    • 手写(Ink)
    • 链接(Link)
    • 方形/圆形标注(Square/Circle)
  • 突出显示功能
    • 支持多种颜色选择
    • 可调整透明度
    • 支持多页文档的注释

实现代码示例

代码语言:txt
复制
import PDFKit

// 创建PDFView
let pdfView = PDFView(frame: view.bounds)
pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(pdfView)

// 加载PDF文档
if let url = Bundle.main.url(forResource: "sample", withExtension: "pdf") {
    pdfView.document = PDFDocument(url: url)
}

// 添加高亮注释
func addHighlightAnnotation(to page: PDFPage, text: String, color: UIColor) {
    // 查找文本范围
    let selections = page.selectionForRange(pdfView.document!.findString(text, withOptions: .caseInsensitive))
    
    // 创建高亮注释
    let highlight = PDFAnnotation(bounds: selections.bounds(for: page), forType: .highlight, withProperties: nil)
    highlight.color = color.withAlphaComponent(0.5)
    
    // 添加注释到页面
    page.addAnnotation(highlight)
}

// 添加自由文本注释
func addTextAnnotation(to page: PDFPage, text: String, at point: CGPoint) {
    let textAnnotation = PDFAnnotation(bounds: CGRect(x: point.x, y: point.y, width: 200, height: 50), 
                                      forType: .freeText, 
                                      withProperties: nil)
    textAnnotation.contents = text
    textAnnotation.font = UIFont.systemFont(ofSize: 14)
    textAnnotation.color = .blue
    page.addAnnotation(textAnnotation)
}

// 保存带注释的PDF
func saveAnnotatedPDF() {
    if let document = pdfView.document {
        let data = document.dataRepresentation()
        try? data?.write(to: URL(fileURLWithPath: "/path/to/save.pdf"))
    }
}

常见问题及解决方案

1. 注释不显示或保存后丢失

原因

  • 注释可能没有正确关联到页面
  • 保存时没有使用正确的数据表示方法

解决方案

代码语言:txt
复制
// 确保使用document的dataRepresentation()方法保存
if let document = pdfView.document {
    let data = document.dataRepresentation()
    // 保存data到文件
}

2. 高亮位置不正确

原因

  • 文本选择范围计算错误
  • 坐标系转换问题

解决方案

代码语言:txt
复制
// 使用正确的坐标系转换
let pageBounds = page.bounds(for: .cropBox)
let annotationBounds = selections.bounds(for: page).applying(CGAffineTransform(translationX: 0, y: -pageBounds.height))

3. 在iOS 11上性能问题

原因

  • iOS 11是PDFKit注释功能的初始版本,可能存在性能优化不足

解决方案

  • 限制同时显示的注释数量
  • 使用后台队列处理复杂的注释操作

应用场景

  1. 电子书阅读器:允许用户高亮重要段落
  2. 文档审阅工具:团队成员可以在PDF上添加评论和标记
  3. 教育应用:学生可以在教材上做笔记
  4. 合同签署应用:添加签名和填写表格

注意事项

  1. iOS 11的PDFKit注释功能相比后续版本功能较少
  2. 某些高级注释类型可能在iOS 11上不可用
  3. 注释的序列化和反序列化需要特别注意兼容性
  4. 在低内存设备上处理大型带注释PDF可能导致性能问题
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券