Java A3 печать на Macs выходит в масштабе A4 - PullRequest
3 голосов
/ 22 сентября 2010

У меня странная проблема, которая характерна для компьютеров Mac.У меня есть прога, которая печатает содержимое поверхности рисования AWT на листе бумаги A3.На машинах с Linux и Windows вывод в порядке.Печать с Mac Я получаю то же диалоговое окно с теми же предустановленными параметрами, принтер печатает на листе бумаги A3, как и ожидалось, но по какой-то причине изображение масштабируется, чтобы соответствовать области A4.Ниже приведены соответствующие разделы кода:

public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    PageFormat format = new PageFormat();
    format.setOrientation(PageFormat.LANDSCAPE);

    double margin = 18; // quarter inch
    double m2 = margin * 2;
    Paper paper = format.getPaper();
    paper.setSize(16.54 * 72, 11.69 * 72); // A3 Landscape
    paper.setImageableArea(margin, margin,  paper.getWidth()-m2, paper.getHeight()-m2);
    format.setPaper(paper);
    printJob.setPrintable(this, format);

    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
    attributes.add(MediaSizeName.ISO_A3);
    attributes.add(OrientationRequested.LANDSCAPE);
    attributes.add(new MediaPrintableArea((int)margin, (int)margin,
            (int)(paper.getWidth()-m2), (int)(paper.getHeight()-m2),
            MediaPrintableArea.INCH));

    if(printJob.printDialog(attributes) ){
      try {
        printJob.print(attributes);
      } catch(PrinterException pe) {
        pe.printStackTrace();
      }
    }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      if(this.componentToBePrinted instanceof PlannerView){
          setScale(g2d);
      }
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  public void setScale(Graphics2D g2d){
      PlannerView planner = (PlannerView)this.componentToBePrinted;
      planner.resetZoom();
      double scale = 1.0 / planner.getRowLength();
      scale *= 4.0; 
      g2d.scale(scale, scale);
  }

Кто-нибудь знает, что может быть причиной этого?

Приветствия.

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Попробуйте позвонить

PageFormat newFormat =printJob.pageDialog(format);

перед печатью, принтер может изменить поля.

По крайней мере, посмотрите в отладчик и посмотрите, во что он превращается.

Также обратите внимание, что собственные системы координат печати Macintosh для ландшафта инвертированы.

Так что, возможно, попробуйте это с REVERSE_LANDSCAPE вместо LANDSCAPE (и это может быть перевернуто, но может не получить список в переводе)

0 голосов
/ 05 декабря 2014

Разобраться с setImageableArea (), изменить значения и попробовать. Также примените reverse_landscape для Mac. Установите размер A3: 1190 и 842, а не десятичные значения.

...