あなたが遭遇した問題についてのいくつかの言葉...
1 PDF ドキュメントの薄いスペースがトリミングされます。
薄いスペースは、通常、水平方向の座標シフトによって生成されます。残念ながら、カーニング、つまり隣接する文字の見栄えを良くするために同じ手法が使用されています。ページの解析中にこのような水平シフトが発生した場合、パーサーはヒューリスティックに決定する必要があり、場合によっては間違っています。あなたのドキュメントの場合、そのようなヒューリスティックは失敗するようです。
2 既存のドキュメントからテキストを抽出する場合、テキスト スタイルは完全に無視されます (フォント、ボールド、イタリックなど)。
それはRenderListener
あなたが使う問題です。iText(Sharp) にバンドルされているリスナーは、現在、テキストに焦点を当てています。これらは、フォント情報も転送するように簡単に拡張できます。
ただし、PDF はボールド、イタリックなどを認識しないことに注意してください。高品質のドキュメントの場合、xxx と xxx ボールドは個別のフォントであり、品質の劣るドキュメントの場合、貧弱なボールドが生成されることがあります。グリフをわずかなオフセットで 2 回印刷するか、適切な傾斜変換マトリックスを使用して斜めの外観を生成することができます。
3 PDF ファイルからコンテンツを抽出するときに、特殊な形式の数式、画像、およびテキストが読み取られない
このサンプルがある場合は、ここまたはitext-questions メーリング リストで提供してください。念のためRenderListener
、テスト時に画像イベントをリッスンする を実装しましたか?
したがって、1 は一般的な問題であり、より優れたアルゴリズムが存在する可能性がありますが、100% 安全な方法で解決することはできません。2 では、既存のテキストのみの RenderListener の 1 つに基づいて適切な RenderListener を実装する必要があるだけです。実際、RichTextExtractionStrategy
for iText の作成についてかなりの話がありました。ただし、3 はより厳密に検査する必要があります。
本質的に、テキスト解析機能を備えた PDF ライブラリは iText(Sharp) だけではなく、それぞれに独自の利点があります。ただし、ドキュメントのテキスト スタイルからできるだけ多くの情報を取得するために使用できるフレームワークを提供します。
既存の PDF ファイルのテキスト スタイルを編集するために設計された C# コンソール アプリケーションに取り組んでいます。たとえば、テキスト スタイルを太字または斜体に変更したり、 font-family を追加したり、テキストの色を変更したりします。
同じフォントファミリの異なるフォントまたは異なるスタイルが大幅に異なる幅を持つ可能性があることを考えると、これは非常に偉業です. これにより、見栄えが悪くなったり、テキストのリフローが必要になったりする可能性があります。これは、PDF があまり適していないことです。