pdfのはなし2
TRANSCRIPT
PDFのはなし 其の二How to Use CGPDF API.
How to use CGPDF
• 何気にPDFのサポートはありがたい(Mac, iOS)Android, WP7は外部ライブラリが必要 (今日現在)
• APIはCで実装
Opening, Getting Information of the PDF
• CGPDFDocument (URL or DataProvider)
• CGPDFPageサイズ(Bounding Box, Clipping Box), 回転, ページ数, メタデータ, バージョン, パスワードロック
• CFType (を継承)
Sample Code
• Apple Developer: ZoomingPDFViewer
key: 拡大縮小, 非同期描画, TiledLayer
• Parent-Children モデル
• CGPDFDocument-CGPDFPage
• Pageよりも先にDocumentを解放してしまわないように注意!!
Memory Management
PageDocumentRetain/strong
Assign/weak
Drawing
• CGContextDrawPDFPageパスの多いPDFや画像の大きいPDFは描画に時間がかかる
• 非同期描画がおすすめe.g. CATiledLayer
• c.f. 先ほどのZoomingPDFViewer
いよいよPDF内部へ• CGPDFScanner: ContentStream(≒ページ内) のPDFオペレータを解析
• CGPDFDocumentGetCatalog: DocumentのCatalog(≒ルートオブジェクト)を取得
• CGPDFPageGetDictionary: ページを起点とするPDFオブジェクトを取得
✴ NOTE: Not CF Type
API PDFObject
CGPDFObject - (汎用型)
CGPDFDictionary Dictionary
CGPDFArray Array
CGPDFString String
CGPDFStream Stream
Q. 目次を取得するには?
• PDFのCatalogから目次データをパース
Q. Unicodeテキストに変換するには
1. テキスト関連のオペレータを抽出
2. グリフ番号からUnicodeに変換
3. 位置的構造を解析
4. テキストに変換
Q. 書き出しする
• CGPDFContext を使う
• 別のライブラリを使う• 自分で実装する (解析よりも楽)