Я бы хотел, чтобы это был принтер в формате PDF. Мне все равно, когда я увижу это на экране, прямо к принтеру будет идеально
Вы не можете сделать это с простым HTML / CSS / JS. Поскольку JSF - это просто генератор кода HTML / CSS / JS, он не может творить волшебство для вас. Самое близкое, что вы можете получить, это JavaScript window.print()
, но он все равно покажет пользователю настройки принтера и тому подобное (в основном, он делает то же, что и Ctrl+P
).
Лучше всего создать апплет , который использует API javax.print
, а затем внедрить этот апплет на страницу JSF с помощью тега HTML <applet>
или <object>
.
Если вы можете жить, видя его прямо на экране и передавая задание на печать самому конечному пользователю, то вы можете отправить файл PDF на экран с помощью JSF следующим образом:
public void sendPdf() throws IOException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.setResponseContentType("application/pdf");
externalContext.setResponseHeader("Content-Disposition", "inline; filename=\"filename.pdf\"");
yourJasperReportsClass.writePdfTo(externalContext.getResponseOutputStream());
facesContext.responseComplete();
}
Я никогда не работал с JasperReports, поэтому yourJasperReportsClass.writePdfTo()
было случайным предположением, но подсказка должна быть достаточно ясной. Вам в основном нужно дать команду написать PDF в тело ответа.
Обновление : согласно комментариям, этот принтер фактически подключен к серверу, а не к клиенту, и вы действительно хотите, чтобы сервер распечатал его на своем принтере. В этом случае просто используйте javax.print
API . Внизу этого документа вы можете найти несколько примеров кода. Вот выдержка из релевантности:
Использование API
Типичное приложение, использующее API печати Java, выполняет эти шаги для обработки запроса на печать:
- Выбирает DocFlavor.
- Создает набор атрибутов.
- Находит сервис печати, который может обрабатывать запрос на печать, как указано в DocFlavor и наборе атрибутов.
- Создает объект Doc, инкапсулирующий DocFlavor и фактические данные печати, которые могут принимать различные формы, включая: файл Postscript, изображение JPEG, URL-адрес или простой текст.
- Получает задание на печать, представленное DocPrintJob, из службы печати.
- Вызывает метод печати задания на печать.
Следующий пример кода демонстрирует типичное использование API службы печати Java: поиск принтеров, которые могут печатать пять двусторонних копий документа Postscript на бумаге формата A4, создание задания печати из одной из возвращенных служб печати и вызов печати.
FileInputStream psStream;
try {
psStream = new FileInputStream("file.ps");
} catch (FileNotFoundException ffne) {
}
if (psStream == null) {
return;
}
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
Doc myDoc = new SimpleDoc(psStream, psInFormat, null);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(5));
aset.add(MediaSize.A4);
aset.add(Sides.DUPLEX);
PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); >
if (services.length > 0) {
DocPrintJob job = services[0].createPrintJob();
try {
job.print(myDoc, aset);
} catch (PrintException pe) {
}
}
Это не имеет значения, если приведенный выше код вызывается управляемым компонентом JSF. Это ведь просто Java. Возможно, вы захотите изменить только DocFlavor
и другие настройки.