Я стараюсь сделать приложение для качания здесь. Теперь моя цель - распечатать квитанцию. Я установил все детали на JPanel. Я пытаюсь напечатать JPanel в java, но он печатает пустой документ.Как распечатать jpanel в java?
В JPanel Я хочу напечатать это: код:
1.ActionListener
btnPrint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
PrinterJob pjob = PrinterJob.getPrinterJob();
PageFormat preformat = pjob.defaultPage();
preformat.setOrientation(PageFormat.LANDSCAPE);
PageFormat postformat = pjob.pageDialog(preformat);
//If user does not hit cancel then print.
if (preformat != postformat) {
//Set print component
pjob.setPrintable(new Printer(printPanel), postformat);
if (pjob.printDialog()) {
try {
pjob.print();
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
2.Printer Класс:
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
public class Printer implements Printable {
final Component comp;
public Printer(Component comp){
this.comp = comp;
}
@Override
public int print(Graphics g, PageFormat format, int page_index)
throws PrinterException {
if (page_index > 0) {
return Printable.NO_SUCH_PAGE;
}
// get the bounds of the component
Dimension dim = comp.getSize();
double cHeight = dim.getHeight();
double cWidth = dim.getWidth();
// get the bounds of the printable area
double pHeight = format.getImageableHeight();
double pWidth = format.getImageableWidth();
double pXStart = format.getImageableX();
double pYStart = format.getImageableY();
double xRatio = pWidth/cWidth;
double yRatio = pHeight/cHeight;
Graphics2D g2 = (Graphics2D) g;
g2.translate(pXStart, pYStart);
g2.scale(xRatio, yRatio);
comp.printAll(g2);
return Printable.PAGE_EXISTS;
}
}
Вы сравниваете ссылки с этой строкой ', если' { – user489041
@ user489041 В самом деле, даже если '(preformat.equals (postformat)) {'может не работать, поскольку' PageFormat.hashCode() 'не переопределяется. Более того, этот оператор следует просто удалить, поскольку отмена диалогового окна страницы означает, что пользователь удовлетворен текущими настройками, и появится диалоговое окно печати. –
Все еще не работает. После удаления if (preformat! = Postformat). –