CGPDFScannerScan не вызывает функцию обратного вызова
Я пытаюсь получить strings
из pdfFile
отправлено в мое приложение через меню Открыть в... из другого приложения. Я написал pdfscanner
к которому я передаю pdfPage
и сканер должен запустить обратный вызов "getString"
Я в основном использую SWIFT, но код сканера в цели-C, проблема в том, что когда я отправляю pdfDoc в свое приложение из другого приложения, callBack getString не срабатывает. и когда я отправляю тот же документ в мое приложение, используя URL из каталога в моем MacBook Pro, он работает, и вызывается callBack "getString". когда я проверяю отладчик, для обоих я всегда передаю действительный CGPDFPageRef методу extractStringsFromPDFPage:. у меня также в обоих случаях есть допустимые CGPDFContentStream и CGPDFOperatorTable
вот код для сканера:
@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];
}
вот как я могу отправить документы в свое приложение из приложения Delegate
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
}
Я был на этом весь день, любая помощь будет принята с благодарностью.
1 ответ
Проблема решена, текстовым оператором был не "TJ", а просто "". Это может случиться в старых версиях PDF