首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGPDFDictionaryGetString获取PDF问题的维度

CGPDFDictionaryGetString获取PDF问题的维度
EN

Stack Overflow用户
提问于 2014-04-11 12:43:46
回答 2查看 410关注 0票数 0

问题的基础上,我尝试深入研究CGPDF,以获得PDF大小的数据,而不将其加载到内存中。

iOS的这一部分文档非常贫乏,搜索web只会给我一些关于编写pdfs的糟糕结果。下面是我尝试过的内容,这不会导致除了指定行上的EXC_BAD_ACCESS之外的其他任何东西。

代码语言:javascript
复制
 NSURL *imageFileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"a1" ofType:@"pdf"]];

CGPDFDocumentRef pdfSource = CGPDFDocumentCreateWithURL((__bridge CFURLRef)imageFileURL);
CGPDFDictionaryRef pdfProps = CGPDFDocumentGetInfo(pdfSource);

CGPDFStringRef cfValue;
CGPDFDictionaryGetString(pdfProps, kCGPDFMediaBox, &cfValue); //Crash, EXC_BAD_ACCESS

NSString *value = CFBridgingRelease(CGPDFStringCopyTextString(cfValue));
CGRect rect = CGRectFromString(value);
NSLog(@"#rekt: %@",NSStringFromCGRect(rect));

我在哪里搞错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-11 13:15:47

CGPDFDocumentGetInfo()字典不包含有关大小的信息,因为PDF文档中的所有页面都可能有不同的维度(媒体框、裁剪框、.)。以下说明如何获取第一页的信息:

代码语言:javascript
复制
CGPDFDocumentRef doc = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);
CGPDFPageRef page = CGPDFDocumentGetPage(doc, 1);
CGRect mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
NSLog(@"#mediaBox: %@",NSStringFromCGRect(mediaBox));
CGPDFDocumentRelease(doc);

对于具有多个页面的文档,您必须确定文档中所有页面的最大值。

票数 0
EN

Stack Overflow用户

发布于 2014-04-11 13:15:54

您将错误的键值传递给CGPDFDictionaryGetString,键是const char *,而您传递的是kCGPDFMediaBox,这是枚举CGPDFBox (定义为0)的常量。正如文档所述,CGPDFDictionaryRef键是通过使用strcmp进行比较的,因此将0(或NULL)作为键传递将导致strcmp崩溃。

如果要使用PDF页面的媒体框,请使用CGPDFPageGetBoxRect

代码语言:javascript
复制
NSLog(@"#rekt: %@",NSStringFromCGRect(CGPDFPageGetBoxRect(aPDFPage, kCGPDFMediaBox));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23012904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档