Проблема с разбором IOS PDF и GOTOR ссылок - PullRequest
1 голос
/ 13 сентября 2011

У меня проблемы с получением адреса внешнего файла по ссылкам GOTOR в PDF-файлах.используя кварц.Я получил несколько примеров из области разработчиков яблок и смог получить информацию о GOTOR в словаре данных: вот код, который я использую:

 if (strcmp(actionType, "GoToR") == 0) // GoTo action type
            {
                NSLog(@"Annotation is of type GotoR");
                if (CGPDFDictionaryGetArray(actionDictionary, "D", &destArray) == false)
                {

                    const char *actionFile = NULL; // Annotation action type string
                    CGPDFDictionaryGetName(actionDictionary, "F", &actionFile);
                    CGPDFDictionaryGetString(actionDictionary, "D", &destName);


                    NSLog(@"link is  %@ filename is:%s",CGPDFStringCopyTextString(destName),actionFile);

                }
            }

Нажав на ссылку, я получаю следующеевывод из NSLOG:

ссылка REF-0000059 имя файла: (null)

В ссылке формата PDF указано, что аннотации GOTOR должны иметь поле F со ссылкой на файл назначения... У кого-нибудь есть идеи, что я делаю неправильно?

С уважением.

1 Ответ

0 голосов
/ 14 сентября 2011

Для всех, кто может быть заинтересован в решении: поле GOTOR F может быть как String, так и Array, поэтому, чтобы оно работало в любом случае, мы должны проверить обе возможности:

if (strcmp(actionType, "GoToR") == 0) // GoTo action type
            {
                NSLog(@"Annotation do tipo GotoR");
                if (CGPDFDictionaryGetArray(actionDictionary, "D", &destArray) == false)
                {
                    CGPDFStringRef actionFile = NULL;


                    CGPDFDictionaryRef linkDictionary = NULL;

                    if (CGPDFDictionaryGetDictionary(actionDictionary, "F", &linkDictionary) == true){
                        CGPDFDictionaryGetString(linkDictionary, "F", &actionFile);
                     }
                    else{
                        CGPDFDictionaryGetString(actionDictionary, "F", &actionFile);
                    }
                    *actionFile = NULL; // Annotation action type string

                    CGPDFDictionaryGetString(actionDictionary, "D", &destName);




                    NSLog(@"link is %@ filename is:%@",CGPDFStringCopyTextString(destName),CGPDFStringCopyTextString(actionFile));

                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...