Как печатать() без printDialog()?
Итак, у меня есть этот код, который печатает несколько строковых строк, и я хочу напечатать его без необходимости выбирать принтер, и как я могу установить формат страницы?
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JPanel;
public class Test extends JPanel {
public static void main(String[] args) {
try {
PrinterJob pjob = PrinterJob.getPrinterJob();
pjob.setJobName("Graphics Demo Printout");
pjob.setCopies(1);
pjob.setPrintable(new Printable() {
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum > 0) // we only print one page
return Printable.NO_SUCH_PAGE; // ie., end of job
pg.drawString("aaaaa", 10, 10);
pg.drawString("bbbbb", 10, 20);
return Printable.PAGE_EXISTS;
}
});
if (!pjob.printDialog()) // choose printer
return;
pjob.print();
} catch (PrinterException pe) {
pe.printStackTrace();
}
}
}
1 ответ
Вы можете указать в качестве дополнительного параметра для
setPrintable()
метод. Для создания объекта вы можете задать
PrinterJob
объект.
И как только вы предоставите
PageFormat
возражать против вызова
printerDialog()
(по крайней мере, на моей машине) больше не нужен.
Я соответствующим образом изменил ваш пример кода:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
public class Test {
public static void main(String[] args) {
try {
PrinterJob pjob = PrinterJob.getPrinterJob();
pjob.setJobName("Graphics Demo Printout");
pjob.setCopies(1);
// on my machine `printServices[2]` is a virtual PDF printer - good for testing since it doesn't any paper
// PrintService[] printServices = PrinterJob.lookupPrintServices();
// pjob.setPrintService(printServices[2]);
PageFormat pageFormat = pjob.defaultPage();
pjob.setPrintable(new Printable() {
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum > 0) // we only print one page
return Printable.NO_SUCH_PAGE; // ie., end of job
Font f = pg.getFont();
pg.setFont(f.deriveFont(Font.PLAIN, 24));
pg.setColor(Color.black);
pg.drawString("aaaaa", 100, 100);
pg.drawString("bbbbb", 100, 200);
return Printable.PAGE_EXISTS;
}
}, pageFormat);
pjob.print();
} catch (PrinterException pe) {
pe.printStackTrace();
}
}
}