2012-02-29 4 views
6

Я использую wkhtmltopdf в мой проект Java с ProccessBuilder и процесса:Как экспортировать PDF в OutputStream с wkhtmltopdf в Java

ProcessBuilder pb = new ProcessBuilder("wkhtmltopdf.exe", "input.html", "output.pdf"); Process process = pb.start();

Это решение использует HTML-файл в качестве входных данных и сохранить вывод в виде PDF-файла на диске , Но мой html не является файлом, это OutputStream, и я хочу создать файл pdf на лету и не хочу сохранять его на диске.

Есть ли способ передать параметр с OutputStream и получить результат в качестве другого OutputStream?

ответ

2

Если вы передадите «-» вместо «output.pdf», вы должны получить вывод как поток. Тогда вы, возможно, сможете захватить этот поток, но не забудьте проверить его заранее и связать с stderr и stdout, а также отлаживать оба вывода, поскольку wkhtmltopdf может быть немного упрямым :)

В C# пересылка довольно проста и stdin/stderr/stdout - это потоки. Вы должны протестировать все три в качестве выходных данных wkhtml для обоих: один для вывода в формате pdf и один для вывода пользовательского интерфейса, который вы видите при запуске из командной строки. Извините за отсутствие Java или рабочий пример, я на самом деле не пробовал это, так как мои процессы поставлены в очередь и они записываются на диск.

Process _process = new Process(); 
// Other stuff here 
_process.StartInfo.RedirectStandardError = true; 
StreamReader sr = _process.StandardError;