5

我正在玩 iOS 上的 PDF 操作(显示但也主要是生成)。

我希望嵌入充当“外部”链接的矩形区域(如http://host.tld/path/file 的URL )。

您知道我在哪里可以找到有关如何使用 UIGraphicsSetPDFContextURLForRect 函数的示例吗?我在互联网上找不到任何东西。

如果我理解得很好,唯一的要求是当前图形上下文应该是 PDF“类型”,我认为我尊重这一点,因为在上游,我调用 UIGraphicsPushContext 为什么我的 PDF 上下文作为参数(无论如何这对于 drawAtPoint 之类的方法是必需的:我也成功使用)。

我认为这并不重要,但以防万一我指定这不会发生在 view 子类的 drawRect: 中。

你毫不含糊地说我“都错了”是对的。iOS 中的图形环境非常复杂和丰富,我认为目前吸收的比例不超过 1% 或 2%。

先感谢您。

4

2 回答 2

5

没错,要求是当前图形上下文是 PDF 上下文。您可以推送它(UIGraphicsPushContext)以使其处于活动状态,也可以像这样创建上下文:

UIGraphicsBeginPDFContextToFile(path, CGRectMake(0, 0, 612, 792), nil);
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
// ...
UIGraphicsSetPDFContextURLForRect(url, rect);
// ... 
UIGraphicsEndPDFContext(); 

UIGraphicsSetPDFContextURLForRect 有 2 个参数:第一个是你希望链接去的 url,第二个是当前页面上代表链接区域的矩形。例如此行将在页面左下角创建指向 url 的链接,链接的大小为 72*72 点:

UIGraphicsSetPDFContextURLForRect(url, CGRectMake(0, 0, 72, 72));

这个方法实际上是在 PDF 文件中创建一个链接注释。链接本身没有视觉外观,您必须知道它在那里,否则如果您将鼠标移到查看器中的 PDF 页面上,您可能会偶然发现它。因此,您通常在页面上绘制/写一些东西(例如单击此处),然后将链接区域设置在文本上方。

更新 - 工作代码片段:

- (void) makePdf {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFile = [documentsDirectory stringByAppendingPathComponent:@"uigraphics.pdf"];

    UIGraphicsBeginPDFContextToFile(pdfFile, CGRectMake(0, 0, 612, 792), nil);
    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);

    NSURL* url = [NSURL URLWithString: @"http://www.ipdfdev.com/"];
    UIGraphicsSetPDFContextURLForRect(url, CGRectMake(0, 0, 50, 50));

    UIGraphicsEndPDFContext();
}
于 2012-09-17T09:09:34.047 回答
4

我希望这能帮到您。

UIGraphicsBeginPDFContextToFile( pdfFilePath, CGRectZero, nil );

CGRect windowFrame = CGRectMake( 0, 0, 596, 842 );
UIGraphicsBeginPDFPageWithInfo( windowFrame, nil );

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

CGRect textFrame = CGRectMake( 10, 10, 200, 20 );
CGRect linkFrame = textFrame;
linkFrame.origin.y = windowFrame.size.height - linkFrame.origin.y - linkFrame.size.height;
UIGraphicsSetPDFContextURLForRect( url, linkFrame );

NSDictionary *attributesDict;
NSMutableAttributedString *attString;

NSNumber *underline = [NSNumber numberWithInt:NSUnderlineStyleSingle];
attributesDict = @{NSUnderlineStyleAttributeName : underline, NSForegroundColorAttributeName : [UIColor blueColor]};
attString = [[NSMutableAttributedString alloc] initWithString:url.absoluteString attributes:attributesDict];

[attString drawInRect:textFrame];

UIGraphicsEndPDFContext();
于 2012-11-21T14:12:32.640 回答