Я недавно исследовал и обнаружил собственное PHP-решение для достижения этой цели с помощью FOSS.Класс PHP FPDI можно использовать для импорта документа PDF для использования с классами PHP TCPDF или FPDF , которые предоставляют функциональные возможности для создания и чтения., обновление и написание PDF документов.Лично я предпочитаю TCPDF , поскольку он предоставляет больший набор функций ( TCPDF против FPDF ) , более богатый API ( TCPDF против FPDF ) , другие примеры использования ( TCPDF против FPDF ) иболее активный форум сообщества ( TCPDF против FPDF ) .
Выберите один из вышеупомянутых классов или другой для программной обработки PDFдокументы.Сосредоточив внимание как на текущих, так и на возможных будущих результатах, а также на желаемом опыте пользователя, решите, где (например, сервер - PHP, клиент - JavaScript, оба) и в какой степени (управляемый функцией) Ваша интерактивная логика должна быть реализована.
Лично я бы использовал экземпляр TCPDF, полученный путем импорта документа PDF через FPDI, для итеративной проверки, перевода в общий формат (XML, JSON и т. д.) и сохраните полученное представление в реляционных таблицах, предназначенных для сохранения данных, относящихся к требуемому уровню иерархии и детализации документа.Необходимый уровень детализации часто определяется техническим документом и его упоминанием как текущих, так и возможных будущих результатов.
Примечание: В этом случае я настоятельно рекомендую переводить документы и хранить их вобщий формат для создания слоя абстракции и прозрачности.Например, возможным и непредвиденным будущим результатом может быть предоставление той же функциональности приложения для пользователей, загружающих документы Microsoft Word.Если загруженный документ Microsoft Word не был переведен и сохранен в общем формате, то почти наверняка потребуются обновления API веб-службы и зависимой бизнес-логики.В конечном итоге это приводит к хранению раздутых, неоптимальных данных и неэффективному использованию ресурсов разработки при проектировании, разработке и поддержке нескольких переводчиков.Также было бы неэффективным использование серверных ресурсов для перевода исходящих данных для каждого запроса, в отличие от перевода входящих данных в оптимальный формат только один раз.
Затем я расширил бы таблицы базовых документов, разработав и связав дополнительныетаблицы для сохраняемых данных активов документа, относящихся к функциональным возможностям, таких как:
Версионные дополнения / правки / удаления
- Что
- Верхний / нижний колонтитул
- Текст
- Исходное значение
- Новое значение
- Изображение
- Страница (ы) (один, много или все)
- Местоположение (относительный - текстовый якорь, абсолютный - x/ y координаты)
- Файл (относительный или абсолютный каталог или URL)
- Кисть (чертеж)
- Страницы (один, много или все)
- Местоположение (относительный - текстовый якорь, абсолютный - x / yкоординаты)
- Форма (координаты х / у для перерисовки линии, квадрата, круга, заданного пользователем и т. д.)
- Тип (ручка,карандаш, маркер и т. д.)
- Вес (1px, 3px, 5px и т. д.)
- Цвет
- Аннотация
- Страница
- Местоположение (относительный - текстовый якорь, абсолютный - координаты х / у)
- Форма (линия, квадрат, круг, пользователь и т. Д.)
- Значение (текст аннотации)
- Комментарий
- Цель (страница, другой актив текста / изображения / кисти / аннотации, родительский комментарий - многопоточность)
- Значение (текст комментария)
- Когда
- Кто
Как только некоторые, все или более из документа и его данных об активах сохранятся, я бы спроектировал, задокументировал и разработал API-интерфейс веб-службы PHP, чтобы предоставить функции загрузки CRUD и PDF-документов потребителю пользовательского интерфейса при одновременном усилении ядра. бизнес правила. На данный момент оставшаяся работа теперь лежит на стороне клиента. В настоящее время у меня есть реляционные таблицы, в которых хранятся данные документа и его активов, а также API, предоставляющий потребителю достаточные функциональные возможности, в данном случае клиентский JavaScript.
Теперь я могу проектировать и разрабатывать клиентское приложение с использованием новейших веб-технологий, таких как HTML5, JavaScript и CSS3. Я могу загружать и запрашивать документы PDF с помощью API веб-службы и легко выводить возвращенный общий формат в браузер, однако я решаю (возможно, в данном случае HTML) . Затем я могу использовать 100% нативный JavaScript и / или сторонние библиотеки для функций помощника DOM, создавая векторную графику для обеспечения функций рисования и аннотаций, а также получая доступ и контролируя функциональные и стилистические атрибуты текущего выбранного текста документа и / или изображений. Я могу обеспечить совместную работу в режиме реального времени, используя WebSockets (ранее упомянутый API-интерфейс WebService не применяется) , или с небольшой задержкой, но все еще довольно плавно, используя XMLHttpRequest.
С этого момента небо является пределом, и мяч на вашей площадке!