2010-06-11 2 views
0

Я пытаюсь определить, будет ли MY xsl: fo сгенерированный PDF-файл превышать одну страницу или нет, без фактического генерирования вывода. Мы используем Apache-FOP 0.95 на нашем сервере, и данные XML генерируются с использованием класса PHP DOMDocument перед тем, как передать его на шаблон XSL-FO.есть такая вещь, как xsl: fo report или xsl: fo simulation?

Мой вопрос:

Есть ли PHP библиотеки там, которые могут имитировать XSL: FO вывода и отправить мне сообщает, что я могу использовать в своем приложении?

В качестве альтернативы, есть ли способ для самого Apache FOP (или Java-приложения sibling), который отправляет отчеты без фактического создания файла? Я читал документацию FOP, и помимо некоторых вещей, которые я не могу полностью понять, я не смог найти способ сделать это из FOP.

ответ

2

Без фактического запуска документа через механизм компоновки нет возможности «имитировать» документ. Кроме того, различные процессоры FO могут создавать несколько разные результаты, поэтому вы не можете полагаться на результат от одного до угадывания количества страниц другого.

Что вы можете сделать с Apache FOP 0.95, генерирует так называемый Area Tree XML (or intermediate format), который, в основном, выводит результат компоновки как XML-файл, а не PDF. Затем этот XML-файл можно проверить с помощью XPath (или XSLT), чтобы определить количество страниц. Формат XML формально не описан, но вы быстро увидите, как вы можете определить количество страниц. Таким образом, используя «-at application/pdf simulation.xml» вместо «-pdf output.pdf» в командной строке, вы можете создать этот формат XML. Разумеется, большая часть обработки, требуемая для подготовки окончательного документа, должна быть выполнена в этом случае, поэтому повторный запуск всего документа для производства PDF будет стоить довольно долгое время. Хорошей новостью является то, что вы можете использовать AT XML в качестве ввода снова для создания окончательного PDF-файла, поэтому этап компоновки не нужно запускать снова (см. Параметр «-atin» в документации).

Другой возможностью является, конечно, просто использовать инструмент PDF для определения количества страниц окончательного документа.

HTH

+0

Спасибо за ввод, Jeremias. Я пытаюсь избежать создания реального файла. Когда я просматриваю большую часть документации, похоже, что у меня нет выбора, кроме как создать реальный файл и использовать большое потребление памяти FOP. Какой инструмент PDF вы бы предложили использовать для подсчета страниц? Я думал об использовании fpdi (http://www.setasign.de/products/pdf-php-solutions/fpdi/). – topmulch

+0

Я сам не делаю PHP, поэтому я не могу рекомендовать что-либо специфичное для PHP. Сам FOP может сообщать о количестве созданных страниц. Но для этого требуется взаимодействие с FOP с использованием Java-кода. –