Принудительный целевой принтер на Java - PullRequest
9 голосов
/ 14 ноября 2010

Есть ли способ заставить целевой принтер в Java, используя HashPrintRequestAttributeSet?

Я не хочу, чтобы пользователь мог менять принтер в printdialog

Спасибо

Ответы [ 3 ]

11 голосов
/ 19 января 2012

Пришлось разобраться в этом нелегко, но для будущих поколений, вот мой код:

7 голосов
/ 14 апреля 2014

Мой код для решения этой проблемы:

String printerNameDesired = "My Printer";

PrintService[] service = PrinterJob.lookupPrintServices(); // list of printers
DocPrintJob docPrintJob = null;

int count = service.length;

for (int i = 0; i < count; i++) {
    if (service[i].getName().equalsIgnoreCase(printerNameDesired)) {
        docPrintJob = service[i].createPrintJob();
        i = count;
    }
}
PrinterJob pjob = PrinterJob.getPrinterJob();
pjob.setPrintService(docPrintJob.getPrintService());
pjob.setJobName("job");
pjob.print();
0 голосов
/ 21 октября 2016

Я только что решил эту проблему, запустив команду cmd в Java

static void changeWindowsDefaultPrinter(String printerName) {
    String cmdLine  = String.format("RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n \"%s\"", printerName);
    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmdLine );
    builder.redirectErrorStream(true);
    Process p = null;
    try { p = builder.start(); }
    catch (IOException e) { e.printStackTrace(); }

    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = new String();
    while (true) {
        try {
            line = r.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (line == null) { break; }
        System.out.println( "result  "  + line);
    }
}

И это для меня нарушено: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...