【问题标题】:How to find text from pdf image?如何从pdf图像中查找文本?
【发布时间】:2012-09-25 18:36:04
【问题描述】:

我正在开发一个 C# 应用程序,我在其中将 PDF 文档转换为图像,然后在自定义查看器中呈现该图像。

在尝试在生成的图像中搜索特定单词时,我遇到了一些障碍,我想知道最好的方法是什么。我应该找到搜索词的 x,y 位置吗?

【问题讨论】:

  • 我已经尝试使用 ITextSharp 和 aspose 库从 pdf 中提取文本,然后从该文本中查找单词,但我想从图像中查找文本。
  • 感谢编辑。现在问题很清楚了。

标签: c# asp.net ocr


【解决方案1】:

您可以在控制台模式下使用tessract OCR image 进行文本识别。

我不知道这样的pdf SDK。

但是,如果你想获取所有单词的坐标和值,你可以使用下一个我的不复杂的代码,感谢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;
}

【讨论】:

  • 我不想让事情变得复杂。是否有任何简单的方法或 sdk 可以为我提供 pdf 图像中任何单词的坐标。
  • @urz - 这是一个简单的 SDK。 OCR 或文本提取不是很复杂,但也不是很简单。您必须付出一定程度的努力或努力才能解决此问题。
  • 是的,但它是 exe,而不是 dll,因为 tesseract 是 C++ 库,并且在控制台模式下使用它更容易,它在我的代码中是如何显示的。
  • thnx..我能找到办法。
【解决方案2】:

使用 ITextSharp 下载它here。 确保 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();
}

【讨论】:

  • 我不想让事情变得复杂。是否有任何简单的方法或 sdk 可以为我提供 pdf 图像中任何单词的坐标。
  • @urzshah - 我想不出这不是难以置信的简单。 5行代码并不复杂。您可能需要重新考虑“简单”的含义,因为没有比这更容易的了
  • 我想从 pdf 图像而不是实际 pdf 中查找文本。上面的代码似乎是从 pdf 而不是 pdf 图像中提取文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多