2012-12-20 57 views
7

我們必須在Java中構建一些軟件,最終打印一些文檔。不同的文檔應該放在打印機的不同托盤上。由於在開發過程中我們沒有與客戶相同的打印機,因此我們正在尋找一小部分模擬打印機的軟件。我們應該能夠配置該模擬,例如有多少托盤可用。嘲笑打印機

有沒有人知道這樣的工具爲Mac或Windows?

+1

「PDF打印機」工作嗎?不過,我不確定每次創建的文檔是否足以作爲自動化測試套件的一部分使用。我也很確定這不會暴露類似打印機的東西,比如托盤。 – Charles

+0

嘲笑的打印機實際上是否需要對輸入做任何事情,或者如果它只是接受這些東西並將它發送給NUL,它可以嗎? – eis

+0

已經在網上搜索了嗎? – ggcodes

回答

4

編寫一個抽象層,您爲客戶的「真實」打印機執行一次,併爲「虛擬」打印機執行一次。編寫客戶版本的集成測試,在客戶環境中運行這些測試。針對抽象層的代碼。

+0

你說得對,我需要做一些關於設計的事情。但總是感覺很好todo一些真正的打印:) – fkleinko

+0

雖然我也有同樣的想法,我不認爲你真的可以期望開發人員開始測試不同的設置,只在客戶環境中......你可能需要一些東西模擬不同的錯誤條件等。我確實承認我的建議也沒有這樣做。 – eis

+0

@eis同意。他們會在客戶環境中運行持續集成服務器 –

3

你可以在windows上自己創建一個虛擬打印機,不需要任何特殊的軟件。

在Windows 7中:

  1. 控制面板
  2. 設備和打印機
  3. [點擊右鍵]添加打印機
  4. 添加本地打印機
  5. 使用現有的端口(假設它已經如果不存在,則創建一個新的文件)
  6. 文件:(要打印到文件),NUL :(打印到任何地方)或CON :(打印到控制檯)
  7. 從打印機列表中選擇您想要模擬的打印機。

如果將其設置爲默認打印機,應該很容易使用java代碼。

+0

不錯,我只是在想這個:) – stamhaney

+0

Thnx你知道你是否設置了多個紙盒? – fkleinko

+0

@kfleinko不知道,試試:)它可以讓你選擇一個特定的模型,它可能會或可能不包含這些信息。 – eis

0

您可以安裝可用作Java應用程序虛擬打印機的PDF打印。基本上,你要做的是安裝一個免費的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); 
} 
}