0

Java から wkhtmltopdf を実行しています。プロセスを作成しましたが、タスク マネージャーでもコンソールで何度も繰り返されるため、プロセスがハングしているように見えます。

これは私がwkhtmltopdfを実行する方法です:

String command = applicationLocation + "wkhtmltopdf.exe -O Landscape " + reqURL + "?" + reqQuery + " c:/PDF/" + folderName + "/" + id + "/" + folderName + ".pdf";
Process p = Runtime.getRuntime().exec(command);

ジョブが完了した後、プロセスを「破棄」するにはどうすればよいですか?

これは私にとってはうまくいきませんでした。プロセスが停止することはなく、コードが while ループに入ることもありませんでした。

ProcessBuilder pb = new ProcessBuilder(application, htmlFilePath, pdfFilePath);
Process process = pb.start();

BufferedReader errStreamReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
System.out.println("read errstreamreader");
//not "process.getInputStream()" 

String line = null;

line = errStreamReader.readLine(); 
while(line != null) { 
    System.out.println(line); 
    line = errStreamReader.readLine(); 

    if(line.equals("Done")) {
        process.destroy();
        System.out.println("destroyed process");
    }
} 
4

2 に答える 2

0

結局のところ、私も同じ問題を抱えていました.wkhtmltopdfをループすると、一連のプロセスが作成され、Windows 7を実行しているマシンが大幅に遅くなります。

問題は、Runtime exec の場合と同様に、wkhtmltopdf では実際にはありません。システムのリソースが不足してコンピューターがフリーズするまで、前のプロセスが完了するのを待たずに、さらに wkhtmltopdf プロセスを作成します。

私の解決策: を追加しp.waitFor()ます。wkhtmltopdf プロセスが終了するのを待ってから、ループを続行します。

大きなhtmlファイルがループの完了を遅くする可能性があるため、このソリューションはまだ遅くなる可能性があります。したがって、さらに高速なソリューションが必要な場合は--read-from-stdin、wkhtmltopdf のオプションを使用することをお勧めします。

wkhtmltopdf の出力を読むことに関しては、この質問とそのすべての回答を見ることをお勧めします。

于 2012-07-19T06:39:47.743 に答える
0

それは非常に厄介な問題でした。私のコードがループを引き起こしました。このコードを使用して、サーブレットから PDF を生成するこのクラスを呼び出しました。

// create pdf
if(action != null && action.equals("pdf")) {
    String reqURL = request.getRequestURL().toString();
    String reqQuery = "id=" + bomModuleId+ "&action=pdf";
    String folderName = "doonot";
    GeneratePDF obj = new GeneratePDF();
    obj.genrateCmd(reqURL, "xxx", "xxx", reqQuery, folderName, "10.07.2012");  
}

wkhtmltopdf がまったく同じ URL を使用していることが判明したため、そのページにリクエストを送信し、このループに到達して、再度 wkhtmltopdf を呼び出しました。そのため、最終的に 450 の wkhtmltopdf プロセスが発生し、すべてがクラッシュしました。

解決策:削除しました"&action=pdf"

于 2012-07-12T07:02:06.693 に答える