Как найти текстовое ключевое слово в PDF, используя iText в c #? - PullRequest
0 голосов
/ 20 сентября 2018

Я хотел бы найти кардинальное положение строки (или абзаца) в файле PDF, содержащем данный шаблон.

Например, у меня может быть эта проблема:

  • Во входных данных у меня есть регулярное выражение (например, «Test. *») И PDF-файл, содержащий строку (или абзац), который подтверждает это регулярное выражение.
  • Я хочу в качестве вывода: список позиций Y изстроки, которые подтверждают это регулярное выражение.

У кого-нибудь есть идеи, как я могу обнаружить эти позиции?

Большое спасибо.

Eliott

1 Ответ

0 голосов
/ 20 сентября 2018

У меня может быть кое-что полезное для вас, но оно не полностью завершено.Раньше я писал, но я не закончил.Вы сможете определить положение текста.Программа возвращает каждый элемент в формате PDF и возвращает координаты.

i Использование - itext7 и ядро ​​dotnet

string [] srcFileNames = {"1.pdf"};FindTextInPdf ("test", srcFileNames);

 public void FindTextInPdf(string SearchStr, string[] sources)
 {

            foreach (var item in sources)
            {
                if (File.Exists(item))
                {
                    using (PdfReader reader = new PdfReader(item))
                    using (var doc = new PdfDocument(reader))
                    {

                        var pageCount = doc.GetNumberOfPages();

                        for (int i = 1; i <= pageCount; i++)
                        {
                            PdfPage page = doc.GetPage(i);
                            var box = page.GetCropBox();
                            var rect = new Rectangle(box.GetX(), box.GetY(), box.GetWidth(), box.GetHeight());

                            var filter = new IEventFilter[1];
                                filter[0] = new TextRegionEventFilter(rect);

                            ITextExtractionStrategy strategy = new FilteredTextEventListener(new TextLocationStrategy(), filter);
                            var str = PdfTextExtractor.GetTextFromPage(page, strategy);
                            if (str.Contains(SearchStr) == true)
                            {
                                Console.WriteLine("Searched text found in file:[ " + item + " ] page : [ " + i + " ]");
                            }

                            foreach (var d in objectResult)
                            {
                                Console.WriteLine("Char >"+ d.Text+ " X >"+ d.Rect.GetX()+" font >"+ d.FontFamily + " font size >"+ d.FontSize.ToString()+" space >"+ d.SpaceWidth);**

                            }


                        }
                    }
                }



    }


class TextLocationStrategy : LocationTextExtractionStrategy
{
    public static List<TextMyChunk> objectResult = new List<TextMyChunk>();

    public class TextMyChunk
    {
        public string Text { get; set; }
        public Rectangle Rect { get; set; }
        public string FontFamily { get; set; }
        public float FontSize { get; set; }
        public float SpaceWidth { get; set; }

    }

    public override void EventOccurred(IEventData data, EventType type)
    {
        if (!type.Equals(EventType.RENDER_TEXT)) return;

        TextRenderInfo renderInfo = (TextRenderInfo)data;

        IList<TextRenderInfo> text = renderInfo.GetCharacterRenderInfos();
        foreach (TextRenderInfo t in text)
        {
            string letter = t.GetText();
            Vector letterStart = t.GetBaseline().GetStartPoint();
            Vector letterEnd = t.GetAscentLine().GetEndPoint();
            Rectangle letterRect = new Rectangle(letterStart.Get(0), letterStart.Get(1), letterEnd.Get(0) - letterStart.Get(0), letterEnd.Get(1) - letterStart.Get(1));

                TextMyChunk chunk = new TextMyChunk();
                chunk.Text = letter;
                chunk.Rect = letterRect;
                chunk.FontFamily = t.GetFont().GetFontProgram().ToString();
                chunk.FontSize = t.GetFontSize();
                chunk.SpaceWidth = t.GetSingleSpaceWidth();

                objectResult.Add(chunk);

        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...