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

标签 java php pdf

我正在创建一个网络前端,供客户下载他们的报告。该公司使用的程序是用 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/

相关文章:

php - Ajax 找不到网址

html - 调整 html 复选框的大小以用于 pdf 输出

javascript - 如何从输入字段在浏览器中显示 PDF 文件

Java-计时器递增时对象的重新定位

Android Studio 上的 Java Reflect 无法找到要调用的公共(public)静态方法

java - Eclipse 显示 View 不会显示

javascript - jsPDF 没有创建正确的 PDF

java - 为什么java中的集合有int索引?

php - 权限不足Google Analytics(分析)

php - 在页面中我有 for 循环函数吗?在 for($i=0;$i<=$max;$i++){ Size 查询中只从 mysql 数据库检索一行?