在OCR PDF中无法正确显示突出显示的单词

时间:2015-12-01 12:27:56

标签: c# pdf itextsharp

enter image description here

我突出了“F O R M - 2”文字和“发明名称:”。第一个字符串正确突出显示但第二个字符串“发明内容:”仅突出显示。我使用下面的代码来突出显示这个词。

  private void highlightPDFAnnotation(string outputFile, string highLightFile, int pageno, string[] splitText)
{
    try
    {
        PdfReader reader = new PdfReader(outputFile);

        using (FileStream fs = new FileStream(highLightFile, FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (PdfStamper stamper = new PdfStamper(reader, fs))
            {
                myLocationTextExtractionStrategy strategy = new myLocationTextExtractionStrategy();

                string currentText = PdfTextExtractor.GetTextFromPage(reader, pageno, strategy);
                for (int i = 0; i < splitText.Length; i++)
                {
                    List<iTextSharp.text.Rectangle> MatchesFound = strategy.GetTextLocations(splitText[i].Trim(), StringComparison.CurrentCultureIgnoreCase);
                    foreach (Rectangle rect in MatchesFound)
                    {

                        float[] quad = { rect.Left , rect.Bottom, rect.Right, rect.Bottom, rect.Left , rect.Top , rect.Right, rect.Top  };
                        //Create our hightlight
                        PdfAnnotation highlight = PdfAnnotation.CreateMarkup(stamper.Writer, rect, null, PdfAnnotation.MARKUP_HIGHLIGHT, quad);
                        //Set the color
                        highlight.Color = BaseColor.YELLOW;

                        PdfAppearance appearance = PdfAppearance.CreateAppearance(stamper.Writer, rect.Width, rect.Height);
                        PdfGState state = new PdfGState();
                        state.BlendMode = new PdfName("Multiply");
                        appearance.SetGState(state);
                        appearance.Rectangle(0, 0, rect.Width, rect.Height);
                        appearance.SetColorFill(BaseColor.YELLOW);
                        appearance.Fill();

                        highlight.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, appearance);

                        //Add the annotation
                        stamper.AddAnnotation(highlight, pageno);
                    }
                }
            }
        }
        reader.Close();
        File.Copy(highLightFile, outputFile,true);
        File.Delete(highLightFile);
    }
    catch (Exception ex)
    {
        throw;
    }

}

1 个答案:

答案 0 :(得分:2)

正如您已经猜到的那样,

  

由于OCR PDF

,它无法正确显示

或更准确地说,因为在OCR期间在图像下方绘制的字母与图像相比位置不正确,但是您的代码会检查那些用于定位标记的字母。

更详细

比较扫描图像中“发明名称”周围的条纹

stripe in the scanned image

以及基础OCR信息中的相应条带

stripe in the OCR'ed information

人们立即认识到“发明的标题”在后者中显得有点偏离。

@BrunoLowagie让差异更加清晰:

  

我已将文字带到前台并将其变为红色,以便您了解图像与OCR之间存在多大差异:

     

enter image description here

当您通过文本提取检索位置时,您检索的位置也会偏离右侧。

更快检查

如果您只是在Adobe Reader中搜索“发明名称”,您还可以识别该问题:

Searching in Adobe Reader

整页

查看整个页面的OCR信息,人们认识到它的质量不是那么好。因此,在处理此文档时,您会发现许多问题。

整个扫描页面

the whole scanned page

整个页面的OCR信息

the OCR'ed information of the whole page