1

我经常检查 StackOverflow 并经常帮助我:) 所以我猜为什么不寻求帮助呢?

我在基于 Web 的应用程序上使用 PHP,我需要使用 Apache FOP 从预先格式化的 FO 文件生成 PDF。ATM 我为此目的使用命令行exec('fop...') ,但是在更改服务器的操作系统时遇到了一些麻烦。

我在网上看到可以使用 PHP Java 桥接器直接从 Java 类调用 FOP,但是在尝试和尝试失败后,我想知道你们中的一些人是否有比这个HowTo/PHPJavaBridge更好的教程。

PS:桥已安装并正在工作,FopWrapper.jar 已构建并设置,但是当我从 PHP 调用它时出现错误“ClassNotFound”。一些想法?

谢谢。

4

4 回答 4

0

最后,我在这个邮件列表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();
于 2010-07-01T06:49:43.887 回答
0

如果您使用共享主机,这可能是个坏主意(“我在更改服务器的操作系统时遇到了一些麻烦”)。PHP/Java 桥是一个 Java EE 应用程序,通过本地套接字与您的 PHP 应用程序进行通信。Java EE 支持在共享主机帐户上并不常见。

如果主机安装了 JVM(假设 shell 访问可以使用“java -v”进行测试),我将执行以下操作:

编写一个接受两个参数的简单 Java SE 应用程序:

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

通过 PHP 中的 system() 或 exec() 接口运行它,使用 random() 或 mktime() 获取随机文件名。

于 2010-06-29T15:12:15.193 回答
0

如果您不想参与 Java,还有另一种选择。这里有一个免费的 FOP 服务器:

FOP Server,它只是一个捆绑包,包含运行 Apache FOP 所需的一切。您可以使用 HTTP 帖子从 PHP 调用服务器,在该页面中有一个示例

于 2011-10-23T13:15:15.143 回答
0

在我们公司,我们通过创建一个简单的 FOP 服务器来完成所有工作,从而解决了您的问题。您可以使用 PHP curl 或所有其他方法连接到主机来连接到 FOP 服务器。我们将 .fo 文件内容发送到服务器并接收生成的 PDF。优点是,这不依赖于 FOP-Server 正在运行的服务器。我们遇到的唯一问题是,将简单的 Java 程序作为 Linux 守护程序运行并不容易。您可能可以使用 Java Servlet 容器(在 Tomcat 中)来运行您的软件。对于我们来说,一个 Linux 的“屏幕”就可以完成这项工作。

根据您的可选设置,编写 FOP-Server 将带您一些我们的。您可以使用标头信息和 .fo 文件的内容来实现单个协议。

于 2010-08-07T11:27:05.393 回答