【问题标题】:How does an 'annot' CGPDFDictionary 'Rect' translate to objective c Rect'annot' CGPDFDictionary 'Rect' 如何转换为目标 c Rect
【发布时间】:2011-05-14 09:47:08
【问题描述】:

'annot' CGPDFDictionary 'Rect' 如何转换为目标 c Rect:

【问题讨论】:

    标签: iphone cocoa-touch ipad pdf ios


    【解决方案1】:

    Adobes PDF Spec 状态:

    矩形用于描述 页面上的位置和边界框 对于各种对象。一个长方形 应写为四个数组 给出坐标的数字 一对对角对角。

    虽然矩形通常是 由它们的左下角和 右上角,可以接受 指定任意两个对角线 角落。处理 PDF 的应用程序 应准备使此类正常化 矩形在以下情况下 需要特定的角。 通常,数组采用以下形式 [llx lly urx ury] 指定 左下 x,左下 y, 右上 x 和右上 y 矩形的坐标,在那个 命令。其他两个角 然后假设矩形有 坐标 (llx, ury) 和 (urx, lly)。

    因此,这意味着 rect 翻译不是原生的,如 here 所示,应该是这样的:

    CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);
    

    查看下面的代码(BrainFeeder 的原始代码)以查看 coords 数组的上下文:

    CGPDFArrayRef rectArray;
                    if(CGPDFDictionaryGetArray(annotDict, "Rect", &rectArray)) {
                        //continue;
    
                        CGPDFReal coords[4];
    
                        for( int k = 0; k < arrayCount; ++k ) {
    
                            CGPDFObjectRef rectObj;
                            if(!CGPDFArrayGetObject(rectArray, k, &rectObj)) {
                                continue;
                            }
    
                            CGPDFReal coord;
                            if(!CGPDFObjectGetValue(rectObj, kCGPDFObjectTypeReal, &coord)) {
                                continue;
                            }
    
                            coords[k] = coord;
                        }      
    
                    }
    
                    //blx,bly,trx,try>tlx,tly,w,h
    
                    CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);
    

    【讨论】:

    • +1 帮助解决我的问题,但您确定它实际上不应该是:CGRect rect = CGRectMake(coords[0],coords[1],coords[2]-coords[0],coords[3]-coords[1]); 而不是CGRect rect = CGRectMake(coords[0],coords[3],coords[2]-coords[0],coords[3]-coords[1]);(注意y 参数;它使用索引1 坐标代替索引3)。无论如何,这对我有用。
    • @lindonfox,我遇到了同样的问题,我想在 pdf 中实现选择和突出显示文本,你能帮我吗?你有详细的说明如何制作它或代码示例吗?
    • @MatrosovAlexander - 如果您还没有看到它,这里有一个很好的起点here。抱歉,我暂时没有时间搜索具体的示例代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多