2013-03-05 25 views
5

Próbuję napisać integrację dla systemu przedsiębiorstwa.Drukowanie pliku .PDF przy użyciu różnych drukarek w Javie

Istnieje serwer WWW, który jest używany przez wielu klientów z dwóch różnych miejsc. Na tym serwerze zainstalowano dwie drukarki sieciowe.

Co chcę zrobić, to wydrukować dokumenty PDF na tych drukarkach. Chcę, aby program wysłał dokument do drukarki, na żądanie.

Potrafię określić lokalizację, w której wysłano żądanie. Jednak nie mogę ustawić domyślnej drukarki w środowisku wykonawczym.

Ponieważ jest to serwer internetowy działający w tle, nie mogę wypełnić okna dialogowego drukarki i pozwolić użytkownikowi wybrać drukarkę. Muszę umieć ustawić drukarkę, która będzie używana programowo.

Na razie mogę zobaczyć zarejestrowanych drukarek w systemie przy użyciu PrinterJob.lookupPrintServices(); i mogę ustawić usługę z żądaną drukarką, ale to nie zmienia domyślnej drukarki, a system kontynuuje drukowanie na domyślnej drukarce.

Podaj mi swoje pomysły, jak to osiągnąć.

Odpowiedz

8

Przez więcej badań w Internecie rozwiązałem mój problem. Daję to tutaj tym, którzy mogą tego potrzebować;

wywnioskowałem roztwór z tej strony internetowej:

http://webmoli.com/2008/11/03/java-print-pdf/

Uwaga: Musisz zainstalować PdfRenderer .jar biblioteki do projektu, aby uruchomić kod podany na stronie internetowej: Kod początkowo w PrintPdf .java tutaj nie daje mojego rozwiązania, ale autor dodał metodę w sekcji komentarzy, aby ustawić różne drukarki do drukowania w środowisku wykonawczym.

Metoda jest:

/** 
* Sets the printer service to be used for printing 
* 
* @param argPrintServiceName 
* @throws PrinterException 
*/ 
public void setPrintService(String argPrintServiceName) throws PrinterException { 
PrintService[] printServices = PrinterJob.lookupPrintServices(); 
int i; 
for (i = 0; i < printServices.length; i++) { 
if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) { 
printerJob.setPrintService(printServices[i]); 
break; 
} 
} 
if (i == printServices.length) { 
throw new PrinterException(“Invalid print service name: ” + argPrintServiceName); 
} 
} 

trzeba wprowadzić kilka zmian na tej metodzie. Ponieważ printerJob nie jest zmienną globalną, nie wpłynie to na drukowanie.Aby zrobić ten parametr zestaw powrotny tej metody do Printservice jak:

public static PrintService setPrintService(String argPrintServiceName) throws PrinterException { 
     PrintService psr = null; 
    PrintService[] printServices = PrinterJob.lookupPrintServices(); 
    int i; 
    for (i = 0; i < printServices.length; i++) { 
    if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) { 
     psr = printServices[i];   
    break; 
    } 
    } 
    if (i == printServices.length) { 
    throw new PrinterException("Invalid print service name: " + argPrintServiceName); 
    } 
    return psr; 
    } 

W metodzie głównej wywołać metodę jak:

PrintService ps = setPrintService("Printer Name Here"); 

Teraz trzeba wysłać tę usługę do innych metod;

Zmień to:

PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF"); 

do

PrintPdf printPDFFile = new PrintPdf(fis, "Test Print PDF", ps); 

A to są inne metody, które trzeba zmienić jak:

public PrintPdf(byte[] content, String jobName, PrintService ps) throws 
     IOException, PrinterException 
     { 
     initialize(content, jobName, ps); 
    } 



public PrintPdf(InputStream inputStream, String jobName, PrintService ps) 
    { 
    * 
    * 
    initialize(pdfContent, jobName, ps); 
    } 

Dodaj ten wiersz kodu po przypisaniu pjob: pjob.setPrintService(ps);

private void initialize(byte[] pdfContent, String jobName, PrintService ps) throws  
IOException, PrinterException 
{ 
    * 
    * 
     pjob = PrinterJob.getPrinterJob(); 
     pjob.setPrintService(ps); 
    * 
    * 
    ... 
} 

Ten kod działa idealnie i jest w stanie bezpośrednio drukować-pdf.

+0

Tak, pobrałem bibliotekę i działa ona idealnie. Dzięki –

Powiązane problemy