Мне хочется просто посмеяться над твоим бедным жалким существованием, когда мне вручили такую задачу, но вместо этого позволь мне объяснить, почему то, что ты хочешь, практически невозможно.
PDF не определяет поля, столбцы и абзац. Это больше похоже на «нарисовать этих персонажей в этих координатах». Матрицы преобразования, цветовые пространства и области отсечения, о боже!
Есть несколько библиотек PDF, которые позволят вам определить местоположение (действительно ограничивающие рамки) всех команд рисования текста на конкретной странице. Исходя из этой информации, вам необходимо определить, соответствуют ли они всем вашим требованиям к макету.
Поля не будут такими трудными (создайте ограничивающий прямоугольник вокруг всего текста, а затем посмотрите, находится ли этот прямоугольник внутри ваших полей), но столбцы будут значительно сложнее. Даже невозможно, если чья-то программа создания PDF-файлов рисует в оба столбца одной командой «нарисовать текст»:
(some text from column one some text from column two) Tj
Представленный с чем-то подобным (совершенно законным, но не подходящим для анализа bbox), вам придется дополнительно разбивать текстовые поля на основе пробелов, которые они содержат.
В целом, огромный и болезненный процесс, который вы не можете обещать, будет на 100% точным, чреват как ложными, так и ложными отрицаниями.
нет.
Fun.
Библиотеки, предоставляющие такой уровень текстовой информации, обычно также сообщают, какой шрифт, размер и цвет использует данный фрагмент текста.
Существует ли такая библиотека для PHP? Я не знаю. iText (Java или C #, AGPL или $) может определять границы текста, как и библиотеки Adobe ($$). Я уверен, что есть другие.
Я настоятельно рекомендую вам поискать другой способ применения этого правила (например, «люди, просматривающие PDF-файлы» или «все должны отправлять документы в [каком-то другом формате]».