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

时间:2013-02-06 13:04:33

标签: ios pdf localization

这就是我所做的,但它显得无序。提前谢谢。

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);
}

1 个答案:

答案 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