7

我们必须用 Java 构建一些软件,最后打印一些文档。不同的文档应进入打印机的不同托盘。因为在开发过程中,我们没有与客户相同的打印机,所以我们正在寻找一个模拟打印机的小软件。我们应该能够配置该模拟,例如有多少托盘可用。

有谁知道mac或windows这样的工具?

4

3 回答 3

4

编写一个抽象层,为客户的“真实”打印机实现一次,为“虚拟”打印机实现一次。为客户版本编写集成测试,在客户的环境中运行这些测试。针对抽象层的代码。

于 2012-12-20T08:43:23.450 回答
4

您可以在 Windows 上自己创建一个虚拟打印机,无需任何特殊软件。

在 Windows 7 中:

  1. 控制面板
  2. 设备和打印机
  3. [右键] 添加打印机
  4. 添加本地打印机
  5. 使用现有端口(假设它已经存在,如果不存在则创建一个新端口)
  6. File:(打印到文件),NUL:(无处打印)或 CON:(打印到控制台)
  7. 从打印机列表中选择您要模拟的打印机。

如果您将其设置为默认打印机,它应该很容易从 java 代码中使用。

于 2012-12-20T08:43:32.373 回答
0

您可以安装 PDF 打印,它可以用作 Java 应用程序的虚拟打印机。基本上,您要做的是安装一个免费提供的 PDF 打印机,让您的 java 应用程序发现该打印服务并将任何文档打印到该服务。我记得,当我没有打印机时,我也遇到过同样的情况,我使用下面给出的代码将我的应用程序与虚拟打印机连接起来。

public class HelloWorldPrinter implements Printable, ActionListener {


public int print(Graphics g, PageFormat pf, int page) throws
                                                    PrinterException {

    if (page > 0) { /* We have only one page, and 'page' is zero-based */
        return NO_SUCH_PAGE;
    }

    /* User (0,0) is typically outside the imageable area, so we must
     * translate by the X and Y values in the PageFormat to avoid clipping
     */
    Graphics2D g2d = (Graphics2D)g;
    g2d.translate(pf.getImageableX(), pf.getImageableY());

    /* Now we perform our rendering */
    g.drawString("Hello world!", 100, 100);

    /* tell the caller that this page is part of the printed document */
    return PAGE_EXISTS;
}

public void actionPerformed(ActionEvent e) {
     PrinterJob job = PrinterJob.getPrinterJob();
     job.setPrintable(this);

     PrintService[] printServices = PrinterJob.lookupPrintServices(); 
    try {
        job.setPrintService(printServices[0]);
        job.print();
    } catch (PrinterException ex) {
        Logger.getLogger(HelloWorldPrinter.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static void main(String args[]) {

    UIManager.put("swing.boldMetal", Boolean.FALSE);
    JFrame f = new JFrame("Hello World Printer");
    f.addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {System.exit(0);}
    });
    JButton printButton = new JButton("Print Hello World");
    printButton.addActionListener(new HelloWorldPrinter());
    f.add("Center", printButton);
    f.pack();
    f.setVisible(true);
}
}
于 2014-11-27T16:48:54.800 回答