как предварительно выбрать определенный принтер из веб-приложения - PullRequest
0 голосов
/ 14 июня 2019

Различные типы PDF-файлов создаются с помощью iText на стороне сервера и отправляются через ResponsOutputStream.На стороне клиента отображается диалоговое окно печати (по крайней мере, в большинстве программ просмотра) и выбирается принтер по умолчанию.Некоторые PDF-файлы должны быть напечатаны на labelprinter, другие на настольном принтере.Можно ли предварительно выбрать другой принтер, когда появится printdialog?

Я пробовал это для настольного Java-приложения, и оно работало, но я не могу сделать это со стороны сервера.

    ec.setResponseContentType("application/pdf"); 
    ec.setResponseHeader("Content-Disposition", "attachment; filename="labels.pdf"); 
    outStream = ec.getResponseOutputStream();
    writer = PdfWriter.getInstance(document, outStream);

    PdfAction action = new PdfAction(PdfAction.PRINTDIALOG);
    writer.setOpenAction(action);

тот же результат с использованием этой инструкции, поскольку я не могу найти решение для предварительного выбора конкретного принтера с использованием Javascript

    writer.setOpenAction(PdfAction.javaScript("this.print(true);", writer));

, всегда выбран принтер по умолчанию или последний использованный принтер

1 Ответ

0 голосов
/ 18 июня 2019

В соответствии с Adobe Acrobat SDK JavaScript ™ для справки по API Acrobat® метод Doc print также имеет параметр printParams

printParams (необязательно, Acrobat 6.0) Объект PrintParams, содержащий параметры, используемые для печать. Если этот параметр передается, любые другие параметры игнорируются.

В соответствии с примером из этой записи можно использовать этот параметр для выбора принтера:

Пример 2 (Acrobat 6.0)

Печать текущего документа на известном принтере.

var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.automatic;
pp.printerName = "hp officejet d series";
this.print(pp);

Таким образом, если вы знаете имя принтера на стороне клиента, вы можете установить его, как показано в этом примере.

PS: Скорее всего, ваш код работает в непривилегированном контексте; таким образом, pp.interactive будет игнорироваться, вы не сможете запустить автоматическое задание на печать.

...