Как распечатать PDF из java-приложения
Я должен распечатать PDF-файл с помощью java-приложения. Я попробовал такой подход:
FileInputStream psStream = new FileInputStream("<path to file>");
PrintService service = getPrinterByName("some printer name");
if (service != null) {
DocPrintJob printJob = service.createPrintJob();
Doc document = new SimpleDoc(psStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
try {
printJob.print(document, null);
} catch (PrintException e) {
e.printStackTrace();
}
}
private PrintService[] getPrintersList() {
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
return services;
}
private PrintService getPrinterByName(String name) {
PrintService[] list = getPrintersList();
if (list.length > 0) {
for (PrintService service : list) {
if (service.getName().contains(name)) {
return service;
}
}
}
return null;
}
Когда я тестировал это на поддельном принтере (я использовал PDFCreator в качестве принтера), все было в порядке, но когда я попытался напечатать на физическом принтере, ничего не произошло.
Затем я использовал PDFBox. Документ был напечатан, но со странными точками между словами, в тех местах, где их не должно было быть.
Итак, возможно, кто-то имеет опыт печати PDF из java-приложений и может поделиться этим информация?
1 ответ:
Отправка PDF-файла непосредственно на принтер будет работать только для принтеров, поддерживающих формат PDF изначально. Это будет поддерживаться любым виртуальным PDF-принтером,но не большинством аппаратных принтеров. Если вы хотите надежно распечатать PDF-файл, вам нужно использовать библиотеку для визуализации его содержимого в принтер.
Взгляните тогда на этот вопрос в SO:
какую библиотеку рендеринга PDF на основе Java я должен использовать для печать?Обновление: Ссылка выше сломана, но нет никакой замены для него другой, что делает поиск google. К сожалению, владельцы переполнения стека решили, что вопросы, связанные с рекомендациями библиотеки, не приветствуются.