4

URL に移動する長方形の領域を PDF に作成しようとしています。PDF は、Core Graphics ルーチンを使用して iOS アプリで作成されます。

同様の問題を抱えている人を見つけるための検索で、次のスタック オーバーフローの質問を見つけました。

iOS で Core Graphics を使用してハイパーリンクを PDF に埋め込む

上記の質問の回答で提供されているコードを使用すると、ある程度うまくいきます。テキストが表示され、クリック可能なリンクになりますが、テキストよりもはるかに大きな四角形を指定すると、テキストだけがクリック可能になります。さらに、ラベルと URL を別々に提供できるようにコードを少し変更しました。これを行って空の文字列を提供すると、四角形のどこにもクリック可能な場所がありませんでした。

ただし、UIKit ルーチンを使用して PDF (基本的には UIGraphicsBeginPDFContextToFile とその子孫) を作成する場合、UIGraphicsSetPDFContextURLForRect を呼び出すと、テキストを指定しなくても、結果の PDF ファイルにクリック可能な領域が作成されます。

長方形のリンクを作成するために使用している方法は次のとおりです。

+ (void)rectLink:(NSString *)urlString frame:(CGRect)frameRect cropBox:(CGRect)cropBoxRect sourceContext:(CGContextRef)context
{
    UIGraphicsPushContext(context);

#ifdef OUTPUT_TEXT_LINK_OUTLINE
    CGContextSetLineWidth(context, 5.0);
    CGContextSetStrokeColorWithColor(context, [UIColor purpleColor].CGColor);
    CGContextStrokeRect(context, frameRect);
#endif

    NSURL *url = [NSURL URLWithString:urlString];
    UIGraphicsSetPDFContextURLForRect(url, frameRect);

    UIGraphicsPopContext();
}

( OUTPUT_TEXT_LINK_OUTLINE 定義は、渡した四角形が実際にあるべき場所にあることを確認するためにテストに使用しているものです。)

そして、これは私のPDF生成の最初のページで上記のメソッドに対して行っている呼び出しです:

[self rectLink:@"http://stackoverflow.com" frame:CGRectMake(474,22,28,28) cropBox:cropBoxRect sourceContext:context];

変数 cropBoxRect は現在のページのトリミング ボックスを参照し、 context はドキュメントの開始時に CGPDFContextCreateWithURL 呼び出しから保存している値です。

4

1 に答える 1