gpt4 book ai didi

java - 使用 PHP 从 Java 生成器提供内存中的 pdf

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:59 24 4
gpt4 key购买 nike

我正在创建一个网络前端,供客户下载他们的报告。该公司使用的程序是用 Java 编写的,由 31 个 mysql 表组成,需要 4 个报告,每个报告包含超过 140 个数据点。我正在用 PHP 制作网站,用 Java 制作报告生成器,但在查找有关如何将内存中的 PDF 直接加载到客户端浏览器中的信息时遇到问题。我考虑使用从 Java 到 PHP 的 TCP 客户端/服务器,但如何对其进行编码,以便不必将其写入服务器驱动器并作为链接提供。我也不希望将 17,000 行 Java 重写为 PHP,因为我是 PHP 新手。有办法完成这件事吗?预先感谢您。

最佳答案

根据 java 应用程序运行所需的时间,您可以考虑使用 proc_open 来创建到 java 程序的管道:

<?php
$desc = array(array('pipe','r'),array('pipe','w'));
$resource= proc_open('bash',$desc,$pipes);
if (!is_resource($resource))
{
throw new Exception('PDF stream creation failed');
}
usleep(5);//for safety
fwrite($pipes[0],'java mkPDF paras'."\n");//double quoted \n is crucial
fclose($pipes[0]);
usleep(100);//while java app is running;
$pdf = stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($resource);
?>

这只是一个基本示例,它将流式 pdf 集中到一大块中,因此它远非完美。 IMO- 应该研究的是使用 while 循环将流分成 block 。 php man page包含几个这样的例子,基本上,替换

usleep(100);//while java app is running;
$pdf = stream_get_contents($pipes[1]);

与:

usleep(10);//while java app is running;
$pdf = '';
while (($pdfBuff = fgets($pipes[1],1024)) !== null)
{
$pdf.=$pdfBuff;//or echo, or whatever
}
fclose($pipes[1]);

后者未经测试,所以我不确定这是否适用于您的情况......但您明白了

关于java - 使用 PHP 从 Java 生成器提供内存中的 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10579475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com