PDF 패키지에 포함 된 PDF 문서를 추출하는 데 시간이 많이 걸렸습니다. 어디서나 문서 나 예제 코드를 찾지 못했지만 Adobe Reader 앱과 PDFExpert 앱이 지원하므로 불가능하지 않습니다. 그들이 자신의 파서를 가지고, 내가 그에게 오지 않는 희망 수 ...PDF iOS의 패키지
크게 될
편집 감사합니다 올바른 방향으로 날 가리 킵니다 모든 힌트 : 오랜 시간 후 나는 이것에 대한 작업으로 돌아가서 마침내 그것을 알아 냈다. 올바른 방향으로 나를 가리키는 iPDFDev에게 특별 감사합니다 !! PDF 패키지에 의해
NSURL *url = [NSURL fileURLWithPath:filePath isDirectory:NO];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)url);
CGPDFDictionaryRef catalog = CGPDFDocumentGetCatalog(pdf);
CGPDFDictionaryRef names = NULL;
if (CGPDFDictionaryGetDictionary(catalog, "Names", &names)) {
CGPDFDictionaryRef embFiles = NULL;
if (CGPDFDictionaryGetDictionary(names, "EmbeddedFiles", &embFiles)) {
// At this point you know this is a Package/Portfolio
CGPDFArrayRef nameArray = NULL;
CGPDFDictionaryGetArray(embFiles, "Names", &nameArray);
// nameArray contains the inner documents
// it brings the name and then a dictionary from where you can extract the pdf
for (int i = 0; i < CGPDFArrayGetCount(nameArray); i+=2) {
CGPDFStringRef name = NULL;
CGPDFDictionaryRef dict = NULL;
if (CGPDFArrayGetString(nameArray, i, &name) &&
CGPDFArrayGetDictionary(nameArray, i+1, &dict)) {
NSString *_name = [self convertPDFString:name];
CGPDFDictionaryRef EF;
if (CGPDFDictionaryGetDictionary(dict, "EF", &EF)) {
CGPDFStreamRef F;
if (CGPDFDictionaryGetStream(EF, "F", &F)) {
CFDataRef data = CGPDFStreamCopyData(F, NULL);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGPDFDocumentRef _doc = CGPDFDocumentCreateWithProvider(provider);
if (_doc) {
// save the docRef somewhere (_doc)
// save the pdf name somewhere (_name)
}
CFRelease(data);
CGDataProviderRelease(provider);
}
}
}
}
}
}
- (NSString *)convertPDFString:(CGPDFStringRef)string {
CFStringRef cfString = CGPDFStringCopyTextString(string);
NSString *result = [[NSString alloc] initWithString:(__bridge NSString *)cfString];
CFRelease(cfString);
return result;
}
작동 시키셨습니까? 나도 고심하고있어. – JMIT
그래, 그게 내가 사용했던 코드 야. CGPDF API가 여전히 작동한다고 가정합니다. – Ismael