Java - отправить OutputStream на принтер непосредственно из сервлета/контроллера

Используя мой контроллер spring, я хочу напрямую открыть представление для печати сгенерированного pdf. Сейчас я создаю pdf с помощью iTextPDF и помещаю его в OutputStream (HttpServletResponse.getOutputStream()). Он загружает pdf. Я могу открыть его в браузере и распечатать с помощью кнопки печати. Я хочу получить пользовательский интерфейс печати с контроллера или без отправки пользовательского интерфейса печати на принтер. Я добавил некоторые из моих методов контроллера,

 String mimeType = "application/pdf";
 System.out.println("MIME type: " + mimeType);
 response.setContentType(mimeType);
 String headerKey = "Content-Disposition";
 String headerValue = String.format("theCoder379.PDF");
 response.setHeader(headerKey, headerValue);
 OutputStream outStream = response.getOutputStream();
 createPdf(outStream, theObject);
 outStream.close();

В методе createPdf (outStream, theObject) он добавляет сгенерированный iText pdf с использованием «theObject» в «outStream». Как я могу этого добиться.


person theCoder379    schedule 02.10.2017    source источник


Ответы (1)


Это невозможно так, как вы хотите (со стороны сервера).

К настоящему времени я создаю PDF-файл с помощью iTextPDF и помещаю его в OutputStream.

Хорошо. Это фактически все, что вы можете сделать из кода на стороне сервера.

Я могу открыть его в браузере и распечатать с помощью кнопки печати. ​​Браузер загружает внешнее приложение (плагин/просмотрщик PDF) и позволяет плагину отображать созданный вами файл. У вас нет никакого контроля над этим.

Однако вы можете создать свою собственную страницу с помощью встроенного плагина. .

<object data="./pdfServlet" type="application/pdf" width="100%" height="100%">
 <p>Alternative text - include a link <a href="myfile.pdf">to the PDF!</a>
 </p>
</object>

и попробуйте вызвать событие print в клиенте. боковой яваскрипт.

window.print();

Однако - я вижу некоторые потенциальные проблемы

  • он может работать не во всех браузерах и не во всех версиях, которые вам могут понадобиться
  • некоторые люди (включая меня) чувствительны, если веб-страница пытается сделать что-то, о чем явно не просят (например, печать)
person gusto2    schedule 02.10.2017