|
| Styring af margin ved udprintning i J2SDK ~ Fra : Martin Møller Bæk |
Dato : 09-08-02 11:05 |
|
Hej
Jeg har et lille problem med marginer, når jeg vil printe noget
ud. Jeg har nogenlunde fundet ud af, hvordan man printer, jeg
har bl.a. nedenstående forsimplede kode. Jeg læste, at en anden
her i gruppen for noget tid siden også havde problemer med at
indstille marginer, hvor han så brugte et 'Paper', samt metoden:
Paper.setImageableArea(x, y, width, height);
Det har jeg også prøvet, men det lykkedes ikke helt. Skal man
bruge setPaper i print metoden, som jeg har gjort, eller hvad.
Når jeg prøvet det, skriver min printer: 'Letter request' og
printer ikke noget. Hvad går der galt.
Er mine udregning iøvrigt iorden. Det er noget med, at målene
angives i 1/72 inches. En inch er 2.5 cm? Det betyder, at
1 cm = .4 * 72. Jeg har prøvet at lave 1.7 cm venstre margin
samt 1 cm top margin.
Mvh
Martin MB
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
if (printJob.printDialog())
{
try
{
printJob.print();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public int print(Graphics g, PageFormat pf, int pi)
{
Paper paper = new Paper();
double cm = 0.4*72;
//20.9 - 2*1.7 = 17.5
//29.6 - 2*1 = 27.6
paper.setImageableArea(1.7*cm, cm, 17.5*cm, 27.6*cm);
pf.setPaper(paper);
//bl.a. g.draw( ........ osv.
}
| |
Daniel Jacobsen (10-08-2002)
| Kommentar Fra : Daniel Jacobsen |
Dato : 10-08-02 08:51 |
|
Hejsa!
Ja, mange har haft dit problem, men her er løsningen, let og enkelt.
Du skal bare skrive følgende i din klasse:
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat format = new PageFormat();
// Her sætter du, hvilken vej papiret skal printes - PORTRAIT eller
LANDSCAPE
format.setOrientation(PageFormat.PORTRAIT);
Paper paper = format.getPaper();
// Her sætter du papirets størelse
paper.setSize(587, 842); // Svarer til A4
// (x-start, y-start, bredde, højde) svarer vist her til
paper.setImageableArea(44, 52, 500, 738);
format.setPaper(paper);
printJob.setPrintable(this, format);
printJob.validatePage(format);
if (printJob.printDialog())
{
try
{
printJob.print();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
Et problem er ofte, at Java som default printer på et stykke papir som
svarer til et Letter-format. I Amerika har man nemlig ikke A-størrelser, men
"Letter-størrelser". Det er rigtigt at de størrelser du skriver er 1/72
tomme, her er de rigtige værdier:
1 tomme = 2,54 cm
1 cm = 0,39 tomme
Mvh. Daniel J.
| |
Martin Møller Bæk (10-08-2002)
| Kommentar Fra : Martin Møller Bæk |
Dato : 10-08-02 03:36 |
|
Hej Daniel og andre
Mange tak for hjælpen. Det var lige det,
der skulle til, (næsten).
Jeg havde prøvet at lege lidt mere med det,
og var kommet frem til noget af din kode, men
bl.a. manglede jeg at "paper.setSize(587, 842)".
Det eneste, som jeg ændre fra din kode var x,y i
paper.setImageableArea(44, 52, 500, 738);
som jeg ændrede til
paper.setImageableArea(46, 48, 500, 738);
Hvis jeg ikke gør det, så bliver marginerne
ikke lige store. Lyder underligt, da dine værdier
hænger sammen med paper.size(..) værdierne.
Måske er Java bare lidt skæv (eller også er
det min printer)
Mvh
Martin
| |
Daniel Jacobsen (11-08-2002)
| Kommentar Fra : Daniel Jacobsen |
Dato : 11-08-02 01:54 |
|
Det er garanteret helt rigtigt, at du skulle ændre æodt på
paper.setImageableArea(x, y, bredde, højde). Jeg har nemlig ikke sat mine
efter at de skulle være lige store, men så det passede med et labels-ark. Så
hvis du bare sætter den så det ser rigtigt ud, er det også rigtigt :)
Mvh. Daniel J.
| |
|
|