Размер бумаги, определенный в настройках принтера в Windows, не попадающий в Java - PullRequest
0 голосов
/ 07 июля 2019

Я использую этот код Java для печати на принтере по умолчанию без диалогового окна печати. В настройках принтера я добавил нестандартный формат бумаги, который я хочу напечатать на бумаге (1/2 страницы). Когда я печатаю через этот код Java, мои пользовательские настройки бумаги не попадают на принтер. Но когда я печатаю вручную, пользовательские настройки бумаги работают на принтере.

    import java.awt.print.PrinterJob;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import javax.print.Doc;
    import javax.print.DocFlavor;
    import javax.print.DocPrintJob;
    import javax.print.PrintException;
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    import javax.print.SimpleDoc;
    import javax.print.event.PrintJobAdapter;
    import javax.print.event.PrintJobEvent;


    public class GenerateInvoice {

        public static void printInvoice(String invoice) throws IOException {
          try {
              PrintService mPrinter = null;
              Boolean bFoundPrinter = false;

              PrintService[] printServices = PrinterJob.lookupPrintServices();

              for (PrintService printService : printServices) {
                  String sPrinterName = printService.getName();
                  if (sPrinterName.equals("EPSON LQ-310")) {
                      mPrinter = printService;
                      bFoundPrinter = true;
                  }
              }
              String testData = invoice+"\f";
              InputStream is = new ByteArrayInputStream(testData.getBytes());
              DocFlavor flavor =  DocFlavor.INPUT_STREAM.AUTOSENSE   ;

              PrintService service = PrintServiceLookup.lookupDefaultPrintService();
              System.out.println(service);

              DocPrintJob job = service.createPrintJob();
              Doc doc= new SimpleDoc(is, flavor, null);

              PrintJobWatcher pjDone = new PrintJobWatcher(job);

              job.print(doc, null);

              pjDone.waitForDone();

              is.close();
          } catch (PrintException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
      static class PrintJobWatcher {
          boolean done = false;

          PrintJobWatcher(DocPrintJob job) {
              // Add a listener to the print job
              job.addPrintJobListener(new PrintJobAdapter() {
                  public void printJobCanceled(PrintJobEvent pje) {
                      allDone();
                  }
                  public void printJobCompleted(PrintJobEvent pje) {
                      allDone();
                  }
                  public void printJobFailed(PrintJobEvent pje) {
                      allDone();
                  }
                  public void printJobNoMoreEvents(PrintJobEvent pje) {
                      allDone();
                  }
                  void allDone() {
                      synchronized (PrintJobWatcher.this) {
                          done = true;
                          PrintJobWatcher.this.notify();
                      }
                  }
              });
          }
          public synchronized void waitForDone() {
              try {
                  while (!done) {
                      wait();
                  }
              } catch (InterruptedException e) {
              }
          }
      }

    }

Могу ли я получить свои настройки бумаги через этот код и использовать его здесь. Помогите мне.!

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