2014-12-26 3 views
1

pdfFile을 다른 앱의 ...에서 열기 메뉴를 통해 내 앱으로 전송하려고합니다. strings을 얻으려고합니다. 은 내가 pdfscanner가있는 나는 pdfPage 통과하고 스캐너가 내가 주로 SWIFT를 사용하고 콜백 "getString" 를 해고해야하지만, 스캐너 코드가 목적-C 에 쓴 문제는 내가 다른 응용 프로그램에서 내 응용 프로그램에 pdfDoc를 보낼 때 "getString"콜백이 실행되지 않습니다. 그리고 내 맥북 프로에있는 디렉토리의 URL을 사용하여 내 응용 프로그램에 동일한 문서를 보내면 이 작동하고 "getString"callBack이 호출됩니다. 디버거를 확인할 때, 둘 다 항상 유효한 CGPDFPageRef를 "extractStringsFromPDFPage :"메서드로 전달합니다. 나는 또한 두 경우 모두에서 유효 CGPDFContentStream 및 CGPDFOperatorTableCGPDFScannerScan이 콜백 함수를 호출하지 않습니다.

여기 스캐너에 대한 코드의이 : 내가 AppDelegate에

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 

    //Get the Data from the preview open in... menu 

    //let macBookUrl = NSURL(fileURLWithPath: "/Users/vmalterre/Documents/Xcodes/TESTDOC.pdf") 

    let doc = CGPDFDocumentCreateWithURL(url) 
    //let doc = = CGPDFDocumentCreateWithURL(macBookUrl) 

    let sharedStore = FFDataStore.sharedStore 
    sharedStore.addFileWithDoc(doc) 

    return true 
} 

에서 내 응용 프로그램에 문서를 보낼 방법

여기
@implementation FFStringExtractor 

- (instancetype)init 
{ 
self = [super init]; 
if (self) { 
    self.pdfStrings = [[NSMutableArray alloc] init]; 
} 

return self; 
} 

- (void) extractStringsFromPDFPage: (CGPDFPageRef) page { 

CGPDFContentStreamRef contentStream = CGPDFContentStreamCreateWithPage(page); 

// get the strings 
CGPDFOperatorTableRef operatorTable = CGPDFOperatorTableCreate(); 
CGPDFOperatorTableSetCallback(operatorTable, "Tj", getString); 

FFStringExtractor *currentExtractor = self; 

CGPDFScannerRef scanner = CGPDFScannerCreate(contentStream, operatorTable, (__bridge void*)currentExtractor); 
CGPDFScannerScan(scanner); 

//releases 
CGPDFOperatorTableRelease(operatorTable); 
CGPDFScannerRelease(scanner); 
CGPDFContentStreamRelease(contentStream); 

} 

@end 


void getString (CGPDFScannerRef pageScanner, void *info) { 

CGPDFStringRef pdfString; 
CGPDFScannerPopString(pageScanner, &pdfString); 

const unsigned char *byteString = CGPDFStringGetBytePtr(pdfString); 

NSString *macRomanDecode = [NSString stringWithCString:byteString encoding:NSMacOSRomanStringEncoding]; 

FFStringExtractor *currentObject = (__bridge FFStringExtractor*) info; 
[currentObject.pdfStrings addObject:macRomanDecode]; 

} 

이의 I 이 하루 종일 있었 읍니다, 어떤 도움이 크게 감사하겠습니다.

답변

0

문제가 해결되었습니다. 텍스트 연산자가 "TJ"가 아니고 단순히 '' '입니다. 이것은 이전 PDF 버전에서 발생할 수 있습니다.

관련 문제