如何在ios上正确地从pdf读取中文

这是我所做的,但却显得杂乱无章。 提前致谢。

1.使用CGPDFStringCopyTextString从pdf中获取文本

2.将NSString编码为char *

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); const char *char_content = [self.currentData cStringUsingEncoding:enc]; 

以下是我如何得到currentData:

 void arrayCallback(CGPDFScannerRef inScanner, void *userInfo) { BIDViewController *pp = (__bridge BIDViewController*)userInfo; CGPDFArrayRef array; bool success = CGPDFScannerPopArray(inScanner, &array); for(size_t n = 0; n < CGPDFArrayGetCount(array); n += 1) { if(n >= CGPDFArrayGetCount(array)) continue; CGPDFStringRef string; success = CGPDFArrayGetString(array, n, &string); if(success) { NSString *data = (__bridge NSString *)CGPDFStringCopyTextString(string); [pp.currentData appendFormat:@"%@", data]; } } } - (IBAction)press:(id)sender { table = CGPDFOperatorTableCreate(); CGPDFOperatorTableSetCallback(table, "TJ", arrayCallback); CGPDFOperatorTableSetCallback(table, "Tj", stringCallback); self.currentData = [NSMutableString string]; CGPDFContentStreamRef contentStream = CGPDFContentStreamCreateWithPage(pagerf); CGPDFScannerRef scanner = CGPDFScannerCreate(contentStream, table, (__bridge void *)(self)); bool ret = CGPDFScannerScan(scanner); } 

根据Mac开发者库 CGPDFStringCopyTextString 返回一个CFString对象,它表示一个PDFstring作为文本string 。 PDFstring以CGPDFStringforms给出,它是一系列字节无符号整数值,范围为0到255 ; 因此,这种方法已经根据一些字符编码来解码字节。

它没有明确地给出,所以它假定一种编码types,很可能是PDFDocEncodingUTF-16BE Unicode字符编码scheme,这两种编码可以用来表示文档内容stream之外的 PDF文档中的文本string,cf 。 部分7.9.2.2 文本stringtypes和PDF规范中的表D.1,附录D.

现在你还没有告诉我们你从哪里收到你的CGPDFString 。 不过,我认为你是从文档内容stream中收到 。 另一方面,文本string可以用任何可想象的编码进行编码。 所使用的编码由string将要显示的字体的embedded数据给出。

有关此更多信息,您可能需要阅读CGPDFScannerPopString返回奇怪的结果 ,并看看PDFKitten 。