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 이 하루 종일 있었 읍니다, 어떤 도움이 크게 감사하겠습니다.