Чтобы преобразовать html в pdf, я использую команду wkhtmltopdf в java весенней загрузке.
Я беру входной поток из процесса с помощью
InputStream inputStream = process.getInputStream();
, а затем копирую весь входной поток в ответный выходной поток с apache общими утилитами и flu sh буфером ответов
IOUtils.copyLarge(inputStream, response.getOutputStream());
response.flushBuffer();
и, наконец, уничтожением процесса.
Но когда я выбираю записи размером до 4500, значит, размером до 60 КБ, тогда это работает хорошо.
Но когда я выбираю запись больше чем 4500, то есть размер> 60K, система зависает на
IOUtils.copyLarge(inputStream, response.getOutputStream());
и в сетевой консоли браузера, статус ожидает бесконечно без ответа.
Мой код указан ниже.
Process process = Runtime.getRuntime().exec("wkhtmltopdf --debug-javascript -s A4 -L 0mm -R 0mm -T 28mm -B 10mm --header-html header.html --footer-html footer.html htmlFile.html -");
process.waitFor(5, TimeUnit.SECONDS);
response.setContentType("application/pdf");
try (OutputStream outputStream = process.getOutputStream(); InputStream inputStream = process.getInputStream();) {
IOUtils.copyLarge(inputStream, response.getOutputStream());
response.flushBuffer();
} finally {
process.destroy();
}
Как скопировать большой входной поток в response.getOutputStream ()?
Я также пытался использовать,
(1) inputStream .transferTo (response.getOutputStream ()), затем
(2) StreamUtils.copy (inputStream, response.getOutputStream ());
но не получите ответ.