27. marts 2007 - 16:03Der er
20 kommentarer og 1 løsning
Java: Udskrift til bonprinter
Jeg er igang med at skrive et program, som skal kunne udskrive kvitteringer på en Epson-termoprinter - altså en bon-printer som man kender fra supermarkedet.
Jeg er desværre ikke helt tilfreds med denne. For det første vil jeg gerne have, at "grafikken" starter helt oppe i toppen af siden. Desuden ser det ud til, at der er en meget stor margen, da min rektangel plus tekst stopper langt fra den højre side.
Håber der er nogen, som kan hjælpe mig med disse små problemer?
public static void main(String[] args) { PrinterJob job = PrinterJob.getPrinterJob();
// Hent default pageformat fra windows standardprinter PageFormat pf = job.defaultPage(); Paper pa = new Paper();
// Gør hele papiret skrivbart - IKKE sikkert printeren kan skrive i fuld bredde pa.setImageableArea(0, 0, p.getWidth(), p.getHeight()); pf.setPaper( pa );
ToPrinter tp = new ToPrinter();
// Brug papirformat til printjob job.setPrintable(tp, pf);
public static void main(String[] args) { PrinterJob job = PrinterJob.getPrinterJob();
// Hent default pageformat fra windows standardprinter PageFormat pf = job.defaultPage(); Paper pa = new Paper();
// Gør hele papiret skrivbart - IKKE sikkert printeren kan skrive i fuld bredde pa.setImageableArea(0, 0, pf.getWidth(), pf.getHeight()); pf.setPaper( pa );
ToPrinter tp = new ToPrinter();
// Brug papirformat til printjob job.setPrintable(tp, pf);
Som du kan se, så mangler den venstre del af kassen. Hvordan kan det være? Har prøvet at ændre de to første variabler i setImageableArea, det hjælper ingen ting.
De færreste printere kan skrive helt ud til kanten af papiret, de skal bruge en del af papirbredden til at trække papiret igennem printeren, og for mig at se mangler der 3-4 mm
Du kan enten flytte 'x' på din drawRect eller gøre dit imageableArea det mindre
eks: int mm = (int)(72/25.4); // Omsæt dots til millimeter
g2.drawRect(mm*4,0,150,50); // flyt 'x' 4 millimeter ind
public static void main(String[] args) { PrinterJob job = PrinterJob.getPrinterJob();
// Hent default pageformat fra windows standardprinter PageFormat pf = job.defaultPage(); Paper pa = new Paper();
// Gør hele papiret skrivbart - IKKE sikkert printeren kan skrive i fuld bredde pa.setImageableArea(0, 0, pf.getWidth(), pf.getHeight()); pf.setPaper( pa );
PrintService p = job.getPrintService();
ToPrinter tp = new ToPrinter(p.getName());
// Brug papirformat til printjob job.setPrintable(tp, pf);
Jeg forsøger nu at sidde og udskrive med dette program på en PDF-printer på mit Linux-system. Der bliver gemt en PDF-fil når jeg udskriver med programmet, men filen har ikke noget indhold. Ved du umiddelbart, hvad det kan skyldes?
Problemet er, at denne tekst er variabel pga. at den indeholder en dynamisk tekst. Kan man ikke udfra hvor mange tegn der er i en string beregne hvor meget den fylder og trække det fra?
Nej det kan du ikke, et 'i' fylder mindre i længden end et 'm'.
Alternativt kan du smide din tekst i et char array og beregne hvert enkelt bogstav og enten konvertere dit array til en ny String eller benytte drawChars() til at skrive teksten med.
Synes godt om
Ny brugerNybegynder
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.