Обрабатывать значения текстовой матрицы PDF (Tm), полученные с помощью CGPDFScanner на iPhone / iPad - PullRequest
3 голосов
/ 23 марта 2011

Я пытаюсь разобрать содержимое PDF, чтобы найти и выделить текст. Мне удалось с помощью CGPDF найти текст с операторами TJ и Tj и сказать, на какой странице это слово. Проблема приходит с подсветкой.

Я подписался на множество других сообщений, таких как Получение текстовой позиции или Поиск в PDF .

Я знаю, что для позиционирования текста используются операторы Tm (текстовая матрица), TD и Td (возможно, T *), но я не могу понять, как использовать эту информацию.

Когда я печатаю значение Tm, я получаю целое число из девяти чисел, я могу предположить, что это матрица 3x3. Я могу дать вам вывод:

2011-03-23 ​​10: 59: 07.894 PDFSearch [11035: 40b] BT (I) 161361744:

2011-03-23 ​​10: 59: 07.896 Поиск в PDF [11035: 40b] TM (I) 161361104:

2011-03-23 ​​10: 59: 07.897 Поиск в PDF [11035: 40b] Tf (I) 161361616:

2011-03-23 ​​10: 59: 07.899 PDFSearch [11035: 40b] TJ: R

2011-03-23 ​​10: 59: 07.899 PDFSearch [11035: 40b] TJ: e

2011-03-23 ​​10: 59: 07.901 PDFSearch [11035: 40b] TJ: t

2011-03-23 ​​10: 59: 07.901 Поиск в PDF [11035: 40b] TJ: i

2011-03-23 ​​10: 59: 07.903 PDFSearch [11035: 40b] TJ: co

2011-03-23 ​​10: 59: 07.903 Поиск в PDF [11035: 40b] TJ: l

2011-03-23 ​​10: 59: 07.905 Поиск в PDF [11035: 40b] TJ: o

2011-03-23 ​​10: 59: 07.907 Поиск в PDF [11035: 40b] ET (I) 161361872:

Есть идеи, как использовать его для поиска позиционирования текста? И использовать его, чтобы нарисовать прямоугольник в представлении pdf с помощью quartz2D?

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 13 августа 2011

Оператор Tm имеет шесть параметров, поэтому вам нужно использовать CGPDFScannerPopNumber шесть раз, что даст вам шесть значений с плавающей запятой, которые вы можете использовать для построения CGAffineTransform. Параметры e и f соответствуют tx и ty, в противном случае поля имеют одинаковые имена.

Подробнее см. В спецификации PDF , в частности, в главе о тексте (стр. 250 содержит оператор Tm).

Помните, что операнды извлекаются из стека, поэтому f будет первым полученным значением, а a последним.

0 голосов
/ 13 августа 2011

Проверьте PDFKitten , проект с открытым исходным кодом, они анализируют все контейнеры TJ, Tj, TM и другие, чтобы вычислить позицию текста на экране.Это не идеально, но начало.Поиск в pdfs может быть сложным, есть много способов сделать pdf отображаемый текст, некоторые из них вообще не являются шрифтами.

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