2012-03-06 36 views
0

我有一個使用PHP的Web應用程序。其中一項功能是直接將收據直接打印到兩臺或更多臺打印機,而無需提示打印機對話框。我已經將小程序編碼如下,並直接打印到代碼中指定的任何打印機。即使已將java策略設置爲允許打印,Applet仍無法打印

import javax.swing.JApplet; 
import java.awt.print.Book; 
import java.awt.print.PageFormat; 
import java.awt.print.Paper; 
import java.awt.print.PrinterException; 
import java.awt.print.PrinterJob; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.nio.ByteBuffer; 
import javax.print.PrintService; 
import com.sun.pdfview.PDFFile; 
import javax.swing.JOptionPane; 
import com.sun.pdfview.PDFPage; 
import com.sun.pdfview.PDFRenderer; 

public class PDFApplet extends JApplet { 
    private PrinterJob pjob = null; 
    //Called when this applet is loaded into the browser. 
    public void init() { 
     try { 
      FileInputStream fis = new FileInputStream("C:\\app\\receipt.pdf"); 
      byte[] pdfContent = new byte[fis.available()]; 
      fis.read(pdfContent, 0, fis.available()); 
      initialize(pdfContent, "Test Print PDF"); 

      //PDFApplet printPDFFile = new PDFApplet(fis, "Test Print PDF"); 
      print(); 
     } catch (Exception e) {} 
    } 

    private void initialize(byte[] pdfContent, String jobName) throws IOException, PrinterException { 
     ByteBuffer bb = ByteBuffer.wrap(pdfContent); 
     // Create PDF Print Page 
     PDFFile pdfFile = new PDFFile(bb); 
     PDFPrintPage pages = new PDFPrintPage(pdfFile); 

     // Create Print Job 
     pjob = PrinterJob.getPrinterJob(); 
     PageFormat pf = PrinterJob.getPrinterJob().defaultPage(); 
     pjob.setJobName(jobName); 
     Book book = new Book(); 
     book.append(pages, pf, pdfFile.getNumPages()); 
     pjob.setPageable(book); 

     // to remove margins 
     Paper paper = new Paper(); 
     paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); 
     pf.setPaper(paper); 
    } 

    public void print() throws PrinterException { 
     String argPrintServiceName = "HP LaserJet Professional P1102"; 

     // Send print job to default printer 
     PrintService[] printServices = PrinterJob.lookupPrintServices(); 
     int i; 
     for (i = 0; i < printServices.length; i++) { 
       if (printServices[i].getName().equalsIgnoreCase(argPrintServiceName)) { 
       pjob.setPrintService(printServices[i]); 
       break; 
      } 
     } 
     if (i == printServices.length) { 
      //throw new PrinterException("Invalid print service name: " + argPrintServiceName); 
      JOptionPane.showMessageDialog(this, "Cannot print to " + argPrintServiceName); 
     } 

     pjob.print(); 
    }  
} 

但是,當我將它嵌入到html頁面中時,applet不再打印。我已經爲java.policy添加了必要的打印權限,但仍然無法打印。我可以如何解決這個問題,因爲它已經佔用了我大約一週的時間。

謝謝, 薩姆

回答

0

數字簽名的使用由受信任的權威機構(例如,威瑞)認證證書的小程序。它會提示用戶,他們可以選擇「始終信任」,然後該小程序將能夠在沒有進一步用戶干預的情況下(假設代碼不調用打印對話框)自發打印&。