4

PDFドキュメントを画像に変換し、その画像をカスタムビューアでレンダリングするC#アプリケーションを開発しています。

生成された画像で特定の単語を検索しようとしたときに、少しレンガの壁に出くわしました。これを実行するための最善の方法は何でしょうか。検索された単語のx、yの場所を見つける必要がありますか?

4

2 に答える 2

9

コンソールモードでのテキスト認識には、tessractOCR画像を使用できます。

そのようなSDKforpdfについては知りません。

しかし、すべての単語の座標と値を取得したい場合は、次に複雑ではないコードを使用できます。nguyenqのhocrヒントに感謝します。

public void Recognize(Bitmap bitmap)
{
    bitmap.Save("temp.png", ImageFormat.Png);
    var startInfo = new ProcessStartInfo("tesseract.exe", "temp.png temp hocr");
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    var process = Process.Start(startInfo);
    process.WaitForExit();

    GetWords(File.ReadAllText("temp.html"));

    // Futher actions with words
}

public Dictionary<Rectangle, string> GetWords(string tesseractHtml)
{
    var xml = XDocument.Parse(tesseractHtml);

    var rectsWords = new Dictionary<System.Drawing.Rectangle, string>();

    var ocr_words = xml.Descendants("span").Where(element => element.Attribute("class").Value == "ocr_word").ToList();
    foreach (var ocr_word in ocr_words)
    {
        var strs = ocr_word.Attribute("title").Value.Split(' ');
        int left = int.Parse(strs[1]);
        int top = int.Parse(strs[2]);
        int width = int.Parse(strs[3]) - left + 1;
        int height = int.Parse(strs[4]) - top + 1;
        rectsWords.Add(new Rectangle(left, top, width, height), ocr_word.Value);
    }

    return rectsWords;
}
于 2012-09-25T07:06:29.717 に答える
2

ITextSharpを使用して、ここからダウンロードしてください。PDFが検索可能であることを確認してください。

次のコードを使用します。

public static string GetTextFromAllPages(String pdfPath)
{
    PdfReader reader = new PdfReader(pdfPath); 

    StringWriter output = new StringWriter();  

    for (int i = 1; i <= reader.NumberOfPages; i++) 
        output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));

    return output.ToString();
}
于 2012-09-25T07:14:47.230 に答える