データベースにインポートする必要があるデータを含む PDF ファイルがあります。ファイルは、印刷された英数字テキストの pdf スキャンのようです。10ptのようです。タイムズニューローマン。
このテキストを認識して解析できるツールやコンポーネントはありますか?
pdftohtmlを使用して、PDF からテーブルを CSV に正常に削除しました。これは、 pdftotextを含む、より汎用的なツールであるXpdfに基づいています。C# からの Process.Start 呼び出しとしてラップするだけです。
もう少しDIYなものを探しているなら、JavaのiTextのポートであるiTextSharpライブラリとPDFBoxがあります(はい、Javaと書かれていますが、 IKVM.NET経由で.NETバージョンがあります)。C# からのiTextSharpとPDFBoxの使用に関する CodeProject の記事を次に示します。
そして、あなたが本当にマゾヒストなら、COM 相互運用機能を使ってAdobe のPDF IFilterを呼び出すことができます。IFilterの仕様は非常に単純ですが、相互運用のオーバーヘッドがかなり大きくなると思います。
編集:質問とその後の回答を読み直した後、OPがPDFの画像を扱っていることが明らかになりました。その場合は、画像を抽出し (上記の PDF ライブラリで簡単に実行できます)、OCR エンジンを介して実行する必要があります。
以前にMODIをインタラクティブに使用したことがあり、まともな結果が得られました。これは COM であるため、相互運用機能を介して C# から呼び出すことも可能であり、非常に簡単です。
' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging
Dim inputFile As String = "C:\test\multipage.tif"
Dim strRecText As String = ""
Dim Doc1 As MODI.Document
Doc1 = New MODI.Document
Doc1.Create(inputFile)
Doc1.OCR() ' this will ocr all pages of a multi-page tiff file
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile
For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results
strRecText &= Doc1.Images(imageCounter).Layout.Text ' this puts the ocr results into a string
Next
File.AppendAllText("C:\test\testmodi.txt", strRecText) ' write the OCR file out to disk
Doc1.Close() ' clean up
Doc1 = Nothing
他の人はTesseractが好きですが、私はそれを直接経験しています。良い点と悪い点の両方を聞いたので、ソースの品質に大きく依存すると思います。
スキャンしたテキストを PDF から抽出することはできません。OCRソフトが必要です。幸いなことに、いくつかのオープン ソース アプリケーションを試すことができます。OCR ルートは、PDF ライブラリを使用してテキストを抽出するよりもおそらく簡単です。Tesseract と GOCR をチェックしてください。
私のブログの 1 つで、pdf の解析について投稿しました。このリンクをクリックしてください:
編集:リンクが機能しなくなりました。以下http://web.archive.org/web/20130507084207/http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-libraryから引用-pdfbox-another-sample-for-grade-1-pupils.aspx
以下は、Web で入手できる一般的な例に基づいています。これが行うことは、pdf ファイルを「読み取り」、フォームのリッチ テキスト ボックス コントロールにテキストとして出力することです。PDFBox for .NET ライブラリは、sourceforge からダウンロードできます。
IKVM.GNU.Classpath & PDFBox-0.7.3 への参照を追加する必要があります。また、FontBox-0.1.0-dev.dll と PDFBox-0.7.3.dll をアプリケーションの bin フォルダーに追加する必要があります。思い出せない何らかの理由で (おそらくチュートリアルの 1 つからのものかもしれません)、ビン IKVM.GNU.Classpath.dll にも追加しました。
余談ですが、Amazon から "Head First C#" (Keith の提案による) のコピーを入手しました。本かっこいい!本当に初心者向けに書かれています。このエディションは、VS2008 とフレームワーク 3.5 を対象としています。
どうぞ...
/* Marlon Ribunal
* Convert PDF To Text
* *******************/
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using System.Text;
using System.ComponentModel.Design;
using System.ComponentModel;
using org.pdfbox.pdmodel;
using org.pdfbox.util;
namespace MarlonRibunal.iPdfToText
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf");
PDFTextStripper stripper = new PDFTextStripper();
richTextBox1.Text=(stripper.getText(doc));
}
}
}
私が以前働いていた会社では、ActivePDFツールキットを使用してある程度の成功を収めました。
http://www.activepdf.com/products/serverproducts/toolkit/index.cfm
少なくともStandardまたはProバージョンが必要だと思いますが、試用版があるので、希望どおりに動作するかどうかを確認できます。
Google で簡単に検索すると、この有望な結果が表示されます。 http://www.pdftron.com/net/index.html
最近、Python用のReportLabを見つけました。
PDFが印刷されたテキストのスキャンである場合、自分でそれを行うのは困難です(画像処理、文字認識などが含まれます). PDF は通常、スキャンしたドキュメントを JPEG として内部に保存します。これを行うサードパーティのツール (OCR ツール) を使用することをお勧めします。
perl のPDFのようなモジュールを使用して、テキストを抽出できます。別のツールを使用して、関連情報をデータベースにインポートします。
確かに .NET 用の PDF コンポーネントはあると思いますが、試したことがないので何がいいのかわかりません。
私が正しく理解できれば、sheebz は PDF フィールドを抽出してデータをデータベースにロードする方法を尋ねています。iTextSharpを見ましたか?- http://sourceforge.net/projects/itextsharp/
Mark Brackett の回答に基づいて、 pdftotextをラップする Nuget パッケージを作成しました。
これはオープン ソースであり、 .net standard 1.6および.net Framework 4.5を対象としています。
使用法:
using XpdfNet;
var pdfHelper = new XpdfHelper();
string content = pdfHelper.ToText("./pathToFile.pdf");