Не удается распечатать текстовый файл с помощью Java 8 в Windows 7

Я создал отчет и экспортировал его в виде текстового файла, чтобы печатать на матричном принтере, однако результат задания - это пустая страница. Я сделал то же самое в ubuntu, и он правильно печатается. Является ли это ошибкой Java?

Это пример кода, который я сделал, чтобы показать вам проблему:

public class PrintError extends Application {

    public static void main(String args[]) {
        launch(args);
    }

    public void start(Stage stage) throws PrintException {
        PrinterJob printerJob = PrinterJob.createPrinterJob();
        printerJob.showPrintDialog(stage);
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
        printRequestAttributeSet.add(new Copies(printerJob.getJobSettings().getCopies()));
        printRequestAttributeSet.add(new JobName("test", Locale.getDefault()));
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc mydoc = new SimpleDoc(ClassLoader.class.getResourceAsStream("/should-be-printed.txt"), flavor, null);
        DocPrintJob job = getPrintService(printerJob.getPrinter().getName()).createPrintJob();
        job.print(mydoc, printRequestAttributeSet);
    }

    private PrintService getPrintService(String name) {
        for (PrintService printService : java.awt.print.PrinterJob.lookupPrintServices()) {
            if (name.equalsIgnoreCase(printService.getName())) {
                return printService;
            }
        }
        return null;
    }
}

Этот пример был создан в JavaFx 8 и работает в Java build 1.8.0-b132 в Windows 7. Я также создал простой проект в github

Ответ 1

Из документации:

Рекомендуемые DocFlavors

API службы печати Java не определяет никаких поддерживаемых DocFlavors....

Когда у вас есть экземпляр PrintService, вы можете использовать метод getSupportedDocFlavors(), чтобы узнать, какие варианты он поддерживает.

Когда вы обнаружите, что в списке нет ни одного из DocFlavor. INPUT_STREAM. TEXT_PLAIN_… ароматов, он не помогает использовать AUTOSENSE, поскольку это просто означает "наилучшая догадка", и маловероятно, что PrintService угадает тип, который он не делает вместо этого более вероятно, что данные будут неверно истолкованы как один из поддерживаемых им форматов.

На моей машине Windows ни один из предоставленных PrintService не поддерживает печать открытого текста...

Ответ 2

Если кто-то сталкивается с подобной проблемой (печать в Windows 7, но работающая в Windows 10 в моем случае), но DocFlavor настроен правильно (т.е. поддерживается одной выбранной службой печати)...

Мне удалось решить мою проблему, обновив JRE с 32-битного 8u101 до 64-битного 8u121.