JPanel не печатается в ландшафтном режиме по умолчанию, когда я вызываю метод печати для печати - PullRequest
0 голосов
/ 05 января 2019

Вот моя функция для печати панели, по умолчанию она печатается в портретном режиме, и мне приходится каждый раз менять ее на альбомную, я никогда не делал печать с использованием Java, поэтому не могу понять большую часть следующего кода

    public static void Print(JPanel component){
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setJobName(" Print Component ");

    pj.setPrintable (new Printable() {    
        public int print(Graphics pg, PageFormat pf, int pageNum){
        if (pageNum > 0){
            return Printable.NO_SUCH_PAGE;
        }
            pf=pj.defaultPage();
            Paper paper = pf.getPaper();
            paper.setSize(8.5 * 72, 14 * 72);
            paper.setImageableArea(0.5 * 72, 0.0 * 72, 8 * 72, 14 * 72);
            pf.setPaper(paper);
            pf.setOrientation(PageFormat.LANDSCAPE);

            Book book = new Book();//java.awt.print.Book
            book.append(this, pf);
            pj.setPageable(book);

            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX() + pf.getImageableWidth() / 2 -  component.getWidth() / 2, pf.getImageableY() + pf.getImageableHeight() / 2 - component.getHeight() / 2);
            g2.scale(pf.getImageableWidth()/component.getWidth(), pf.getImageableHeight()/component.getHeight());
            component.paint(g2);
            return Printable.PAGE_EXISTS;
    }
  });

  if (pj.printDialog() == false)
  return;

  try {
        pj.print();
  } catch (PrinterException ex) {
        // handle exception
  }
}

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

1 Ответ

0 голосов
/ 06 января 2019

Привет, я нашел решение. Не знаю, как это работает, но я установил все параметры бумаги, формата страницы и книги вне функции «Печать» и добавил книгу с новой возможностью печати (передача всех параметров PageFormat и Paper. ) и я получил результаты, которые хотел. Вот код, который может кому-то помочь. Печать Jpanel на бумаге в Landscae Orientation по умолчанию.

public static void Print(JPanel component){
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setJobName(" Print Component ");

    pj.setPrintable (new Printable() {    
        public int print(Graphics pg, PageFormat pf, int pageNum){
        if (pageNum > 0){
            return Printable.NO_SUCH_PAGE;
        }    
            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX() + pf.getImageableWidth() / 2 - component.getWidth() / 2, pf.getImageableY() + pf.getImageableHeight() / 2 - component.getHeight() / 2);
          //g2.scale(pf.getImageableWidth()/component.getWidth(), pf.getImageableHeight()/component.getHeight());
            component.paint(g2);
            return Printable.PAGE_EXISTS;
    }     
  });

            PageFormat pf = pj.defaultPage();
            pf = pj.defaultPage();
            Paper paper = pf.getPaper();
            paper.setSize(8.5 * 72, 14 * 72);
            paper.setImageableArea(0.5 * 72, 0.0 * 72, 8 * 72, 14 * 72);
            pf.setPaper(paper);
            pf.setOrientation(PageFormat.LANDSCAPE);
            Book book = new Book();//java.awt.print.Book
            book.append((new Printable() {    
            public int print(Graphics pg, PageFormat pf, int pageNum){
            if (pageNum > 0){
            return Printable.NO_SUCH_PAGE;
            }    
            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX() + pf.getImageableWidth() / 2 - component.getWidth() / 2, pf.getImageableY() + pf.getImageableHeight() / 2 - component.getHeight() / 2);
          //g2.scale(pf.getImageableWidth()/component.getWidth(), pf.getImageableHeight()/component.getHeight());
            component.paint(g2);
            return Printable.PAGE_EXISTS;
    }     
  }), pf);
            pj.setPageable(book); 
            if (pj.printDialog() == false)
            return;

  try {
        pj.print();
  } catch (PrinterException ex) {
        // handle exception
  }
}
...