Drucken Ich habe einen Java-Code, der Barcode-Bild mit dem Namen barcode.jpg in dem gleichen Ordner wie die residente JAR-Datei generiert. Ich mache dieDrucken kontinuierlich Barcode-Bilder über einen Thermodrucker mit Java
Image bcode = Toolkit.getDefaultToolkit().getImage("barcode.jpg");
if (bcode != null) {
oTokenPrinter.setTokenParameters(strTokenNumber, bcode);
}
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.PORTRAIT);
aset.add(new MediaPrintableArea((float) 16.0, (float) 20.5, (float) 184.0, (float) 228.5, 1000));
System.out.println(aset);
PrinterJob oJob = PrinterJob.getPrinterJob();
PageFormat pf = oJob.defaultPage();
oJob.setPrintable(oTokenPrinter, pf);
System.out.println(aset);
System.out.println("Printing Started...\n");
try {
oJob.print(aset);
} catch (PrinterException ex) {
Logger.getLogger(EntryHandler.class.getName()).log(Level.SEVERE, null, ex);
}
setTokenParameters
Funktion
public void setTokenParameters(String strTokenId, Image barcode) {
strTokenID = strTokenId;
BarcodeImage = barcode;
}
ist, und dies liegt in der gleichen Klasse, die den Druck() Methode enthält.
public int print(Graphics g, PageFormat pf, int iPage) throws
PrinterException {
if (iPage > 0) {
return NO_SUCH_PAGE;
}
/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
/* Now we perform our rendering */
g.setFont(new Font("Arial", Font.BOLD, 10));
/*Printing Begins*/
if (BarcodeImage != null) {
System.out.println("Started Printing...\n");
g.drawImage(BarcodeImage, 16, -10, 130, 60, null);
g.drawString("Token ID: " + strTokenID, 18, 60);
g.dispose();
System.out.println("Finished Printing");
} else {
System.out.print("Image not loaded");
}
/*Finished Printing.*/
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}
Das ist was ich tue. Die Erzeugung eines Bildes ist in einem Thread und es überschreibt weiterhin und ich kann das sehen, wenn ich das Bild öffne. Aber das Problem ist, dass während des Druckens das gleiche Bild gedruckt wird. Nur das Bild ist immer gleich, die Token-ID ändert sich ständig.
Jede Lösung hierfür. Ich habe versucht, das Bild jedes Mal nach dem Drucken zu löschen. Aber das funktioniert nicht. Ich habe auch versucht, Druckerspooler zu löschen, indem ich eine .bat-Datei durch mein Java-Programm laufen lasse. Kein Erfolg.
HINWEIS: Dies geschieht nur, wenn der Drucker ein Thermodrucker ist. Ich habe einen normalen HP LaserJet ausprobiert und es funktioniert einwandfrei. Aber da ist das Problem, ich muss A4-Blätter verschwenden. Ich brauche dieses Ding in Empfangsgröße auf einem Thermodrucker.
Haben Sie versucht, die Aufgabe zu vereinfachen? zum Beispiel um "Hallo, Welt" auf demselben Drucker zu drucken. Ist es ein Problem der Druckerpuffergröße? – AlexR
Wie gesagt, ich bin in der Lage, beliebige Strings zu drucken, auch wenn sie variieren .... NUR DAS BILD HÄLT AUF WIEDERHOLUNG [es ist immer das erste Bild] ... und beachte auch, dass dieses Ding auf HP Laserjet funktioniert ...NUR AUF THERMALDRUCKER funktioniert das nicht .... – tattu
auch beachten, das bild regeneriert sich richtig ... als ob ich barcode.jpg öffne und eine Vorschau auf den neuen .... nur es druckt den ersten .. Ich weiß nicht, wo der Drucker [oder was auch immer] das erste mit ihm hält ... – tattu