我已经为iOS构建了Podofo 0.9.3以及所有其他需要的库来支持amrv7,arm64和模拟器.我的项目运行正常,但我的问题是第二次加载文档.我总是在Podofo中收到错误“Catalog object not found”.如果我使用Mac上的Preview app打开文档,并保存它,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!" ); ... }
你们最近是否为iOS建立了Podofo?任何想法为什么会发生这种情况?
解决方法
我面临着类似的问题.问题是NSCachesDirectory的路径.它随着应用程序在模拟器中的每次运行而发生变化.要解决这个问题,我保存路径到我的文件没有缓存目录的路径:
- (NSString *)filePathWithoutCacheDirectoryComponent:(NSString *)fullPath { NSString *cacheDirectoryPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0]; return [fullPath stringByReplacingOccurrencesOfString:cacheDirectoryPath withString:@""]; }
NSString *cacheDirectoryPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,YES)[0]; fullPath = [cacheDirectoryPath stringByAppendingPathComponent:savedPathToFile];
所以如果将文件保存到NSCachesDirectory或NSDocumentDirectory中,请尝试这样做.