我有一个使用Java 8(1.8.0_45)打印到打印机的Mac(OS X,el capitan)上开发的应用程序。它完美地打印到打印机上,在纸上绘制一个很好的圆圈(椭圆形)。但是,我已将该应用程序移至Linux Mint系统(版本17.3,Mate),并生成(弹出)空白页面。 (Brother MFC-J6510DW)使用相同的网络打印机。我已经在Linux系统上安装了适当的驱动程序,并且可以在文本编辑器中打印出来,或者发送测试页。在Linux系统上使用Java 7(1.7.0_111)。我在Mac和Linux系统上使用Eclipse作为我的IDE。Java Linux从PrinterJob打印空白页
我也成功地使用Mac打印了带有应用程序的文本,但是在Linux系统上,打印机上再次出现空白页。我试图用椭圆来消除Mac和Linux之间的字体问题。
我已经添加了代码来检查打印机服务,它正确地在Linux系统上找到打印机。 job.printDialog的对话框出现了(就像它在Mac系统上一样)。有趣的是,Linux系统上出现的对话框是从文本编辑器打印时在Linux系统上出现的对话框的简化版本。但是,它仍然是一个有用的对话框,我甚至可以将其打印到一个文件(也会生成一个空白图像)。
我已经在网上搜索答案,但没有发现任何东西似乎与这个问题有关。谢谢!
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.*;
public class PrintSomething implements Printable, ActionListener {
public PrintSomething()
{
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
System.out.println("ENTERING PRINT JOB. PAGE = " + page);
if (page > 0)
{
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
System.out.println("Drawing Oval PAGE = " + page);
g2d.drawOval(50, 200, 50, 50);
// g.drawString(“Hello World", 250, 50);
return PAGE_EXISTS;
}
@Override
public void actionPerformed(ActionEvent e)
{
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean doPrint = job.printDialog();
if (doPrint)
{
try
{
System.out.println("STARTING PRINT JOB");
job.print();
}
catch (PrinterException ex)
{
System.out.println("ERROR in PRINT JOB");
}
}
}
}