Impression Java A3 sur Mac sortie à l'échelle A4


J'ai un problème étrange qui semble être spécifique aux ordinateurs Mac. J'ai un prog qui imprime le contenu d'une surface de dessin AWT sur une feuille de papier A3. Sur les machines Linux et Windows, la sortie est OK. Impression à partir d'un Mac je reçois le même dialogue avec les mêmes paramètres prédéfinis, l'imprimante imprime sur un papier A3 comme prévu, mais pour certaines raisons, l'image est redimensionnée pour s'adapter à une A4 de la zone. Voici les sections pertinentes du code:

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);
  }

Quelqu'un sait-il ce qui pourrait être la cause?

Santé.

Author: Ultimate Gobblement, 2010-09-22

2 answers

Essayez d'appeler

PageFormat newFormat =printJob.pageDialog(format);

Avant l'impression, l'imprimante peut modifier les marges.

Jetez au moins un coup d'œil dans le débogueur et voyez en quoi il se transforme.

Notez également que les systèmes de coordonnées d'impression natifs Macintosh pour le paysage sont inversés.

Alors peut-être l'essayer avec REVERSE_LANDSCAPE au lieu de LANDSCAPE (et il peut être retourné, mais peut ne pas obtenir la liste en traduction)

 1
Author: Tim Williscroft, 2010-11-23 03:54:05

Traitez avec setImageableArea(), modifiez les valeurs et essayez. Appliquez également reverse_landscape pour mac. Et définissez la taille A3: 1190 et 842 valeurs non décimales.

 0
Author: StarCrafter, 2014-12-05 07:13:15