Avatar billede strcoder Nybegynder
19. juni 2005 - 19:01 Der er 9 kommentarer og
1 løsning

Ændre printermargin

Hey, jeg er ved at lave et program der bla. skal udskrive på printer, jeg kan ikke finde ud af hvordan jeg fra min kode kan ændre printermargin. Jeg kan ikke få dimentionerne i setImageableArea til at gå under printerens egne marginer.

Så jeg har brug for at ændre printerens egen margin på en eller anden måde.

---- Kode start -------------
package manager;

import java.awt.*;
import java.awt.print.*;

class Printer {
  public Printer() {
    final PrinterJob job = PrinterJob.getPrinterJob();
    Book bog = new Book();
   
    bog.append(new Printable() {
      public int print(Graphics g, PageFormat side, int index) {
        Paper papir = new Paper();
       
        double x = side.getImageableX();
        double y = side.getImageableY();
        double w = side.getImageableWidth();
        double h = side.getImageableHeight();
       
        papir.setImageableArea(x, // venstre margin
                              y, // top margin
                              w, // bredde
                              h); // højde
       
        side.setOrientation(PageFormat.PORTRAIT); // sideformat
        side.setPaper(papir); // anvend papir på siden
       
        // printertest
        g.setColor(new Color(0, 0, 0)); // sort
        g.drawRect((int)x, (int)y, (int)w, (int)h); // kant
       
        return 0;
      }
    }, job.defaultPage());
   
    job.setPageable(bog);
   
    if (job.printDialog()) {
      try { job.print();
      } catch (Exception e) { e.printStackTrace(); }
    }
  }
}
---- Kode slut  -------------
Avatar billede mikkelbm Nybegynder
19. juni 2005 - 19:10 #1
Kan du ikke sætte x og y til 0 ?

papir.setImageableArea(0, 0, w, h);
Avatar billede strcoder Nybegynder
19. juni 2005 - 19:31 #2
Nej
Avatar billede mikkelbm Nybegynder
19. juni 2005 - 19:42 #3
Og det hjælper heller ikke at indsætte minusværdier?

papir.setImageableArea(-20, -20, w, h);
Avatar billede strcoder Nybegynder
19. juni 2005 - 19:44 #4
Man kan ikke ved hjælp af 'setImageableArea' overskride printerens marginer, det bliver simpelthen bare ikke vist på papiret!
Avatar billede mikkelbm Nybegynder
19. juni 2005 - 19:48 #5
Hvad hvis du indsætter:

Graphics2D gfx = (Graphics2D) g;
gfx.translate(side.getImageableX(), side.getImageableY());
gfx.setClip(0, 0, h, w);

Som det første.
Avatar billede mikkelbm Nybegynder
19. juni 2005 - 19:50 #6
Og så skal du jo så tegne på det nye graphics objekt.

gfx.setColor(new Color(0, 0, 0)); // sort
gfx.drawRect((int)x, (int)y, (int)w, (int)h); // kant
Avatar billede mikkelbm Nybegynder
19. juni 2005 - 19:57 #7
Måske du skal undlade translate metoden. Jeg har desværre ikke lige mulighed for at teste det.
Avatar billede _carsten Nybegynder
19. juni 2005 - 21:38 #8
Det kan ikke lade sig gøre at overskride printerens margin, printeren skal bruge x antal millimeter for at holde på papiret mens det kører igennem, så der er ca. 5-7 millimeter hele vejen rundt som du ikke kan skrive på.
Avatar billede strcoder Nybegynder
20. juni 2005 - 00:09 #9
!
Avatar billede strcoder Nybegynder
20. juni 2005 - 14:12 #10
mikkelbm: Du havde ret, jeg var for hurtig til at lukke den her. Det var setClip() der gjorde det muligt at overskride margin fra de standard 72px helt ned til 5px.

Takker og bukker :)


Klik her for points:
http://eksperten.dk/spm/627248
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester