Java Linux从PrinterJob打印空白页

时间:2016-09-27 19:08:34

标签: java linux printing

我在Mac(OS X,el capitan)上使用Java 8(1.8.0_45)开发的应用程序打印到打印机。它可以很好地打印到打印机上,在纸上画出一个漂亮的圆圈(椭圆形)。但是,我已将应用程序移至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");
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

虽然以下内容并未专门解决此问题,但以下是我发现的内容以及我如何解决此问题。

在另一个上面有Linux Ubuntu 16.04的系统上,我安装了相同的打印机驱动程序,然后在那里运行了应用程序。它工作正常,按预期打印到纸张上。

解决方法是在出现问题的系统上删除Linux Mint 17.3并在其上安装Ubuntu 16.04。然后我安装了打印机驱动程序并测试了应用程序。它按预期工作。所以,对我来说,问题已经解决了,我正在继续前进。

感谢。