2012-02-13 29 views
0

美好的一天!即使通過網絡訪問其他人,PrinterJob [JAVA]對話框仍會出現在主機中,爲什麼?

我目前正在研究需要將某些數據直接打印到打印機的程序。幸運的是,我已經在Java中運行了PrinterJob和Printable實用程序。下面是代碼:

SWFPrintableUtil oUtil = new SWFPrintableUtil(sResult);//SWFPrintableUtil implements Printable 

PrinterJob oPrinterJob = PrinterJob.getPrinterJob(); 

oPrinterJob.setPrintable(oUtil); 

boolean bDoPrint = oPrinterJob.printDialog(); 
if (bDoPrint) 
{ 
    try 
    { 
     oPrinterJob.print(); 
    } 
    catch (PrinterException e) 
    { 
     e.printStackTrace(); 
    } 
} 
else 
{ 
    ; 
} 

這是它實現了打印接口的代碼:

@Override 
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) 
    throws PrinterException { 

    if (pageIndex != 0) 
    { 
     return NO_SUCH_PAGE; 
    } 

    System.out.println(csContents); 
    Graphics2D g2d = (Graphics2D) graphics; 
    int nX = (int) pageFormat.getImageableX(); 
    int nY = (int) pageFormat.getImageableY(); 
    g2d.translate(nX, nY); 

    Font oFont = new Font("Serif", Font.PLAIN, 8); 
    FontMetrics oMetrics = graphics.getFontMetrics(oFont); 
    int nLineHeight = oMetrics.getHeight(); 

    BufferedReader oReader = new BufferedReader(new StringReader(csContents)); 

    String sLine = ""; 
    try 
    { 
     while((sLine = oReader.readLine()) != null) 
     { 
      nY = nY + nLineHeight; 
      g2d.drawString(sLine, nX, nY); 
     } 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return PAGE_EXISTS; 
} 

顯然,這個代碼可以做我想做的。點擊按鈕後,此代碼將通過網頁觸發。我已經在Tomcat服務器中部署了這個網頁。單擊該按鈕後,會出現一個對話框,供您選擇打印機並佈置頁面(橫向/縱向,紙張尺寸等)。比方說,我已經在「計算機A」和「計算機B」中部署了我的網站(通過Tomcat)並嘗試使用打印功能,但發生的情況是彈出的打印對話框仍顯示爲「計算機A」 。任何人都可以幫我解決這個問題嗎?提前致謝!

問候, ONEB

回答

0

由於代碼在主機計算機上運行。我想你需要將文件下載/打印到遠程計算機(「計算機B」)並在那裏打印。

+0

嗨!美好的一天,所以你說我的情況是絕望的?在訪問主機的計算機上,打印設置對話框將不會出現? – Oneb 2012-02-14 03:54:18

+0

是的,我認爲是。我想你有一個運行在你的tomcat服務器上的servlet。當你在那裏打印作業時,它將在服務器計算機上運行。我很確定無法讓Java在客戶端計算機上顯示「打印設置」對話框。你可以嘗試的是在你的網站上使用一個鏈接來打開使用JavaScript的打印對話框。 – hage 2012-02-14 11:30:36

+0

謝謝!我會嘗試你的建議。 – Oneb 2012-02-16 02:43:28

相關問題