iOS - различать фоновый текст (водяной знак) и реальный текст в PDF

У меня есть PDF с водяным знаком на заднем плане. Когда начинается сканирование для выделения любого слова водяным знаком или аннотацией на фоне, оно выбирается так, как оно было найдено первым в области касания.

Я использую CGPDFScanner для сканирования текста.

Мой вопрос: как определить, является ли отсканированный текст текстом на заднем плане или реальным текстом в PDF? Как отличить стандартный текст от текста аннотации?

Благодарю.

1 ответ

Решение

В общем, у вас нет шансов надежно провести различие между "фоновым" и "реальным" текстом. Текст рисуется где-то на странице в некотором порядке, и то, что является передним планом, фоном, обычным текстом,..., является вопросом человеческого восприятия и может вообще не отражаться в структуре потока содержимого PDF.

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

С другой стороны, в случае помеченных PDF-файлов у вас может быть шанс, что водяной знак может быть помечен как данные артефакта.

PS Я только что видел, как вы снова поделились своим файлом. В случае вашего документа упомянутая мной эвристика сработает, фоновый текст будет сероватым и напечатан по диагонали.

Таким образом, при сканировании необходимо отслеживать цвет заливки и / или матрицы преобразования. Как только сканер находит текст, вы узнаете, является ли он фоном или передним планом на основе текущего цвета и / или значения матрицы.

Имейте в виду, однако, что это не так просто со всеми документами.

Другие вопросы по тегам