【Swift/PDFKit】画像(UIImage)をPDFファイルに変換やページの追加など操作する方法!
この記事からわかること
- Swiftで画像(UIImage)PDFに変換する方法
- PDFKitとは?
- PDFDocumentの使い方
- ページやテキストを追加するには?
- 端末に保存する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.0
- Swift:5.9
- macOS:Sonoma 14.1
Swiftで画像をPDFに変換する方法
Swiftで画像(UIImage)をPDFファイルに変換する方法は2つあります。
1.UIGraphicsBeginPDFContextToData
UIGraphicsBeginPDFContextToData
は、Core Graphicsを使用してPDFコンテキストを作成し、データバッファにPDFデータを書き込むためのグローバル関数です。直接データバッファに書き込むため、一度に大量のデータを処理する場合に効率的ですが、使用方法は少し難しくなっています。
PDFKitとは?
PDFKit
はiOSおよびmacOSアプリケーションでPDFファイルを作成、表示、および操作するための公式のフレームワークです。UIGraphicsBeginPDFContextToData
よりも簡素なAPIでPDFを操作することができるようになっており、PDF文書の表示、検索、注釈の追加、ページの結合など、豊富な機能を提供しています。
PDFKitの使い方
PDFKit
を使用するためには以下のimport
文を記述します。公式のフレームワークなので特に導入手順は必要なくすぐに使うことが可能です。
import PDFKit
PDFドキュメント(ファイル)の作成
PDFKitではPDFDocument
クラスを使用して空のPDFドキュメント(PDFファイル)を生成します。
let pdfDocument = PDFDocument()
ページの追加
作成したPDFドキュメントに空のページを追加したい場合はPDFPage
をインスタンス化してinsert
メソッドを実行します。引数には対象のページと追加するページ番号を渡します。
// 空のページを作成してPDFDocumentに追加
if let page = PDFPage() {
pdfDocument.insert(page, at: pdfDocument.pageCount)
}
UIImageをPDFページとして追加する
PDFドキュメントに画像(UIImage)をそのままページとして追加したい場合はPDFPage(image:)
を使用してインスタンス化してinsert
するだけです。
// UIImageをページとして作成してPDFDocumentに追加
if let pdfPage = PDFPage(image: image) {
pdfDocument.insert(pdfPage, at: pdfDocument.pageCount)
}
テキストを追加する
PDFページにテキストを追加したい場合はCATextLayer
を使用して追加したいテキストの位置やサイズ、文言を定義します。続いてPdfDocument.page(at:)
メソッドを使用して追加したいページを取得し、addAnnotation
メソッドを使用してテキストを描画しています。
let text = "Hello, World!"
let textLayer = CATextLayer()
textLayer.string = text
textLayer.frame = CGRect(x: 100, y: 100, width: 200, height: 50) // テキストの位置とサイズを指定
if let currentPage = pdfDocument.page(at: 0) {
currentPage.addAnnotation(textLayer)
}
保存する
作成したPDFドキュメントを保存したい場合はwrite(to:)
メソッドを使用します。
guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
return
}
let pdfURL = documentsDirectory.appendingPathComponent("generated.pdf")
pdfDocument.write(to: pdfURL)
既存のPDFファイルを読み込む
既存のPDFファイルに対してページの追加などを行いたい場合はPDFDocument(url:)
を使用してPDFドキュメントを取得すればOKです。
let pdfDocument = PDFDocument(url: pdfURL)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。