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添加了必要的打印權限,但仍然無法打印。我可以如何解決這個問題,因爲它已經佔用了我大約一週的時間。
謝謝, 薩姆