非ASCII文字が返されることに問題があります。問題がどのレベルにあるかはわかりません。それは、実際の PDF エンコーディング、CAM::PDF (FlateDecode) によって使用されるデコーディング、または CAM::PDF 自体である可能性があります。以下は、PDF の作成に使用されるコマンド (Tm、Tj など) をすべて含む文字列を返します。
use CAM::PDF;
my $filename = "sample.pdf";
my $cam_obj = CAM::PDF->new($filename) or die "$CAM::PDF::errstr\n";
my $tree = $cam_obj->getPageContentTree(1);
my $page_string = $tree->toString();
print $page_string;
ここからsample.pdfをダウンロードできます
Tj で返されるテキストには、多くの場合、ASCII 以外の文字が 1 つ含まれています。PDF では、実際の文字はほとんどの場合、一重引用符または二重引用符です。
これを再現しているときに、返された文字は PDF 内では一貫しているが、PDF によって異なることがわかりました。また、PDF が特定のフォント ファイルを使用していることにも気付きました。現在、フォント ファイルを調べて、同じ文字をさまざまなバイナリ値にマップできるかどうかを確認しています。
:編集: Windows-1252 について。私の PDF は、アポストロフィの代わりに「Õ」を返します。Õ 文字は、Windows-1252 および UTF-8 では 16 進数の 0xD5 です。文字が Windows-1252 でエンコードされているという考えである場合、それは 16 進数の 0x91 または 0x92 である必要がありますが、そうではありません。これが、以下がキャラクターに何もしない理由です:
use Encode qw(decode encode);
my $page_string = 'Õ';
my $characters = decode 'Windows-1252', $page_string;
my $octets = encode 'UTF-8', $characters;
open STS, ">TEST.txt";
print STS $octets . "\n";