pdfのはなし2

11
PDF のはなし 其の二 How to Use CGPDF API.

Upload: yusuke-ito

Post on 24-May-2015

1.249 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: PDFのはなし2

PDFのはなし 其の二How to Use CGPDF API.

Page 2: PDFのはなし2

How to use CGPDF

• 何気にPDFのサポートはありがたい(Mac, iOS)Android, WP7は外部ライブラリが必要 (今日現在)

• APIはCで実装

Page 3: PDFのはなし2

Opening, Getting Information of the PDF

• CGPDFDocument (URL or DataProvider)

• CGPDFPageサイズ(Bounding Box, Clipping Box), 回転, ページ数, メタデータ, バージョン, パスワードロック

• CFType (を継承)

Page 4: PDFのはなし2

Sample Code

• Apple Developer: ZoomingPDFViewer

key: 拡大縮小, 非同期描画, TiledLayer

Page 5: PDFのはなし2

• Parent-Children モデル

• CGPDFDocument-CGPDFPage

• Pageよりも先にDocumentを解放してしまわないように注意!!

Memory Management

PageDocumentRetain/strong

Assign/weak

Page 6: PDFのはなし2

Drawing

• CGContextDrawPDFPageパスの多いPDFや画像の大きいPDFは描画に時間がかかる

• 非同期描画がおすすめe.g. CATiledLayer

• c.f. 先ほどのZoomingPDFViewer

Page 7: PDFのはなし2

いよいよPDF内部へ• CGPDFScanner: ContentStream(≒ページ内) のPDFオペレータを解析

• CGPDFDocumentGetCatalog: DocumentのCatalog(≒ルートオブジェクト)を取得

• CGPDFPageGetDictionary: ページを起点とするPDFオブジェクトを取得

✴ NOTE: Not CF Type

Page 8: PDFのはなし2

API PDFObject

CGPDFObject - (汎用型)

CGPDFDictionary Dictionary

CGPDFArray Array

CGPDFString String

CGPDFStream Stream

Page 9: PDFのはなし2

Q. 目次を取得するには?

• PDFのCatalogから目次データをパース

Page 10: PDFのはなし2

Q. Unicodeテキストに変換するには

1. テキスト関連のオペレータを抽出

2. グリフ番号からUnicodeに変換

3. 位置的構造を解析

4. テキストに変換

Page 11: PDFのはなし2

Q. 書き出しする

• CGPDFContext を使う

• 別のライブラリを使う• 自分で実装する (解析よりも楽)