Почему itext5 создает текст, который не виден через Acrobat Reader? - PullRequest
0 голосов
/ 14 мая 2018

У меня небольшой PDF-документ, который представляет собой обрезанную версию из более крупного PDF-документа. Я был удивлен, увидев, что itext5 (используя собственную стратегию размещения) все еще воспроизводит весь текст, который был оставлен после обрезки. Ничего из этого текста не видно через Acrobat Reader.

Как я могу заставить itext 5 обнаруживать и игнорировать такой скрытый текст? Ссылка на PDF со скрытым текстом

РЕДАКТИРОВАТЬ 1 - гиперссылка на неправильный документ

РЕДАКТИРОВАТЬ 2 - Фрагмент кода прилагается

public class MyLocationTextExtractionStrategy : 
LocationTextExtractionStrategy
{
  public void RenderText(TextRenderInfo renderInfo)
  {
   string text = renderInfo.GetText();
  }
}

спасибо, Саурабй

1 Ответ

0 голосов
/ 15 мая 2018

Из комбинации

Я был удивлен, увидев, что itext5 (используя собственную стратегию размещения) все еще воспроизводит весь текст, который был оставлен после обрезки.

и вашего фрагмента кода

public class MyLocationTextExtractionStrategy : LocationTextExtractionStrategy
{
  public void RenderText(TextRenderInfo renderInfo)
  {
   string text = renderInfo.GetText();
  }
}

Я предполагаю, что вы действительно удивлены тем, что в методе RenderText вашего MyLocationTextExtractionStrategy вы извлекаете TextRenderInfo объекты длятекст за рамкой обрезки.

Но это совершенно естественно!Ваш метод RenderText реализует этот метод интерфейса IRenderListener, и методы этого интерфейса вызываются для каждой соответствующей команды рисования в содержимом страницы, независимо от того, будет ли их результат в конечном итоге видимым или нет.

Как я могу заставить itext 5 обнаруживать и игнорировать такой скрытый текст?

Вы можете довольно легко обнаруживать и игнорировать текст вне поля обрезки, сравнивая текстовые координаты с координатами поля обрезкитекущей страницы документа.

iText на самом деле содержит архитектуру фильтра, которая позволяет исключать фрагменты текста для достижения стратегии, которая не удовлетворяет некоторому критерию.

Если вы, например, в настоящее время используете свою стратегию какэто:

MyLocationTextExtractionStrategy strategy = new MyLocationTextExtractionStrategy();
PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy);

Вы можете применить фильтр области рамки кадрирования следующим образом:

MyLocationTextExtractionStrategy strategy = new MyLocationTextExtractionStrategy();
FilteredTextRenderListener strategyWithFilter = new FilteredTextRenderListener(strategy,
        new RegionTextRenderFilter(pdfReader.GetCropBox(1)));
PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategyWithFilter);

В качестве отступления:

Я хочу всевидимый текст в документе.Когда я говорю «видимый», я имею в виду текст, который виден через Adobe Acrobat Reader DC.Я не хочу ограничивать текст какой-либо конкретной областью.Только весь видимый текст.

  • Текст может быть невидимым по ряду причин, помимо выхода за границы рамки обрезки, например

    • itможет быть нарисован в том же цвете, что и фон, например, белый на белом
    • . Некоторые настройки или операции могут преобразовывать цвет текста и фона в один и тот же цвет, даже если они могут изначально отличаться,
    • можно использовать режим рендеринга текста, который ничего не рисует для начала,
    • глифы шрифта, используемого для текста, могут быть невидимы,
    • текст может быть покрыт каким-либо изображением,
    • ...

    Извлечение текста извлечет все эти «невидимые» фрагменты текста.

    (До определенного момента вы можете расширить свою структуру извлечения текстаЧтобы распознать это, вы можете найти много вопросов и ответов о таких расширениях здесь при переполнении стека, но всегда будут случаи, которые вы не рассмотрели.)

  • Также текст может быть толькочастично покрыт.Например, рассмотрим регистр буквы «R» и некоторого белого прямоугольника, покрывающего правую ногу буквы «R», что делает его похожим на «P»

    Извлечение текста вернет «R», даже если Adobe Reader отображает что-то, что выраспознавать как 'P'.

  • Шрифты могут иметь неполную или полную неверную информацию, которой символ Unicode соответствует одному из его глифов.

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

  • Текст в PDF может быть нарисован не с использованием инструкций рисования текста, а с использованием векторной графики, например произвольных форм.

    Извлечение текста вообще не извлечет такой «текст».

  • ...

Если эти проблемы являются пробным показом длявы, извлечение текста - неправильная технология для вас, и вы должны использовать OCR вместо этого.

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