Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte gerne einen Printerjob schreiben, ohne das ich PageDialog
bzw. Printerdialog anspreche. Die Seitenzahl (von und bis in einem JTextfield)
bzw. die Druckerauswahl (JList) habe ich schon über einen JFrame abgefragt.
Das Pageformat möchte ich auch so angeben, ohne irgendein zusätzl. Fenster
zu öffnen.
Wie kann ich denn diese drei Sachen dem Printerjob übergeben?
Das du dich bemüht hast kann ich mir kaum vorstellen ^^
Code:
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
if(this.landscape)
pras.add(OrientationRequested.LANDSCAPE);
else
pras.add(OrientationRequested.PORTRAIT);
Ist mal ob es Hoch/Querformat ist.
Code:
PrintService service = null;
int[][] pages = new int[1][2];
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG; //das er ein png ausdruckt
pages[0][0] = 1;
pages[0][1] = sizeCount;
//setzt das auszudruckend Dokument fest
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor,
pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//setzt von bis drucken
javax.print.attribute.standard.PageRanges range = new javax.print.attribute.
standard.PageRanges(pages);
pras.add(range);
//wenn als Device -1 übergeben wird, wird ein Dialog für das drucken auswählen ausgegeben!
if (!useDefPrinter)
{
service = ServiceUI.printDialog(this.graphic, 200, 200,
printService, defaultService, flavor, pras);
}
//ansonsten wird der 1te (Standard/Default) Drucker genommen
else
{
//ansonsten standarddevice
if (printService != null && printService.length != 0)
service = printService[0];
}
Habe den Code so gelassen und übernommen, außer das ich die GraphicsConfiguration (bis dahin wurde der Code eingefügt) eingefügt habe.
Code:
Code:
service = ServiceUI.printDialog( GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(), 200, 200, printService, defaultService, flavor, pras);
Er bringt mir jetzt diesen Fehler:
java.lang.IllegalArgumentException: services must be non-null and non-empty
at javax.print.ServiceUI.printDialog(Unknown Source)
at com.sk.vw.inventur.print.DisplayPanel.actionPerformed(DisplayPanel.java:130)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Die Variable services kann doch gar nicht null sein bzw. nicht leer.......
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(OrientationRequested.PORTRAIT);
PrintService service = null;
int[][] pages = new int[1][2];
DocFlavor flavor = DocFlavor.STRING.TEXT_PLAIN; //das er ein txt ausdruckt
pages[0][0] = 1;
pages[0][1] = rowData.length;
/* Locates print services capable of printing the specified DocFlavor.
* Stellt fest, welche Drucker Textdateien und Hochformat drucken.
* Gibt nicht null aus.
*/
PrintService []printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
//Der Standardrucker wird übergeben. Wird ausgegeben
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//setzt von bis drucken
javax.print.attribute.standard.PageRanges range = new javax.print.attribute. standard.PageRanges(pages);
pras.add(range);
service = ServiceUI.printDialog( GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(), 200, 200, printService, defaultService, flavor, pras);
Also der Druckername habe ich per JList abgefragt, Die von und bis in einem JTextfield und die Daten (kann über eine Datei, ArrayList bzw. Array) ausgelesen werden. Wie kann ich diese Daten diesem Printer übergeben, ohne einen Printer- bzw. PageDialog zu öffnen (soll gar nicht geöffnet werden)?
Bei PrintService[0] hat er leider einen Fehler aus und bei defaultService hat er den Printer angenommen. So, jetzt hat er noch einen anderen Fehler. Was will er denn jetzt von mir?
Code:
MyDruckListener drucker = new MyDruckListener();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(OrientationRequested.PORTRAIT);
PrintService service = null;
int[][] pages = new int[1][2];
DocFlavor flavor = DocFlavor.STRING.TEXT_PLAIN; //das er ein txt ausdruckt
pages[0][0] = 1;
pages[0][1] = rowData.length;
/* Locates print services capable of printing the specified DocFlavor.
* Stellt fest, welche Drucker Textdateien und Hochformat drucken.
* Gibt nicht null aus.
*/
PrintService []printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
//Der Standardrucker wird übergeben. Wird ausgegeben
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//setzt von bis drucken
javax.print.attribute.standard.PageRanges range = new javax.print.attribute. standard.PageRanges(pages);
pras.add(range);
service = defaultService;
if (service != null)
{
DocPrintJob job = service.createPrintJob();
// fügt listener hinzu
job.addPrintJobListener(drucker);
try
{
FileInputStream fis = new FileInputStream("D:\\Documents and Settings\\DLBWMRC\\Projekt SAP Richter\\Projektdateien\\Lagertest.txt");
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (PrintException e)
{
e.printStackTrace();
}
}
Klasse MyDruckListener
Code:
class MyDruckListener implements PrintJobListener
{
public void printDataTransferCompleted(PrintJobEvent printJobEvent)
{
System.out.println("Daten wurden zum Drucker geschickt!");
}
public void printJobCompleted(PrintJobEvent printJobEvent)
{
System.out.println("Drucker hat fertig gedruckt!");
}
public void printJobFailed(PrintJobEvent printJobEvent)
{
System.out.println("Fehler beim Drucken!");
}
public void printJobCanceled(PrintJobEvent printJobEvent)
{
System.out.println("Abbruch des druckes!");
}
public void printJobNoMoreEvents(PrintJobEvent printJobEvent)
{
System.out.println("JobNoMoreEvents!");
}
public void printJobRequiresAttention(PrintJobEvent printJobEvent)
{
System.out.println("JobRequieresAttention!");
}
}
Fehlermeldung:
java.lang.IllegalArgumentException: data is not of declared type
at javax.print.SimpleDoc.<init>(Unknown Source)
at com.sk.vw.inventur.print.DisplayPanel.actionPerformed(DisplayPanel.java:146)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
wird nichts in den Array hineingespeichert. Habe schon bei OrientationRequested auf PORTRAIT bzw. LANDSCAPE umgestellt, aber es ist trotzdem nicht möglich.
Wie bekommt man dann die ganzen Drucker in ein Array?
Habe den Drucker aus einer JList und gebe frage den angeklickten Drucker mit getSelectedValue (bekomme ein Object) ab und möchte diesen Wert an einen PrintService übergeben.