首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别PDF顺序中的文本?

如何识别PDF顺序中的文本?
EN

Stack Overflow用户
提问于 2017-02-16 20:20:11
回答 1查看 476关注 0票数 0

我正在尝试用Ghostscript和Tesseract 3.0.2来识别pdf格式的文本。

我不能使用itextsharp,因为pdf不包含文本,而只包含一个图像。

首先,我将pdf页面转换为图像,然后尝试获取文本。

在第一个测试中,我试图获取"preserve_interword_spaces“变量设置为true的所有文本,但我发现表中"Articolo”列中的信息丢失了。在我试图获得像"Consegna“这样的列之后,但是一些"/”符号丢失了。

我使用了以下代码:

代码语言:javascript
复制
string sDLLPath = @".\gsdll64.dll";
GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(sDLLPath);
using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
{
    rasterizer.Open(path_file_pdf, gvi, false);
    int dpi_x = 600;
    int dpi_y = 600;
    for (int i = 1; i <= rasterizer.PageCount; i++)
    {
        Image imgg = rasterizer.GetPage(dpi_x, dpi_y, i);

        imgg.Save(".\\Temp2.png", System.Drawing.Imaging.ImageFormat.Png);

        using (var tEngine = new TesseractEngine(@".\tessdata", "ita", EngineMode.Default))
        {
            tEngine.SetVariable("tessedit_char_whitelist", "/0123456789");
            using (var img = Pix.LoadFromFile(".\\Temp2.png")) 
            {
                Tesseract.Rect region = new Tesseract.Rect(4120, 3215, 550, 840);
                using (var page = tEngine.Process(img, region, PageSegMode.SingleBlock))
                {
                    var text = page.GetText(); 
                    Console.WriteLine(text); 
                    Console.WriteLine(page.GetMeanConfidence()); 
                    Console.ReadKey();
                }
            }
        }
    }
}

有没有人可以帮我获取图片中的全部文字?提前感谢

This是图像链接(Temp2.png)。

EN

回答 1

Stack Overflow用户

发布于 2017-02-16 21:00:53

尝试将EngineMode设置为TesseractAndCube。它检测到的单词比其他的多。

代码语言:javascript
复制
using (var engine = new TesseractEngine(@".\tessdata", "ita", EngineMode.TesseractAndCube))
{
    using (var img = Pix.LoadFromFile(sourceFilePath))
    {
        using (var page = engine.Process(img))
        {
            var text = page.GetText();                        
        }
    }
}

否则,请尝试将PDF转换为XPS文件。然后,您将能够从XPS文件中提取单词。如下所示:

代码语言:javascript
复制
XpsDocument xpsDocument = new XpsDocument(pSourceDocPath, FileAccess.Read);
IXpsFixedDocumentSequenceReader fixedDocSeqReader = xpsDocument.FixedDocumentSequenceReader;
if (fixedDocSeqReader == null) return null;

const string uniStr = "UnicodeString";
const string glyphs = "Glyphs";
IXpsFixedDocumentReader document = fixedDocSeqReader.FixedDocuments[0];
FixedDocumentSequence sequence = xpsDocument.GetFixedDocumentSequence();

for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount)
{
    IXpsFixedPageReader page = document.FixedPages[pageCount];
    XmlReader pageContentReader = page.XmlReader;

    if (pageContentReader == null) return null;
    while (pageContentReader.Read())
    {
        if (pageContentReader.Name != glyphs) continue;
        if (!pageContentReader.HasAttributes) continue;
        if (pageContentReader.GetAttribute(uniStr) != null)
        {
            string words = uniStr;
        }
    }
}

我希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42273805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档