2016-09-27 258 views
0

我有一个使用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"); 
     } 
    } 
} 

} 

回答

0

虽然下面并没有具体解决这个问题,但下面是我发现的以及我如何解决这个问题。

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

解决方法是在有问题的系统上清除Linux Mint 17.3并在其上安装Ubuntu 16.04。然后我安装了打印机驱动程序并测试了应用程序。它的工作原理应该如此。所以,对我来说,这个问题已经解决了,我正在从中继续。

谢谢。