CGPDFScannerScan不调用回调函数

时间:2014-12-26 20:24:57

标签: ios pdf swift callback cgpdfscanner

我正试图从strings发送到我的应用的pdfFile通过另一个应用中的打开...菜单。 我写了一个pdfscanner,我传递了pdfPage,扫描程序应该触发一个callBack "getString" 我主要使用SWIFT,但扫描器代码是Objective-C 问题是,当我从另一个应用程序发送pdfDoc到我的应用程序时,“getString”callBack不会触发。 当我使用我的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
}

我整天都在这一切,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题解决了, 文本操作员不是" TJ"但只是"'"。 这可能发生在较旧的PDF版本