udskrivning på en matrixprinter!
Jeg har tidligere fået hjælp til at udskrive fra et JTextArea til fysisk printer: http://eksperten.dk/spm/622472Løsningen har været god nok indtil jeg fik en matrix printer (bonprinter), som skal udskrive ordre fra den samme JTextArea.
For at se hvad der skulle indstilles for at få et pæn udskrift, har jeg først prøvet at udskrive til bonprinteren fra WordPad og det er der ingen problemer i.
Følgende skal tilpasses:
Margenen skal fra venstre være 4 mm og fra højre 0 mm.
Skrifttypen skal også skiftes til 12 cpi (dette kom ind i skrifttyperne, efter jeg installerede printeren)
Papiret skal også sættes til Receipt under papirtype.
Spørgsmålet er så hvordan jeg skal implementere disse i java? Jeg har prøvet følgende.
GUI klassen hvor JTextArea bliver initaliseret:
Font generelFont = new Font("12 cpi", Font.PLAIN, 12);
orderArea = new JTextArea();
orderArea.setBounds(0,70,300,300);
orderArea.setFont(generelFont);
orderArea.setMargin(new Insets( 0, 0, 0, 0 ) );
Der må så siges at selvom jeg skriver fontets navn, kommer der ingen ændringer! Hvis jeg skifter til fx Arial eller Verdana, skifter skrifttypen, men ikke når jeg har 12 cpi stående der!
I min printklasse har jeg følgende kode:
package View;
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.text.BadLocationException;
public class PrintClass implements Printable{
private PrinterJob job;
private int numberOfPages = 1;
GUI myGUI;
public PrintClass(GUI myGUI)
{
this.myGUI = myGUI;
}
public void doPrintJob(java.awt.event.ActionEvent evt)
{
job = PrinterJob.getPrinterJob();
job.setPrintable(this);
try
{
System.out.println("Forsøger print");
job.print();
}
catch(PrinterException p){p.printStackTrace();}
}
public int print(Graphics arg0, PageFormat arg1, int arg2) throws PrinterException
{
Paper myPaper = new Paper();
myPaper.setSize(0.5, 1.7);
arg1.setPaper(myPaper);
if(arg2 >= 0 && arg2 < numberOfPages)
{
arg0.translate( (int)arg1.getImageableX(), (int) arg1.getImageableY());
try{
int lineHeight = myGUI.getOrderArea().modelToView(0).height;
int h = 10;
for(int i = 0; i < myGUI.getOrderArea().getLineCount(); i++)
{
int x = myGUI.getOrderArea().getLineStartOffset(i);
int y = myGUI.getOrderArea().getLineEndOffset(i);
arg0.drawString( myGUI.getOrderArea().getText(x, y-x ) , 10, (h += lineHeight));
}
}
catch (BadLocationException i){i.printStackTrace();}
return Printable.PAGE_EXISTS;
}
return Printable.NO_SUCH_PAGE;
}
}
Det styk af koden, hvor jeg prøver på at angive papirtype, virker heller ik! Hver gang jeg udskriver fra mit java program, bliver teksten udskrevet med noget mere eller mindre skæv og uklar skrifttype og teksten kommer i midten af papiret, hvilket er ik mere end 3-4cm lang! Altså jeg får ik en gang halvdelen af linierne med! Dvs. margin ændringen i min GUI klasse, har ingen indflydelse!
Jeg mener selv at jeg på en eller måde skal justere papirets (tekstens) margin fra printklassen! Og ang skriften, kunne jeg også godt tænke mig at vide, hvordan jeg kan fortælle den, at jeg vil bruge "12 cpi"!
Eller gemme det valgte tekst i en rtf format og så udskrive det derfra?!? (det ved jeg ik helt hvordan man gør!)
Evt. et helt nyt forslag til den måde jeg udskriver, vil også være dejligt!
Da det her kan være lidt af en udfordring, giver jeg 110 til det rigtige svar! :-)
