2

iPad アプリを更新する過程で、既存の PDF ドキュメントから Core Graphics コンテキストにページを描画し、それを新しい PDF として保存しようとしましたが、テキストを正しく表示するのに苦労しています。新しく作成された PDF の画像はきれいに見えますが、テキストが正しく表示されることはめったにありません。テキストが非表示の場合でも、あるべき場所を選択して、テキスト エディターに正しくコピー アンド ペーストすることができます。これは、iPad で使用できるフォントの数が限られていることに関連する問題ですか?

私のコードは次のとおりです。

CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider);
CGPDFPageRef page = CGPDFDocumentGetPage(document, pageNumberToRetrieve);
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);

UIGraphicsBeginPDFContextToFile(pathToFile, pageRect, nil);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextBeginPage(context, NULL);

// I don't think this line is necessary, but I have tried both with and without it.
CGContextSetTextDrawingMode (context, kCGTextFill);

CGContextDrawPDFPage(context, page);

CGContextEndPage(context);
UIGraphicsEndPDFContext();
CGDataProviderRelease(dataProvider);
CGPDFDocumentRelease(document);

誰かに何か提案があれば、聞いていただければ幸いです。

御時間ありがとうございます。

ロブ

4

2 に答える 2

2

イメージ コンテキストへの描画は問題になりません (テキストは正しく表示されます)。

私がやろうとしているのは、元の PDF から数ページだけを含む -new- PDF ファイルを作成することです。何らかの理由でテキストが新しいファイルに正しく描画されないようです。

情報はそこにあります (プレビューのどこにあるべきかを「推測」してテキストを選択できます) が、レンダリングされません。CGContextDrawPDFPage は文字列を PDF ファイルに書き込みますが、そのフォントの文字が「どのように見えるか」がわからないため描画しませんか?

PDF に埋め込まれたフォントのポイントは、そのフォントがシステム (この場合は iPad) にインストールされていなくても、プログラムがこの種の操作を実行できることだと思いました。これはフォーマットの制限ですか、それとも Quartz フレームワークですか?

于 2010-07-01T10:41:52.287 に答える
0

画面にレンダリングしますか?UIGraphicsBeginPDFContextToFileの必要性がわかりませんか?ただし、画面にレンダリングするには、次のようなものを使用できます。

pageReference = CGPDFDocumentGetPage(pdfReference, page);

  CGContextRef context = UIGraphicsGetCurrentContext();
  @try {
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, scale, -scale);

    CGContextSaveGState(context);
    @try {
      CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(pageReference, kCGPDFCropBox, self.bounds, 0, true);
      CGContextConcatCTM(context, pdfTransform);
      CGContextDrawPDFPage(context, pageReference);
    }
    @finally {
      CGContextRestoreGState(context);
    }
  }
  @finally {
    UIGraphicsEndImageContext();
  }
于 2010-07-01T08:13:05.573 に答える