2回目の更新に移動してください。この質問の以前のコンテキストを変更したくありませんでした。
Java アプリから wkhtmltoimage を使用しています。
それを使用する標準的な方法は -path-to-exe http://url.com/ image.png
です。
彼らのドキュメントによると-
、入力 URL の代わりに a を記述すると、入力は STDIN にシフトします。
私はProcessBuilder
-を使用してプロセスを開始しています
ProcessBuilder pb = new ProcessBuilder(exe_path, " - ", image_save_path);
Process process = pb.start();
現在、入力ストリームをこのプロセスにパイプする方法がわかりません。
テンプレート ファイルを に読み込みDataInputStream
、最後に文字列を追加しています。
DataInputStream dis = new DataInputStream (new FileInputStream (currentDirectory+"\\bin\\template.txt"));
byte[] datainBytes = new byte[dis.available()];
dis.readFully(datainBytes);
dis.close();
String content = new String(datainBytes, 0, datainBytes.length);
content+=" <body><div id='chartContainer'><small>Loading chart...</small></div></body></html>";
content
プロセスの にパイプするにはどうすればよいSTDIN
ですか?
アップデート - -
Andrzej Doyleによる回答に続いて:
私はgetOutputStream()
プロセスのを使用しました:
ProcessBuilder pb = new ProcessBuilder(full_path, " - ", image_save_path);
pb.redirectErrorStream(true);
Process process = pb.start();
System.out.println("reading");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write(content);
そうすると、次のようなエラーが表示されます。
Exception in thread "main" java.io.IOException: The pipe has been ended
2回目の更新--------
現在のコード ブロックは次のとおりです。
try {
ProcessBuilder pb = new ProcessBuilder(full_path, "--crop-w", width, "--crop-h", height, " - ", image_save_path);
System.out.print(full_path+ "--crop-w"+ width+ "--crop-h"+ height+" "+ currentDirectory+"temp.html "+ image_save_path + " ");
pb.redirectErrorStream(true);
Process process = pb.start();
process.waitFor();
OutputStream stdin = process.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
// content is the string that I want to write to the process.
writer.write(content);
writer.newLine();
writer.flush();
writer.close();
} catch (Exception e) {
System.out.println("Exception: " + e);
e.printStackTrace();
}
上記のコードを実行すると、IOException: The pipe is being closed.
パイプを開いたままにするには、他に何をする必要がありますか?