PHP Java Bridge # вызывает FOP из PHP - PullRequest
1 голос
/ 29 июня 2010

Я часто проверяю StackOverflow и обычно мне очень помогаю :), поэтому я догадался, почему бы не попросить о помощи по этому вопросу?

Я использую PHP в веб-приложении, и мне нужно использовать Apache FOP для создания PDF-файла из предварительно отформатированного файла FO. ATM Я использую командную строку exec ('fop ...') для этой цели, но у меня есть несколько проблем при изменении ОС сервера.

Я видел в Интернете, что FOP можно вызывать напрямую из Javaclass с помощью PHP Java-моста, но после неудачных попыток я хотел бы знать, есть ли у кого-нибудь из вас лучший учебник, чем этот HowTo / PHPJavaBridge .

PS: мост установлен и работает, FopWrapper.jar собран и установлен, но когда я вызываю его из PHP, у меня появляется ошибка "ClassNotFound". Некоторые идеи?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 23 октября 2011

есть альтернатива, если вы не хотите участвовать в Java. Здесь есть бесплатный сервер FOP:

Сервер FOP , это просто пакет, который включает в себя все необходимое для запуска Apache FOP. Вы можете вызвать сервер из PHP, используя HTTP-сообщение, на этой странице есть пример

0 голосов
/ 01 июля 2010

Наконец-то я нашел решение в этом списке рассылки Fop из PHP Java , так что оно прекрасно работает с последней выпущенной версией FOP 0.9x.единственная проблема сейчас заключается в том, что когда Tomcat завершил свои работы над сгенерированным pdf, последний оставался заблокированным, и его нельзя было открыть без перезапуска Сервера.

Есть идеи?спасибо ранее:)

РЕДАКТИРОВАТЬ: Хорошо, мой плохой быть действительно нубом в Java, не помогло мне.На самом деле проблема была в том, что я открыл FileOutputStream и забыл закрыть его в самом конце.Если это может кому-то помочь, вот как я это сделал:

require_once("java/Java.inc");

$input      = 'D:/wamp/www/test/fo2pdf';
$output     = 'D:/wamp/www/test/fo2pdf';
$sourcefile = 'test.fo';
$destfile   = 'trys.pdf';

$pdffile    = new Java("java.io.FileOutputStream", $output . "\\" . $destfile);
$mimes      = new Java("org.apache.fop.apps.MimeConstants");
$fopfactory = new Java("org.apache.fop.apps.FopFactory");

$fopf       = $fopfactory->newInstance();
$fopf->setUserConfig( new Java("java.io.File", "D:/wamp/www/myvisitV3/outils/FOP/conf/fop.xconf") );
$userf      = $fopf->newFOUserAgent();
$fop        = $fopf->newFop($mimes->MIME_PDF, $userf, $pdffile);


$transformerclass   = new Java("javax.xml.transform.TransformerFactory");
$transformerfactory = $transformerclass->newInstance();
$transformerf       = $transformerfactory->newTransformer();

$src        = new Java("javax.xml.transform.stream.StreamSource", new Java("java.io.File", $input . "\\" . $sourcefile ));
$res        = new Java("javax.xml.transform.sax.SAXResult", $fop->getDefaultHandler());

$transformerf->transform($src, $res);
$pdffile->close();
0 голосов
/ 07 августа 2010

В нашей компании мы решили вашу проблему, создав простой FOP-сервер для выполнения всей работы.Вы можете подключиться к FOP-серверу с помощью PHP curl или всех других способов подключения к хосту.Мы отправляем содержимое файла .fo на сервер и получим сгенерированный PDF.Преимущество в том, что не зависит от того, на каком сервере работает FOP-сервер.Единственная проблема, с которой мы столкнулись, заключается в том, что не так просто запустить простую Java-программу, как разработчик Linux.Вероятно, вы можете использовать контейнер сервлетов Java (в Tomcat) для запуска вашего программного обеспечения. Для нашего использования один «экран» Linux сделает свою работу.в зависимости от ваших дополнительных настроек.Вы можете реализовать один протокол с информацией заголовка, а затем с содержимым .fo файла.

0 голосов
/ 29 июня 2010

Если вы используете виртуальный хостинг, это, вероятно, плохая идея («У меня несколько проблем при смене ОС сервера»).Мост PHP / Java - это приложение Java EE, связывающееся с вашим приложением PHP через локальный сокет.Поддержка Java EE не очень распространена для учетных записей общего хостинга.

Если на хосте установлена ​​JVM (при условии доступа к оболочке это можно проверить с помощью "java -v"), я бы сделал следующее:

Напишите простое приложение Java SE, принимающее два параметра:

"java -jar MySimpleInterfaceToFOP.jar "/path/to/inputFile" "/path/to/outputFile" "

Запустите это через интерфейс system () или exec () в PHP, используйте random () или mktime () для получения случайных имен файлов.

...