【发布时间】:2016-09-27 19:08:33
【问题描述】:
我有一个使用 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。
我还成功地使用 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");
}
}
}
}
【问题讨论】: