Подтвердить что ты не робот

Podofo для iOS; "Объект каталога не найден" после написания файла PDF

Я построил Podofo 0.9.3 для iOS вместе со всеми другими необходимыми библиотеками для поддержки amrv7, arm64 и симулятора. Мой проект работает отлично, но моя проблема заключается в загрузке документа во второй раз. Я всегда получаю ошибку "Объект каталога не найден" в Podofo. Если я открою документ, используя приложение Preview на mac, и сохраните его, Podofo снова откроет его.

Вот код, который я использую, чтобы открыть документ и сохранить его:

self.doc = new PoDoFo::PdfMemDocument([path UTF8String]);

NSString *tmpPath = [self createCopyForFile:self.pdfPath];

self.doc->Write([tmpPath UTF8String]);

NSData *myFile = [NSData dataWithContentsOfFile:tmpPath];
[myFile writeToFile:tmpPath atomically:YES];

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

if ([fileManager fileExistsAtPath:self.pdfPath] == YES) {
     [fileManager removeItemAtPath:self.pdfPath error:&error];
}
[fileManager copyItemAtPath:tmpPath toPath:self.pdfPath error:&error];

Ошибка здесь:

void PdfMemDocument::InitFromParser( PdfParser* pParser )
{
...
PdfObject* pCatalog = pTrailer->GetIndirectKey( "Root" );
if( !pCatalog )
{
      PODOFO_RAISE_ERROR_INFO( ePdfError_NoObject, "Catalog object not found!" );
...
}

Вы, ребята, создали Podofo для iOS в последнее время? Любая идея, почему это происходит?

4b9b3361

Ответ 1

Я столкнулся с подобной проблемой. Проблема заключалась в пути к NSCachesDirectory. Он изменяется с каждым запуском приложения в симуляторе. Чтобы устранить эту проблему, я сохранил путь к файлу без пути к каталогу кэшей:

- (NSString *)filePathWithoutCacheDirectoryComponent:(NSString *)fullPath {
    NSString *cacheDirectoryPath =
        NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    return [fullPath stringByReplacingOccurrencesOfString:cacheDirectoryPath withString:@""];
}

Чтобы открыть мой файл в следующий раз, я добавил путь каталога кэшей к его сохраненному пути:

NSString *cacheDirectoryPath =
        NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
fullPath = [cacheDirectoryPath stringByAppendingPathComponent:savedPathToFile];

Итак, если вы сохраните файл в NSCachesDirectory или NSDocumentDirectory, попробуйте это.