2012-12-20 4 views
7

Musimy stworzyć trochę oprogramowania w Javie, które na końcu drukuje niektóre dokumenty. Różne dokumenty powinny znajdować się na różnych tacach drukarki. Ponieważ podczas tworzenia nie mamy tej samej drukarki, co nasz klient, szukamy małego oprogramowania, które kpi z drukarki. Powinniśmy być w stanie skonfigurować ten przykład, na przykład liczbę dostępnych tac.Naśmiewanie się z drukarki

Czy ktoś wie, takie narzędzie dla mac lub systemu Windows?

+1

Czy "drukarka PDF" działa? Nie jestem pewien, czy dokumenty tworzone za każdym razem byłyby wystarczająco unikatowe, by można je było wykorzystać jako część pakietu zautomatyzowanych testów. Jestem też całkiem pewien, że nie ujawniłbym takich rzeczy jak drukarki, takich jak tace. – Charles

+0

czy wyśmiewana drukarka rzeczywiście musi coś zrobić z wprowadzeniem, czy też jest w porządku, jeśli po prostu akceptuje rzeczy i wysyła je do NUL? – eis

+0

wyszukiwać w Internecie? – ggcodes

Odpowiedz

4

Napisz warstwę abstrakcji, którą zaimplementujesz raz dla "prawdziwej" drukarki klienta i raz dla "wirtualnej" drukarki. Napisz testy integracji dla wersji klienta, uruchom testy w środowisku klienta. Koduj przeciwko warstwie abstrakcji.

+0

Masz rację, muszę coś zrobić z tym projektem. Ale zawsze wydaje mi się, że jest to dobre drukowanie :) – fkleinko

+0

Chociaż myślę też trochę w tym samym stylu, nie sądzę, aby można było oczekiwać, że programiści zaczną testować różne konfiguracje tylko w środowisku klienta ... Może być potrzebne coś do symulować różne warunki błędu itp. Przyznaję, że moja sugestia też tego nie robi. – eis

+0

@to uzgodniono.na szczęście mieliby ciągły serwer integracyjny działający w środowisku klienta. –

3

Można samemu stworzyć fałszywą drukarkę w systemie Windows, bez specjalnego oprogramowania.

W systemie Windows 7:

  1. Panelu sterowania
  2. Urządzenia i drukarki
  3. [Prawy przycisk myszy] Dodaj drukarkę
  4. Dodaj drukarkę lokalną
  5. Użyj istniejącego portu (zakładając, że już istnieje, utwórz nowy, jeśli nie)
  6. Plik: (do wydrukowania do pliku), NUL: (do drukowania nigdzie) lub CON: (do wydruku na konsolę)
  7. Wybierz drukarkę, którą chcesz emulować z listy drukarek.

Jeśli ustawisz go jako drukarkę domyślną, powinno być łatwe używanie kodu java.

+0

Fajnie, właśnie o tym myślałem :) – stamhaney

+0

Thnx czy wiesz także, czy instalujesz wiele tac papieru? – fkleinko

+0

@kfleinko nie mam pojęcia, spróbuj :) pozwala ci wybrać konkretny model i może lub nie może zawierać tych informacji. – eis

0

Można zainstalować wydruk PDF, który może działać jako wirtualna drukarka dla aplikacji Java. Zasadniczo, należy zainstalować bezpłatnie dostępną drukarkę PDF i sprawić, że aplikacja java wykryje tę usługę drukowania i wydrukuje dowolny dokument do tej usługi. Pamiętam, miałem tę samą sytuację, gdy nie miałem drukarki, użyłem kodu podanego poniżej do interfejsu mojej aplikacji z wirtualną drukarką.

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); 
} 
}