いろんなページを見ていくと、なんか Quartzでやったらどうだとか、そういう話ばっかりなので、ほぼあきらめてたんですが、
「んじゃあ、PDF の中のリンクをクリックしたときの動作ってどうなってんのよ?」
という観点で見てみたら結構簡単に解決しました。
以下、適当なビューコントローラーに UIWebView をのせて、pdfDispArea という名前を付けたと思って読んでください。…不親切?
- (void) viewDidLoad:(id)sender{ // test.pdf の URL を取得(今回はプロジェクト内の test.pdf を表示) NSURL* url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf"]; // 作成した URL にて、NSURLRequest を作成 NSURLRequest* req = [NSURLRequest requestWithURL:url]; // pdfDispArea (UIWebView) にロードリクエストをかける [self.pdfDispArea loadRequest:req]; // pdfDispArea (UIWebVIew) の表示をページにフィットさせる (別にやらなくてもいい) [self.pdfDispArea setScalesPageToFit:YES]; }
// pdf を 10 ページにジャンプ - (void)jumpTo10:(id)sender{ // test.pdf の URL を取得する(今回はプロジェクト内の test.pdf を表示) NSURL* url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf"]; // ジャンプする URL を作成 (この場合file:///hoge〜/test.pdf#page10 となる) NSString *jumpUrl = [NSString stringWithFormat:@"%@#page%d", url, 10]; // 作成した URL 文字列から NSURL を作成 NSURL *url2 = [[NSURL alloc] initWithString:jumpUrl]; // 作成した NSURL にて、NSURLRequest を作成 NSURLRequest* req = [NSURLRequest requestWithURL:url2]; // pdfDispArea (UIWebView) にロードリクエストをかける [self.pdfDispArea loadRequest:req]; // pdfDispArea (UIWebVIew) の表示をページにフィットさせる (別にやらなくてもいい) [self.pdfDispArea setScalesPageToFit:YES]; [url2 release]; }
こういう風にすると、jumpTo10 メソッドを呼び出すと UIWebView で pdf 10 ページ目にジャンプできます。
jumpTo10メソッドは相当適当に書いてるので、名前の付け方も、何もかもいい加減ですが、まあこんな感じです。
毎度の事なんですけど、コードはどうぞご自由にお使いください。
で、間違いや、もっとこうするといいよ!というところはどうぞご指摘お願いいたします。
ちなみに、pdfファイルのページ数を取得するのは
// PDF ファイルの URL を取得 NSURL* url = [[NSBundle mainBundle] URLForResource:@"test withExtension:@"pdf"]; // URL から DocumentRefを作成 CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url); //pdfのページ数を取得 int pageCount = CGPDFDocumentGetNumberOfPages(pdf);
ね。