データベースにインポートする必要があるデータを含むPDFファイルがあります。ファイルは、印刷された英数字テキストのPDFスキャンのようです。10ptのように見えます。TimesNew Roman。
このテキストを認識して解析できるツールやコンポーネントはありますか?
私は pdftohtml を使用して、PDFからCSVにテーブルを正常に削除しました。これは、より汎用的なツールである Xpdf に基づいています。 pdftotext が含まれています。C#からのProcess.Start呼び出しとしてラップします。
もう少しDIYを探している場合は、 iTextSharp ライブラリ-Javaのポート iText -および PDFBox (そうです、それです) Java-ですが、それらは IKVM.NET の方法で.NETバージョンを持っています) iTextSharp と-の使用に関するいくつかのCodeProject記事があります PDFBox C#から。
そして、もしあなたがマゾヒストである本当になら、COM相互運用機能でAdobeの PDF IFilter を呼び出すことができます。 IFilter specs は非常に単純ですが、相互運用のオーバーヘッドが大きくなると思います。
編集:質問とその後の回答をもう一度読んだ後、OPがPDFでimagesを処理していることが明らかになりました。その場合、画像を抽出し(PDF上記のライブラリはそれを簡単に行うことができます)、OCRエンジンで実行する必要があります。
私は以前にインタラクティブに [〜#〜] modi [〜#〜] を使用して、まともな結果を得ました。これはCOMなので、相互運用機能を介してC#から呼び出すことも doable で、かなり simple です。
' 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
さて、以下はウェブで利用可能な人気のある例に基づいています。これは、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#"(キースの提案による)のコピーを入手しました。本はかっこいい!それは本当に初心者のために書かれています。この版では、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バージョンが必要だと思いますが、それらには試用版があり、期待どおりに動作するかどうかを確認できます。
簡単なグーグル検索は、この有望な結果を示しています。 http://www.pdftron.com/net/index.html
Perlの [〜#〜] pdf [〜#〜] のようなモジュールを使用して、テキストを抽出できます。そして、別のツールを使用して、関連情報をデータベースにインポートします。
PDF .NET用のコンポーネントがあると確信していますが、まだ試したことがないため、何が良いのかわかりません。
PDFが印刷されたテキストのスキャンである場合、それを自分で行うのは困難です(画像処理、文字認識など)。PDFスキャンしたドキュメントをJPEGとして内部に保存します。これを行うサードパーティツール(OCRツール)を使用することをお勧めします。
うまくいけば、sheebzはPDFフィールドを抽出してデータベースにデータをロードする方法を尋ねています。iTextSharpを見たことはありますか?- http://sourceforge.net/ projects/itextsharp /
最近、Pythonの ReportLab を見つけました。
Mark Brackettの答えに基づいて、 Nugetパッケージ を作成して pdftotext をラップしました。
オープンソース 、ターゲティング。net標準1.6および。netフレームワーク4.5。
使用法:
using XpdfNet;
var pdfHelper = new XpdfHelper();
string content = pdfHelper.ToText("./pathToFile.pdf");