My issue is, i'm trying to print using Java and it seems to give a random result each time(Look at the pictures and you will understand). The first time I run it the Image prints fine, but the second time there is a black box covering half of the screen. Here is the First Run
and the Second run
Here is the code:
package test;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;
import javax.swing.*;
import java.awt.print.*;
import java.net.URL;
public class HelloWorldPrinter implements Printable, ActionListener {
private Image ix = null;
public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
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());
ix = getImage("Capture.JPG");
g.drawImage(ix, 1, 1, null);
return PAGE_EXISTS;
}
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
/* The job did not successfully complete */
}
}
}
public static void main(String args[]) {
UIManager.put("swing.boldMetal", Boolean.FALSE);
JFrame f = new JFrame("Hello World Printer");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JButton printButton = new JButton("Print Hello World");
printButton.addActionListener(new HelloWorldPrinter());
f.add("Center", printButton);
f.pack();
f.setVisible(true);
}
public Image getImage(String path) {
Image tempImage = null;
try {
URL imageURL = HelloWorldPrinter.class.getResource(path);
imageURL = HelloWorldPrinter.class.getResource(path);
tempImage = Toolkit.getDefaultToolkit().getImage(imageURL);
} catch (Exception e) {
System.out.println(e);
}
return tempImage;
}
}
Thanks for taking the time to read this and I hope you have a solution.
EDIT: I'm using Microsoft Print To PDF so I can view the print. I don't know if it's relevant but I would add it anyways.
MadProgrammer's solution worked.
Don't use Toolkit#getImage, this could using a thread to load the image an or caching the results in unexpected ways, consider using ImageIO.read instead, it will block until the image is fully realised. It's also possible that your getImage method is triggering an exception and is returning a blank image, but since you ignore the exception result, it's hard to know – MadProgrammer