2010-09-22 10 views
3

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 la même boîte de dialogue avec les mêmes paramètres prédéfinis, l'imprimante imprime sur une feuille de papier A3 comme prévu, mais pour une raison quelconque, l'image est mise à l'échelle pour s'adapter à une zone A4. Ci-dessous sont les sections pertinentes de code:Impression Java A3 sur Mac sortant à l'échelle 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); 
    } 

Est-ce que quelqu'un sait ce qui pourrait causer cela?

Cheers.

+0

Peut-être: https://issues.apache.org/jira/browse/PDFBOX-3453 – tresf

Répondre

1

Essayez d'appeler

PageFormat newFormat =printJob.pageDialog(format); 

avant l'impression, l'imprimante peut modifier les marges. Au moins jeter un coup d'oeil dans le débogueur et voir ce qu'il se transforme en

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

Alors peut-être essayer avec REVERSE_LANDSCAPE au lieu de PAYSAGE (et peut-être pivotés, mais ne peut pas obtenir la liste dans la traduction)

0

Traiter setImageableArea(), modifiez les valeurs et essayer. Appliquez également reverse_landscape pour mac. Et définir le format A3: 1190 & 842 valeurs non décimales.