我正在尝试通过从另一个应用程序中打开...菜单strings
从pdfFile
发送到我的应用程序中获取。我写了一个pdfscanner
我传递给我pdfPage
的扫描仪应该触发一个回调"getString"
我主要使用SWIFT但是扫描仪代码在objective-C中问题是当我从另一个应用程序向我的应用程序发送pdfDoc时,“getString”回调不开火。并且当我使用我的 macbook pro 中的目录中的 URL 将相同的文档发送到我的应用程序时,它可以工作并调用“getString”callBack。当我检查调试器时,我总是将有效的 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];
}
这是我从 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
}
我整天都在做这件事,任何帮助将不胜感激。