0

アプリでPDFを表示するためのいくつかのより良い代替案を調べているときに、vfrリーダーフレームワークを見つけました。私の文脈では、PDFをダウンロードする必要があります。まだアプリバンドルには含まれていません。埋め込みpdfでvfrフレームワークを使用するのは簡単でしたが、ファイルに書き込んだダウンロードデータで動作させてから、そのパスを使用してReaderDocumentを初期化することにこれまで困惑していました。同じファイルをUIWebViewに問題なくロードできるので、それがデータだとは思いません。コードは次のとおりです。

NSString *fullPathToPDF = [[[self appDelegate] urlForFileUnderRecursiveDocWithName:self.pdfName andOptionallyStartingAtDirectory:[[self appDelegate] pathURLForImagesDirectory]] path];
        ReaderDocument *pdfDoc = [ReaderDocument withDocumentFilePath:fullPathToPDF password:nil];

結果のpdfDocはnullになるか、上記のようにフルパスを渡すと、ReaderDocumentの229行目からのアサーションでクラッシュします。

NSAssert(NO, @"CGPDFDocumentRef == NULL");

なぜなら(私は合理的な仮定をしている)この行(217;同じクラス):

CGPDFDocumentRef thePDFDocRef = CGPDFDocumentCreateX(docURLRef, _password);

CGPDFDocumentRefの作成に失敗します。フルパスを渡すこととファイル名を渡すことの違いについては前に説明しました。これは、コードを見ると、ReaderDocumentクラスがファイルの検索場所についていくつかの仮定をしているように見えるためです。ファイルをどこに保存したか、またはファイルに何を渡したかに関係なく、ファイルを機能させることができませんでした...withDocumentFilePathメソッド。

繰り返しになりますが、まったく同じファイルを使用して、UIWebViewで問題なく開くことができます。

それで、これと同じ問題を抱えている人、または私が試みていることをうまくやることができる人はいますか?ありがとう。

4

1 に答える 1

5

これに遅く答えてすみません。自分でこの問題に出くわしたので、知恵を伝えたいと思いました。

My guess is you are downloading the PDF to the temporary directory. This framework is looking for the file in the NSDocumentDirectory. So when you go to save the downloaded file just save to a path like this:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *baseDocumentPath = [paths objectAtIndex:0];
NSString *filePath = [baseDocumentPath stringByAppendingPathComponent:@"/temp.pdf"];

Once you do that it will load correctly.

p.s If I end up modifying ReaderDocument to allow for a temporary directory I'll post the edits here.

于 2013-05-31T20:14:24.433 に答える