13

アプリケーション内に非常に基本的な PDF ビューアーを実装することができましたが、PDF に注釈を追加できるかどうか疑問に思っていました。SDK ドキュメントを調べましたが、何も見つかりませんでした。本当に2つの質問があります:

  1. これを行うことは可能ですか?
  2. 取るべき最善のアプローチは何ですか?
  3. これを支援するために含めることができるフレームワークまたはライブラリはありますか?

ありがとう。

4

3 に答える 3

18

PDF ページを読み込んで新しい PDF グラフィック コンテキストに描画し、そのグラフィック コンテキストに追加のコンテンツを描画することで、注釈を付けることができます。これは、既存の PDF の位置 (100.0,100.0) に「注釈の例」という単語を追加するコードです。メソッド getPDFFileName は、元の PD のパスを返します。getTempPDFFileName は、元の PDF に注釈を加えた新しい PDF のパスを返します。

注釈を変更するには、drawInRect:withFont: メソッドの代わりに描画コードを追加するだけです。その方法の詳細については、iOS の描画と印刷のガイドを参照してください。

- (void) exampleAnnotation;
{
    NSURL* url = [NSURL fileURLWithPath:[self getPDFFileName]];

    CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ((CFURLRef) url);// 2
    size_t count = CGPDFDocumentGetNumberOfPages (document);// 3

    if (count == 0)
    {
        NSLog(@"PDF needs at least one page");
        return;
    }

    CGRect paperSize = CGRectMake(0.0,0.0,595.28,841.89);

    UIGraphicsBeginPDFContextToFile([self getTempPDFFileName], paperSize, nil);

    UIGraphicsBeginPDFPageWithInfo(paperSize, nil);

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    // flip context so page is right way up
    CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
    CGContextScaleCTM(currentContext, 1.0, -1.0); 

    CGPDFPageRef page = CGPDFDocumentGetPage (document, 1); // grab page 1 of the PDF 

    CGContextDrawPDFPage (currentContext, page); // draw page 1 into graphics context

     // flip context so annotations are right way up
    CGContextScaleCTM(currentContext, 1.0, -1.0);
    CGContextTranslateCTM(currentContext, 0, -paperSize.size.height);

    [@"Example annotation" drawInRect:CGRectMake(100.0, 100.0, 200.0, 40.0) withFont:[UIFont systemFontOfSize:18.0]];

    UIGraphicsEndPDFContext();

    CGPDFDocumentRelease (document);
}
于 2011-06-16T18:26:38.207 に答える
3

私はものに取り組んでおり、GitHub プロジェクトを作成しました。ここ で確認 してください.

于 2015-02-26T02:34:36.397 に答える
1

私は、PDFKit がデスクトップから iPhone に移植されたとは考えていませPDFAnnotationん。ただし、ハルはその間にあなたをやってのけるかもしれません。

于 2010-02-22T18:43:28.860 に答える