coregraphicsを使って、PDFを作成してみる | いもはとのブログ

いもはとのブログ

iOSの技術系ブログです。

coregraphicsを使って、PDFを作成してみる

こっちのがlibharuに比べて、シンプル
理由:特別な外部フレームワークの追加が必要ない
   iOS標準のフレームワークだけで簡単に作成できる

利用シーンは、さっきと同じにしてみる
UIImageをPDFに貼付けて作成


//libharuを使わずに、PDFを作ってみる
// pathは、アプリHomeから、ファイル名を含めてたパス
//pngImageは、UIImage。今回は、UIImageに入れたのが、pngだったから、そんな名前にしてみた
- (void) createPDFFileOfCoreGraphics:(NSString*)path
pngImage:(UIImage*)pngImage
{
//ファイル情報の作成
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
[dic setObject:@"PDF Title" forKey:(NSString*)kCGPDFContextTitle];
[dic setObject:@"Creator Name" forKey:(NSString*)kCGPDFContextCreator];

//コンテキストとファイルの生成
//NULLのときletterサイズ
//ここでは、イメージのサイズとあわせてみる
CGRect pageRect = CGRectMake(0, 0, pngImage.size.width, pngImage.size.height);
NSURL *url = [NSURL fileURLWithPath:path];
CGContextRef context = CGPDFContextCreateWithURL((CFURLRef)url, &pageRect, (CFMutableDictionaryRef)dic);

// 1ページ開始
CGPDFContextBeginPage(context, (CFMutableDictionaryRef)dic);
UIGraphicsPushContext(context);

//上下反転の対処
CGContextTranslateCTM(context, 0, pageRect.size.height);
CGContextScaleCTM(context, 1, -1);

//イメージの描写
UIImage * img = pngImage;
[img drawAtPoint:CGPointMake(0, 0)];
//[img release];

//1ページ目終了
UIGraphicsPopContext();
CGPDFContextEndPage(context);

// 設定の解放
CGContextRelease(context);
[dic release];
}


基本的にさっきもそうだけど、
パスには、App/Documents/○○.pdf
って、かんじでファイル名は入れてある


libharuと比べると、こっちのが格段に楽
ただ、こっちだと、どこまで細かくPDFに設定できるか不明。
libharuのが、PDFを細かく設定できるイメージをもった(本当か? -o-

作成したPDFのサイズの比較は、
元画像PNG 37KB
coregraphics 33KB
libharu 263KB

なんぞ。この違い -o-
なんか、PDFへの描画の仕方が全く違うとし思えない。
このサイズの差。
それとも、libharuが、画像の変換に弱いだけかなぁ
なぞですなぁ