печать java - установка размера границы - PullRequest
4 голосов
/ 01 декабря 2011

Я пытаюсь установить размер на ноль или удалить границы печатного документа в Java.У него всегда стандартная белая рамка.

Вот моя функция печати JPanel и некоторых компонентов:

    public void printComponent(){

          PrinterJob pj = PrinterJob.getPrinterJob();
          pj.setJobName(" Print Component ");

          pj.setPrintable (new Printable() {

            @Override
            public int print(Graphics pg, PageFormat pf, int pageNum) throws PrinterException {
                if (pageNum > 0){
                      return Printable.NO_SUCH_PAGE;
                      }

                      Graphics2D g2 = (Graphics2D) pg;
                      g2.translate(pf.getImageableX(), pf.getImageableY());
                      TournamentView.this.paint(g2);
                      return Printable.PAGE_EXISTS;
            }

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

          try {
              PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
              aset.add(OrientationRequested.LANDSCAPE);
              PrinterResolution pr = new PrinterResolution(200, 200, PrinterResolution.DPI);
              aset.add(pr);
              pj.print( aset);
          } catch (PrinterException ex) {
                // handle exception
          }
        }

Я использую принтер Adobe PDF, так как здесь у меня нет принтера.Какие-либо предложения?

1 Ответ

6 голосов
/ 01 декабря 2011

Используйте версию PrinterJob.setPrintable () , которая принимает аргумент PageFormat.

В PageFormat установите область изображения для бумаги без рамки (x = 0, y = 0, ширина = ширина бумаги, высота = высота бумаги).

Возможно, вы захотите передать это через PrinterJob.validatePage () , который:

Возвращает клон страницы с его настройками, настроенными для совместимости стекущий принтер этого PrinterJob.Например, у возвращенного PageFormat может быть настроена область изображения, чтобы она соответствовала физической области бумаги, используемой текущим принтером.

Это хорошая идея, поскольку принтер может не поддерживать печать без полей, и этот метод настроит ваш PageFormat так, чтобы настройки были совместимы с принтером.

ЗдесьПример, который печатает некоторый текст на странице с удаленными границами:

PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat format = pj.getPageFormat(null);
Paper paper = format.getPaper();
//Remove borders from the paper
paper.setImageableArea(0.0, 0.0, format.getPaper().getWidth(), format.getPaper().getHeight());
format.setPaper(paper);

pj.setPrintable(new Printable()
{
    @Override
    public int print(Graphics pg, PageFormat pf, int pageNum)
            throws PrinterException
    {
        if (pageNum > 0)
            return Printable.NO_SUCH_PAGE;

        Graphics2D g2 = (Graphics2D)pg;
        g2.translate(pf.getImageableX(), pf.getImageableY());
        int textHeight = g2.getFontMetrics().getHeight();
        g2.drawString("Good morning, what will be for eating?", 0, textHeight);
        return Printable.PAGE_EXISTS;
    }
}, format);

if (!pj.printDialog())
    return;

pj.print();

Протестировано с использованием Postscript -> Файловый принтер в Windows.Осталась небольшая граница, но это, скорее всего, ограничение драйвера принтера.

...