%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
関連する PDF ドキュメントの検索機能を使用しようとしていますが、何らかの理由で、「the」のような単純なものを検索しても何も表示されません。
これを理解しようとして私が学んだことがいくつかあります:
PDF から検索ボックスにテキストを直接コピーして貼り付けると、その文字列が見つかります。ただし、キーボード入力では検索できません。
PDF からブラウザまたは任意のテキスト操作アプリケーションにコピーするとテキストがどのように表示されるかを示す例として、「給与部門のメンバーとして、給与処理中に発生するさまざまなプロセスを認識し、理解する必要があります。」というテキストをコピーしました。
実際にコピーして貼り付けると次のようになります。
わかりません。エンコードの問題でしょうか。PDF を開いて、キーボードで入力できるのと同じ種類のテキストに変換し、必要なテキストを検索できるようにする方法があるかもしれません。
あらゆる助けを大歓迎します!
答え1
これらの「文字」はすべて、Unicode の「私的使用領域」にあります。これらのコード ポイントのグリフを含むフォントと組み合わせると、通常のテキストとして表示されます。
ただし、難読化は非常に弱いです。 を見てみましょう
。これは であるはずですAs
。コード ポイントは\uF041
と です\uF073
。偶然にも、「ラテン大文字 A」は で\u0041
、「ラテン小文字 S」は です\u0073
。
すべてのコード ポイントを調べて、0xF000
難読化されたテキストから減算/加算して、難読化されたテキストに変換するだけです。これにより、ドキュメントからテキストをコピーしたり、ドキュメント内のテキストを検索したりできるようになります。
テキストをデコードする JavaScript コードを次に示します。
{
let source = " ";
let decoded = source.replace(/./g, c => {
let cc = c.codePointAt(0);
return cc > 0xF000 ? String.fromCodePoint(cc - 0xF000) : c;
});
console.log(decoded);
}
逆に、単語のみの場合は次のようになります。
{
let source = "understand";
let coded = source.replace(/./g, c => String.fromCodePoint(c.codePointAt(0) + 0xF000));
console.log(coded);
}
どちらのスニペットも、示された例に厳密に基づいています。他のエンコードの不正行為が存在する場合は、コードをさらに調整する必要があります。
これらのスニペットは、通常は からアクセスできるブラウザの開発者コンソールで使用できますF12。