ぽんぽこ日記

プログラミング、読書、日々の生活

アジア言語圏のPDFのテキスト抽出

この手のアプリ作っている人には既知のことなんだろうけど、このあたりでアジア言語圏で作られたPDFから抽出したテキストが文字化けするという話題があって、下記の方法で一応解決できたぽいのでメモ。


"TJ"や"Tj"のオペレータコールバックから、

static void stringCallback(CGPDFScannerRef inScanner, void *userInfo)
{
  CGPDFStringRef rawString;
  
  bool success = CGPDFScannerPopString(inScanner, &string);
  
  if(success)
  {
    NSString* string = [[NSString stringWithCString:(const char*)CGPDFStringGetBytePtr(rawString) encoding:NSUnicodeStringEncoding]retain];
   .....以下略

CGPDFStringGetBytePtr()ではなくCGPDFStringCopyTextString()でCFStringを取り出してそのままNSStringとして使っている人が多いみたい。ASCII文化圏の人はそれでOKなのだろう。
encoding:の引数に、NSUnicodeStringEncodingを指定する部分、このエンコーディングがPDFの規格として決まっているのか、PDFのどこかから取り出して判別する必要があるのかどうかが要調査。(どう考えても後者だとは思うが、PDFの規格書は読みづらい。。。)

2010/09/10追記:
いろいろ調べていたらそんなに簡単なものではなかった。しかしだいたいわかったのでまたまとめます。
続く To be continued...


↓こういう本が出るようです。期待。

PDF構造解説

PDF構造解説

Amazon