2011-08-02 31 views
8

私はすべての提案とコードスニペットを含むPDFビューアを開発しました。ありがとう:)今私はそれをPDFエディタにしたいです。私はPDFKitに似たiphone/ipad用のアプリケーションを作成したいと思っています(これはデスクトップ用です)。ユーザーが注釈を追加してテキストセクションを強調表示できるようにしたい。注釈をpdfに追加

どうすればこの問題を解決できますか?これまでのところ、私はpdfの内容を解析しました(私の以前の投稿はpdf parsing problemです)。既存のPDFに注釈を追加するオープンソースのpdfエディタはありますか?

また、これはObjective-Cを使用して行うことができますか、これを行う他の言語コード(Cまたはjavascript)がありますか?

NSURL *newUrl = [NSURL fileURLWithPath:"path to pdf"]; 
CGPDFDocumentRef templateDocument = CGPDFDocumentCreateWithURL(newUrl); 
CFRelease(url); 

CGContextRef pdfContext = UIGraphicsGetCurrentContext(); 
CGPDFPageRef page = CGPDFDocumentGetPage(templateDocument, 1); 
CGContextDrawPDFPage(pdfContext, page); 

const char *text = "second line!"; 
CGContextShowTextAtPoint (pdfContext, 10, 30, text, strlen(text)); 
CGContextEndPage (pdfContext); 

CGContextRelease (pdfContext); 

pdfcontextは、新しいPDFを作成するときに作成したオブジェクトと同じです。私のpdfには「hello world」のような行があります。私はもう一つの行を追加しようとしています。この1つは本当にトリッキーになるだろう

GContextShowTextAtPoint: invalid context 0x0 
+0

ここにpdfパーサーコードスニペットを投稿できますか。 – ajay

+0

あなたはそのための解決策を見つけましたか? – wan

+0

いいえ、私はそうではありません。 – cancerian

答えて

3

私は、次のエラーを取得しています。

クォーツは本当にあなたを助けません。

かなり悲観的なライセンスを持っていて、互換性のあるlibHaruを試してみたいかもしれません。しかし、HARUはpdfだけを生成することができます。あなたがPDFに注釈を追加したいと言うが、その後、あなたはあなたの質問の本文に仕事をしようとしている例は、単にPDFファイルにテキストを追加して、タイトルにそう

http://libharu.org/

+1

返信いただきありがとうございますが、私はpdf thats私の要件を編集する必要があります。 pdfの内容全体を書き直す方法はありません。これは私のコード(私の質問を編集)です。私はしようとしましたが、無効なコンテキストを言うエラーを示しています – cancerian

7

。これらは、非常に異なるものです....ここで

は(あなたの試みと同様に)既存のPDFにテキストを追加して「Hello World」のである:

私はこれをテストしていませんが、それが基づいていますCGContextShowTextAtPointの代わりにCTLineを使用して描画していた既存のコード)を使用してください。エラーチェックは明確にするために削除されています。

/* 
* This function copies the first page of a source pdf into the destination pdf 
* and then adds a line of text to the destination pdf. 
* 
* This must be modified by putting the correct path into the NSURL lines 
* for sourceURL and destURL before it will work. 
* 
* This code is using ARC and has error checking removed for clarity. 
*/ 
- (void)helloWorldPDF { 
    // Open the source pdf 
    NSURL    *sourceURL  = [NSURL fileURLWithPath:@"path to original pdf"]; 
    CGPDFDocumentRef sourceDoc  = CGPDFDocumentCreateWithURL((__bridge CFURLRef)sourceURL); 

    // Create the new destination pdf & set the font 
    NSURL    *destURL  = [NSURL fileURLWithPath:@"path to new pdf"]; 
    CGContextRef  destPDFContext = CGPDFContextCreateWithURL((__bridge CFURLRef)destURL, NULL, NULL); 
    CGContextSelectFont(destPDFContext, "CourierNewPS-BoldMT", 12.0, kCGEncodingFontSpecific); 

    // Copy the first page of the source pdf into the destination pdf 
    CGPDFPageRef  pdfPage   = CGPDFDocumentGetPage(sourceDoc, 1); 
    CGRect    pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); 
    CGContextBeginPage (destPDFContext, &pdfCropBoxRect); 
    CGContextDrawPDFPage(destPDFContext, pdfPage); 

    // Close the source file 
    CGPDFDocumentRelease(sourceDoc); 

    // Draw the text 
    const char *text = "second line!"; 
    CGContextShowTextAtPoint(destPDFContext, 10.0, 30.0, text, strlen(text)); 

    // Close the destination file 
    CGContextRelease(destPDFContext); 
} 
+0

素晴らしい!本当に役に立ちました。チュートリアルなどがありますか? –

+0

@KunalBalaniあるかもしれませんが、私が関与しているものはありません。ご質問がありましたら、お気軽にお問い合わせください。 – lnafziger

+0

@lnafzigerあなたのコードはpdfへの読み取り専用のテキスト注釈を追加します。それを他のビューアで編集可能にするには、PDFの/ Annots辞書に登録する必要があります。 –

関連する問題