Получить текст, кроме определенного цвета, из PDF с помощью iTextSharp

#c# #visual-studio #itext

Вопрос:

Я хочу получить весь текст из PDF-файла (конкретное местоположение по координатам), кроме красного текста. Вот код, который я использую для получения текста из определенного места в PDF

 public string ReadTextFromRectangle(string pdfPath, int numberOfPages, float x, float y, float width, float height)
        {
            this.PdfPath = pdfPath;
            this.NumberOfPages = numberOfPages;
            this.X = x;
            this.Y = y;
            this.Width = width;
            this.Height = height;

            var reader = new PdfReader(PdfPath);

            System.util.RectangleJ customerIdRectangle = new System.util.RectangleJ(X, Y, Width, Height);
            string output = "";

            for (int i = 1; i <= NumberOfPages; i  )
            {
                RenderFilter[] filters = new RenderFilter[1];
                LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy();
                filters[0] = new RegionTextRenderFilter(customerIdRectangle);
                FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters);

                try
                {
                    output = PdfTextExtractor.GetTextFromPage(reader, i, strategy);
                }
                catch (Exception) { }
            }


            return output;
        }
 

Ответ №1:

Учитывая ваш код, вы уже на полпути к этому!

Все , что вам нужно сделать, это добавить еще RenderFilter filters один, который блокирует красный текст. Хотя такой класс фильтров не включен в основной дистрибутив iText, его легко реализовать самостоятельно:

  • реализовать AllowImage , чтобы всегда возвращать true ;
  • реализовать AllowText проверку цвета текста.
    На самом деле здесь есть несколько вариантов, но для начала давайте предположим, что используется значение по умолчанию (заполненные контуры символов). Это означает, что вам просто нужно извлечь цвет заливки из TextRenderInfo объекта, используя его GetFillColor метод, и проверить его покраснение.

Комментарии:

1. Не могли бы вы, пожалуйста, написать пример ? Заранее спасибо!

2. @kn1ghtx «Не могли бы вы, пожалуйста, написать пример ?» — Для этого, пожалуйста, поделитесь репрезентативным примером PDF, чтобы протестировать его.

3. Существует случайный текст с одной или двумя строками красного цвета!!

4. Пожалуйста, поделитесь одним из них. Иногда возникают вопросы, требующие детального рассмотрения, которые невозможно определить, не имея общего примера.