C#はPDFをテキストに変換する機能を実装します

伊谢尔伦
リリース: 2016-11-24 13:17:39
オリジナル
1279 人が閲覧しました

更新

2014 年 2 月 27 日: この記事は当初、PDFBox を使用して PDF ファイルを解析することについてのみ説明していました。これは、IFilter と iTextSharp を使用するためのルーチンを含むように拡張されました。

この記事と対応する Visual Studio プロジェクトは、PDFBox の最新バージョン (1.8.4) に更新されました。すべての依存関係を含む完全なプロジェクトは、http://www.squarepdf.net/how-to-convert-pdf-to-text-in-net-sample-project/ からダウンロードできます (依存関係の削除は少し注意が必要です)。

PDF ファイルを解析する方法

.NET で PDF ファイルからテキストを抽出する主な方法は次のとおりです。

Microsoft の IFilter インターフェイスと Adob​​e の IFilter 実装。

残念ながら、これらの PDF 解析ソリューションはどれも完璧ではありません。これらの方法については以下で説明します。

Adob​​e PDF IFilter

IFilter インターフェイスを使用して PDF ファイルを解析するには、次のものが必要です:

Windows 2000 以降

Adobe Acrobat または Reader 7.0.5+ (またはスタンドアロン Adob​​e PDF IFilter [adobe.com])

IFilter COM カプセル化クラス [dotlucene.net]

サンプル コード:

using IFilter;
 
// ...
 
public static string ExtractTextFromPdf(string path) {
  return DefaultParser.Extract(path); 
}
ログイン後にコピー

短所:

IFilter インターフェイスを処理するために信頼性の低い COM 相互運用機能を使用します (IFilter COM と Adob​​e PDF IFilter を組み合わせるのは特に面倒です)。

ターゲット システムに Adob​​e IFilter を個別にインストールする必要があります。インデックス可能なソリューションを他の人に公開する必要がある場合、それは面倒です。

iTextSharp

iTextSharp (http://sourceforge.net/projects/itextsharp/) は、Java PDF 操作ライブラリ iText (http://itextpdf.com/) .NET 出力です。主に PDF を読み取ることよりも編集することに重点を置いていますが、確かに PDF からのテキストの抽出もサポートしています (少しやりすぎですが)。

ルーチン:

using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
 
// ...
  
public static string ExtractTextFromPdf(string path)
{
  using (PdfReader reader = new PdfReader(path))
  {
    StringBuilder text = new StringBuilder();
 
    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
    }
 
    return text.ToString();
  }
}
ログイン後にコピー

クレジット: 会員番号 10364982

短所:

ライセンスが必要(AGPLライセンスが気に入らない場合)

PDFBox

PDFBoxは、別のJava PDFクラスライブラリです。オリジナルの Java Lucene と一緒に使用することもできます (LucenePDFDocument を参照)。

幸いなことに、PDFBox には IKVM.NET を使用して開発された .NET バージョンがあります (PDFBox ダウンロード ページにアクセスしてください)。

.NET で PDFBox を使用するには、引用符で囲む必要があります:

IKVM.OpenJDK.Core.dll

IKVM.OpenJDK.SwingAWT.dll

pdfbox-1.8.4.dll

そして、次のファイルを bin フォルダーにコピーします。

commons-logging.dll

fontbox-1.8.4.dll

IKVM.OpenJDK.Util.dll

IKVM.Runtime.dll

PDFBoxを使用してPDFを解析するのは非常に簡単です:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;
 
// ...
 
private static string ExtractTextFromPdf(string path)
{
  PDDocument doc = null;
  try {
    doc = PDDocument.load(path)
    PDFTextStripper stripper = new PDFTextStripper();
    return stripper.getText(doc);
  }
  finally {
    if (doc != null) {
      doc.close();
    }
  }
}
ログイン後にコピー
コンパイルされたサイズ合計でほぼ 18MB になります:

IKVM.OpenJDK.Core.dll (4 MB)

IKVM.OpenJDK.SwingAWT.dll (6 MB)

pdfbox-1.8.4.dll (4 MB)

commons- logging.dll (82 kB)

fontbox-1.8.4.dll (180 kB)

IKVM.OpenJDK.Util.dll (2 MB)

IKVM.Runtime.dll (1 MB)

速度はOK: 米国著作権法 PDF (5.1 MB) ファイルの解析には 13 秒かかりました。

bobrien100さん、改善提案ありがとうございます。

デメリット:

IKVM.NET依存(18MB)

速度(特にIKVM.NETの起動時間)

関連ラベル:
c#
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!