Tengo un archivo de texto y necesito imprimirlo en una impresora de red específica. Sé el nombre de la impresora.Imprimir texto Archivar en una impresora específica en java
Hasta ahora he hecho una clase imprimible para imprimir mi archivo (ticket).
public class TicketPrintPage implements Printable {
private File ticket;
public TicketPrintPage(File f) {
ticket = f;
}
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
int interline = 12;
Graphics2D g2 = (Graphics2D) g;
g2.setFont(new Font("CourierThai", Font.PLAIN, 10));
int x = (int) pf.getImageableX();
int y = (int) pf.getImageableY();
try {
FileReader fr = new FileReader(ticket);
BufferedReader br = new BufferedReader(fr);
String s;
while ((s = br.readLine()) != null) {
y += interline;
g2.drawString(s, x, y);
}
} catch (IOException e) {
throw new PrinterException("File to print does not exist (" + ticket.getAbsolutePath() +") !");
}
return Printable.PAGE_EXISTS;
}
}
Yo llamo a esto TicketPrintPage esta manera:
public void printTicketFile(File ticket, int orientation) throws PrinterException {
if (!ticket.exists()) {
throw new PrinterException("Ticket to print does not exist (" + ticket.getAbsolutePath() + ") !");
}
PrinterJob pjob = PrinterJob.getPrinterJob();
// get printer using PrintServiceLookup.lookupPrintServices(null, null) and looking at the name
pjob.setPrintService(getPrintService());
// job title
pjob.setJobName(ticket.getName());
// page fomat
PageFormat pf = pjob.defaultPage();
// landscape or portrait
pf.setOrientation(orientation);
// Paper properties
Paper a4Paper = new Paper();
double paperWidth = 8.26;
double paperHeight = 11.69;
double margin = 16;
a4Paper.setSize(paperWidth * 72.0, paperHeight * 72.0);
a4Paper.setImageableArea(
margin,
//0,
margin,
//0,
a4Paper.getWidth()- 2 * margin,
//a4Paper.getWidth(),
a4Paper.getHeight()- 2 * margin
//a4Paper.getHeight()
); // no margin = no scaling
pf.setPaper(a4Paper);
// Custom class that defines how to layout file text
TicketPrintPage pages = new TicketPrintPage(ticket);
// adding the page to a book
Book book = new Book();
book.append(pages, pf);
// Adding the book to a printjob
pjob.setPageable(book);
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// No jobsheet (banner page, the page with user name, job name, date and whatnot)
pras.add(JobSheets.NONE);
// Printing
pjob.print(pras);
}
No funciona tan mal, pero:
- Yo no funciona desde hace más de una página de texto (encontrado algunos algoritmos para eso, pero bien)
- No puedo saber cuándo termina la impresión de la impresora, y si intento imprimir dos o más tickets seguidos, la impresora devolverá un mensaje de Impresora no preparada.
Entonces, la pregunta es: ¿no hay una manera simple de imprimir un archivo de texto en una impresora?
Esto me permite imprimir la página (no utilicé printDialog), pero PrintRequestAttributeSet no se tiene en cuenta. Pido paisaje e imprime retrato ... Creo que es porque utilizo PrintServiceLookup.lookupPrintServices (null, null). Si especifico un sabor o atributos, no obtengo una lista de impresoras. Tal vez porque son impresoras de red, ¿no puedo interactuar con ellas de esa manera? – Icegras
Posiblemente, también tuve algunos problemas con la impresión en red. Como solo necesitaba imprimir un archivo (el acuerdo de licencia) formateé el archivo de texto para no tener que meterme con la configuración de impresión. No tengo ninguna experiencia con tratar de cambiar la configuración en una impresora de red. Lo siento. – Allan
¿Para qué sirve? Intenté ejecutar tu código pero me encontré con un error de variable aset no disponible. –