这就是我所做的,但它显得无序。提前谢谢。
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);
}
答案 0 :(得分:1)
根据the Mac Developer Library
CGPDFStringCopyTextString
返回一个CFString对象,该对象将PDF字符串表示为文本字符串。 PDF字符串以CGPDFString
给出,它是一系列字节无符号整数值,范围为0到255 ;因此,这种方法已经根据某些字符编码对字节进行了解码。
没有明确给出,因此它假定一种编码类型,很可能是 PDFDocEncoding 或 UTF-16BE Unicode字符编码方案,它们可能是两种编码方式。用于表示文档内容流外的PDF文档中的文本字符串,参见第7.9.2.2节文本字符串类型和表{D},the PDF specification中的附录D.
现在您还没有告诉我们您收到CGPDFString
的位置。不过,我假设您是从文档的内容流中的收到的。另一方面,那里的文本字符串可以用任何可想象的编码进行编码。使用的编码由字符串要显示的字体的嵌入数据给出。
有关详细信息,您可以阅读CGPDFScannerPopString returning strange result并查看PDFKitten。