JavaFX - программно установить путь назначения для прямой печати узла в файл PDF - PullRequest
0 голосов
/ 07 октября 2018

Я хочу напечатать узел в PDF-файл, используя принтер «Microsoft Print to PDF».Предположим, что объект «Принтер» уже извлечен. У меня есть следующая функция, которая работает отлично.

public static void printToPDF(Printer printer, Node node) {

    PrinterJob job = PrinterJob.createPrinterJob(printer);
    if (job != null) {
        job.getJobSettings().setPrintQuality(PrintQuality.HIGH);

        PageLayout pageLayout = job.getPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT,
                Printer.MarginType.HARDWARE_MINIMUM);

        boolean printed = job.printPage(pageLayout, node);
        if (printed) {
            job.endJob();
        } else {
            System.out.println("Printing failed.");
        }
    } else {
        System.out.println("Could not create a printer job.");
    }
}

Единственная проблема, с которой я столкнулся, заключается в том, что появляется диалоговое окно с запросом пути назначения ксохранить в формате PDFЯ изо всех сил пытался найти решение для установки пути программно, но безуспешно.Какие-либо предложения?Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2018

После еще одного исследования я пришел с безобразным хаком.Я получил доступ к частному полю jobImpl из PrinterJob и извлек из него атрибуты.Поэтому я вставил атрибут назначения, и, видимо, он работает так, как запрошено.Я знаю, что это нехорошо, но ... отчасти выполнимо.Если у вас есть предложения, пожалуйста, не стесняйтесь их публиковать.

         try {
            java.lang.reflect.Field field = job.getClass().getDeclaredField("jobImpl");
            field.setAccessible(true);
            PrinterJobImpl jobImpl = (PrinterJobImpl) field.get(job);
            field.setAccessible(false);

            field = jobImpl.getClass().getDeclaredField("printReqAttrSet");
            field.setAccessible(true);
            PrintRequestAttributeSet printReqAttrSet = (PrintRequestAttributeSet) field.get(jobImpl);
            field.setAccessible(false);

            printReqAttrSet.add(new Destination(new java.net.URI("file:/C:/deleteMe/wtv.pdf")));
        } catch (Exception e) {
            System.err.println(e);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...