1

クライアントがレポートをダウンロードするためのWebフロントエンドを作成しています。同社が使用しているプログラムはJavaで記述されており、31個のmysqlテーブルで構成されており、必要な4つのレポートにはそれぞれ140ポイントを超えるデータが含まれています。PHPでWebサイトを作成し、Javaでレポートジェネレーターを作成していますが、メモリ内のPDFをクライアントのブラウザーに直接ロードする方法に関する情報を見つけるのに問題があります。JavaからPHPに移行するTCPクライアント/サーバーを使用することを考えましたが、サーバードライブに書き込んでリンクとして提供する必要がないようにコーディングするにはどうすればよいですか。また、私はPHPを初めて使用するため、17,000行のJavaをPHPに書き直したくありません。これを行う方法はありますか?前もって感謝します。

4

2 に答える 2

1

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を1つの大きな塊にまとめているため、完璧にはほど遠いです。-IMO-が調べる必要があるのは、whileループを使用してストリームをチャンクで取得することです。phpのmanページには、基本的に、この例がいくつか含まれています。

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]);

後者はテストされていないので、それがあなたの場合にうまくいくかどうかはわかりません...しかし、あなたはアイデアを得る

于 2012-05-14T08:33:48.307 に答える
0
  1. @Eliasが言ったように、WebリクエストをJavaアプリケーションに直接送信し、PDFをphpにストリーミングします。

  2. Webサービスを使用して、

    I. XML、jSonなどの任意の形式のデータのみを送信するJava側のWebサービスを開発します。

    II。これらのWebサービスを利用するためのコードを記述し、PDFを生成してこれらのPDFをストリーミングするためのコードを開発します。

libを生成するpdfが1つあります。こちらのリンクをご覧ください

于 2012-05-14T08:17:51.340 に答える