iOS - различать фоновый текст (водяной знак) и реальный текст в PDF
У меня есть PDF с водяным знаком на заднем плане. Когда начинается сканирование для выделения любого слова водяным знаком или аннотацией на фоне, оно выбирается так, как оно было найдено первым в области касания.
Я использую CGPDFScanner для сканирования текста.
Мой вопрос: как определить, является ли отсканированный текст текстом на заднем плане или реальным текстом в PDF? Как отличить стандартный текст от текста аннотации?
Благодарю.
1 ответ
В общем, у вас нет шансов надежно провести различие между "фоновым" и "реальным" текстом. Текст рисуется где-то на странице в некотором порядке, и то, что является передним планом, фоном, обычным текстом,..., является вопросом человеческого восприятия и может вообще не отражаться в структуре потока содержимого PDF.
Вы можете попробовать некоторую образованную догадку, например, предположив, что "настоящий" текст имеет яркие цвета, в то время как фоновый текст имеет более светлые цвета, или "настоящий" текст расположен в горизонтальных линиях, в то время как фоновый текст часто более диагональный и т. Д. Но это догадки В конце концов, не на что полагаться.
С другой стороны, в случае помеченных PDF-файлов у вас может быть шанс, что водяной знак может быть помечен как данные артефакта.
PS Я только что видел, как вы снова поделились своим файлом. В случае вашего документа упомянутая мной эвристика сработает, фоновый текст будет сероватым и напечатан по диагонали.
Таким образом, при сканировании необходимо отслеживать цвет заливки и / или матрицы преобразования. Как только сканер находит текст, вы узнаете, является ли он фоном или передним планом на основе текущего цвета и / или значения матрицы.
Имейте в виду, однако, что это не так просто со всеми документами.