Java 模仿打印机
我们必须用Java构建一些软件,最后打印一些文档。不同的文档应放入打印机的不同托盘。因为在开发过程中,我们没有与客户相同的打印机,所以我们正在寻找一款模拟打印机的软件。我们应该能够配置该模拟,例如有多少托盘可用Java 模仿打印机,java,web-applications,printing,Java,Web Applications,Printing,我们必须用Java构建一些软件,最后打印一些文档。不同的文档应放入打印机的不同托盘。因为在开发过程中,我们没有与客户相同的打印机,所以我们正在寻找一款模拟打印机的软件。我们应该能够配置该模拟,例如有多少托盘可用 有人知道mac或windows的这种工具吗?写一个抽象层,您为客户的“真实”打印机实现一次,为“虚拟”打印机实现一次。为客户版本编写集成测试,并在客户环境中运行这些测试。针对抽象层编写代码。您可以在windows上自己创建一个虚拟打印机,而无需任何特殊软件 在Windows 7中: 控制
有人知道mac或windows的这种工具吗?写一个抽象层,您为客户的“真实”打印机实现一次,为“虚拟”打印机实现一次。为客户版本编写集成测试,并在客户环境中运行这些测试。针对抽象层编写代码。您可以在windows上自己创建一个虚拟打印机,而无需任何特殊软件 在Windows 7中:
如果您将其设置为默认打印机,那么从java代码中使用它应该足够简单。您可以安装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);
}
}
“PDF打印机”能用吗?不过,我不确定每次创建的文档是否足够独特,可以作为自动化测试套件的一部分使用。我也很确定这不会暴露打印机之类的东西,比如托盘。模拟打印机真的需要对输入做任何事情吗,或者,如果它只是接受这些内容并将其发送给NUL,可以吗?在互联网上搜索它?还有一些其他线程处理相同的主题:-但它们并不完全相同,因为我认为它们中没有任何一个可以模拟不同的托盘,假设我的答案中的方法不起作用。很好,我刚才在想:)Thnx你也知道如果你设置了多个纸盘吗?@kfleinko不知道,试试:)它可以让你选择一个特定的型号,它可能包含或不包含这些信息。你是对的,我需要对设计做些什么。但是做一些真正的打印总是感觉很好:)虽然我也有同样的想法,但我不认为你真的期望开发人员只在客户环境中开始测试不同的设置。。。您可能需要一些东西来模拟不同的错误条件等。我承认我的建议也不能做到这一点。@eis同意。早期,他们会在客户的环境中运行一个持续集成服务器是的,这一点很清楚,但是当试图运行应用程序时,如果系统上不存在这样的打印机,那么有可能在系统中创建这样的打印机吗?