/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
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.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste