Ищете механизм рендеринга PDF, который поддерживает детализированные взаимодействия на уровне API

Один из наших основных программных продуктов - это решение для создания довольно сложных печатных документов (например, каталогов продуктов) на полностью автоматизированной основе с использованием только необработанных данных, предоставляемых рядом внешних систем, а также с помощью нашей встроенной CMS.

Пока что мы используем коммерческую реализацию XSL-FO (RenderX) в качестве основного движка для рендеринга окончательного PDF. К сожалению, большая сложность документов, которые нам было предложено подготовить (например, необходимость выбрать наилучшее возможное место для каждого фрагмента содержимого в зависимости от того, сколько места еще доступно на рассматриваемой странице), делает невозможным размещение макета страниц и рендеринга всего документа за один раз. Вместо этого мы выбрали полуинкрементный подход:

Во-первых, у нас есть RenderX, который вычисляет начальный макет, создавая не PDF-файл, а промежуточный XML-файл (представляющий сгенерированные страницы в машиночитаемом формате). Затем мы используем стандартные методы программирования C++, чтобы манипулировать этим XML-файлом в соответствии с нашими потребностями (например, перемещать содержимое или вставлять изображение, где это необходимо). В конце концов, мы передаем файл обратно в RenderX, который затем сам создаст сам PDF.

К сожалению, у этого подхода есть один существенный недостаток: из-за того, что промежуточный файл RenderX содержит только РЕЗУЛЬТАТ ПРОЦЕССА РЕНДЕРИНГА (т. Е. Фактические инструкции для рисования конечной страницы PDF), а не оригинальный набор ограничений макета, который служил его На входе мы можем выполнить только одну такую ​​итерацию. Из-за этого в настоящее время мы не можем вносить какие-либо программные изменения в промежуточный XML-файл (т. Е. Макет), из-за которых необходимо пересчитать макет любой из последующих страниц.

Таким образом, мой вопрос: знаете ли вы какой-либо (коммерческий или с открытым исходным кодом) движок рендеринга, который позволил бы клиентскому приложению-потребителю взаимодействовать с процессом рендеринга на более высоком уровне (например, удалить существующее ограничение макета / элемент содержимого и затем иметь механизм рендеринга пересчитывает все оставшиеся черты / страницы рассматриваемого документа)?

Заранее спасибо,

Микаэл

1 ответ

Смотрите PDFlib и libharu. Это отличные библиотеки, но, возможно, они слишком низкоуровневые для ваших нужд.

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