3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

SwiftでPDFを表示・編集するために、PDFKitを初めて使う機会がありました。
その際に調べて利用したのが、PDFAnnotation(PDFの注釈機能)です。
もしPDFに編集などしたい、という方が他にいらっしゃった際の参考になれば幸いです。

PDFAnnotationを使うことで、PDFのページ毎に注釈を設定できます。
これにより、複数ページで構成されるPDFでページ間を移動しても、
注釈はページ毎の指定位置に設定されたままで、テキスト表示やハイライト、テキスト入力などが行えます。

また、タップしたPDFAnnotationはNotificationCenterで取得することができるので、
タップ時にハイライトにするなどの処理を行うこともできます。

ここでは、単純なPDFAnnotationの設定から、タップされた時の検知までを記載します。

①PDFに対してPDFAnnotationを設定する

注釈を設定したいPDFPageを指定して、定義したPDFAnnotationを設定します。
ここでは単純なテキスト表示を行うため、PDFAnnotationSubTypeにfreeTextを用いた例としています。
他にも様々な種類のPDFAnnotationSubTypeを指定して利用できます。
(参考: https://developer.apple.com/documentation/pdfkit/pdfannotationsubtype)

// PDFAnnotationの設定
let annotation = PDFAnnotation(bounds: CGRect(x: 200, y: 400, width: 200, height: 50), forType: .freeText, withProperties: nil)
annotation.contents = "PDFAnnotation"
annotation.font = .systemFont(ofSize: 14)
annotation.fontColor = .black
annotation.color = .clear

// 対象のPDFPageへPDFAnnotationを設定する
pdfView?.currentPage?.addAnnotation(annotation)

②PDF Annotationがタップされたかを監視、タップに対する処理を行う

次のようにNotificationCenterでPDFAnnotationのタップを検知できます。
ページ内に複数のPDFAnnotationがあっても、タップされたものを特定して個別の処理ができます。

// PDFAnnotationがタップされたかを監視する
NotificationCenter.default.addObserver(self, selector: #selector(action(_:)), name: .PDFViewAnnotationHit, object: nil)

@objc func action(_ sender: Any) {
    // タップされたPDFAnnotationを取得する
    guard let notification = sender as? Notification,
          let annotation = notification.userInfo?["PDFAnnotationHit"] as? PDFAnnotation else {
        return
    }

    // タップされたPDFAnnotationに対する処理
}

おわりに

PDFAnnotationはあくまでPDFの注釈ですが、うまく利用することでPDFへ直接テキストなどを埋め込んで編集する、などに応用できます。
このため、PDFAnnotationを利用することでPDFは意外と色々な編集ができることがわかりました。
何かの機会にPDF編集が必要だったら、この機能の利用を考えてみようと思います。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?