I am a relatively new programmer so this may be a really simple question to answer but its got me a bit stumped..
I'm trying to print my Java GUI's final output to a printer. Now, in my GUI, I have it so that when you hit print, a pop-up comes up with the list of available printers, and based on the one you select, it should print to that printer.
However it is not. I got most of my code by scouring the internet for solutions to this problem and found some promising code. However, it printed off of a File. So all I simply do in my method is write my output to a file first so that I can use the same methodology.
A couple things before the method:
There are no errors or exceptions thrown.
The File I attempt to create every time always exists, and with the correct text.
The printer I am printing to IS receiving the print job, it even thinks it has completed it.
If I had to guess, I would think I am perhaps writing the output to File in way that the Printer will not except but isn't telling me. Anyways, there is quite a bit in this code that I don't really have a firm understanding of so please let me know what you can find.
Here is my code:
private void printToPrinter()
{
File output = new File("PrintFile.txt");
output.setWritable(true);
//Will become the user-selected printer.
Object selection = null;
try
{
BufferedWriter out = new BufferedWriter(new FileWriter(output));
out.write(calculationTextArea.getText() + "\n" + specificTextArea.getText());
out.close();
}
catch (java.io.IOException e)
{
System.out.println("Unable to write Output to disk, error occured in saveToFile() Method.");
}
FileInputStream textStream = null;
try
{
textStream = new FileInputStream("PrintFile.txt");
}
catch (java.io.FileNotFoundException e)
{
System.out.println("Error trying to find the print file created in the printToPrinter() method");
}
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc mydoc = new SimpleDoc(textStream, flavor, null);
//Look up available printers.
PrintService[] printers = PrintServiceLookup.lookupPrintServices(flavor, null);
if (printers.length == 0)
{
// No printers found. Inform user.
jOptionPane2.showMessageDialog(this, "No printers could be found on your system!", "Error!", JOptionPane.ERROR_MESSAGE);
}
else
{
selection = jOptionPane2.showInputDialog(this, "Please select the desired printer:", "Print",
JOptionPane.INFORMATION_MESSAGE, null, printers,
PrintServiceLookup.lookupDefaultPrintService());
if (selection instanceof PrintService)
{
PrintService chosenPrinter = (PrintService) selection;
DocPrintJob printJob = chosenPrinter.createPrintJob();
try
{
printJob.print(mydoc, null);
}
catch (javax.print.PrintException e)
{
jOptionPane2.showMessageDialog(this, "Unknown error occured while attempting to print.", "Error!", JOptionPane.ERROR_MESSAGE);
}
}
}
}
Create a JTextComponent
(I suggest a JTextArea
so you can use append()
), and append what you need to the field. Do not display it on the view, it is simply a hidden field for printing purposes.
All JTextComponent
s have a print()
method. Simply call hiddenTextArea.print()
and the rest is handled for you.
JTextArea hiddenTextArea = new JTextArea();
for (String s : dataToPrintCollection) {
hiddenTextArea.append(s + "\n");
}
try {
hiddenTextArea.print();
} catch (PrinterException e) {}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With