<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沙漠中的魚

    欲上天堂,先下地獄
    posts - 0, comments - 56, trackbacks - 0, articles - 119
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    Java自從問世以來在各方面發展迅速,但是一直以來,打印輸出是java最弱的方面。事實上,java1.0不支持任何打印功能。Java1.1在 java.awt包里包含了一個叫做PrintJob的類,但是這個類提供的打印功能十分粗糙和不可靠。當java1.2問世,它圍繞 PrinterJob設計了一個完整獨立的打印機制(叫做java2D printing API),并且在java.awt.print包里定義了一些新的類和接口。這些使得基于PrintJob打印機制(就是AWT printing)基本荒廢,雖然PrintJob從未被抨擊而且至少在這篇文章里仍然是一個提供技術的類。

      在J2SE1.3里當PrintJob的功能擴展到可以通過在java.awt包里的JobAttributes 和PageAttributes兩個類設定工程和頁面的屬性時發生了一些額外的改變。隨著J2SE1.3的發布,打印功能相應的得到了完善;但是在混合使用這兩種完全不同的打印機制的時候仍然存在一些問題。比如,這兩種機制使用java.awt.Graphics這個類的一個接口來展現打印內容,意味著所有要打印的東西都必須用一張圖片表示。另外,完善的PrintJob提供了很有限的工程相關屬性的設置;這兩種機制都沒有辦法通過程序來選擇目標打印機。

      Java打印最大的改變來自于J2SE1.4的發布帶來的Java打印服務API。這個第三代Java打印支持接口突破了先前提到的局限性。因為新的API就是以前兩種舊的打印機制定義的功能函數的一個父集。

    下面是我通過這些API寫的定位打印示例代碼,希望對用java實現打印的朋友有一定的幫助!
    在CentOS4.4,jdk1.6下測試通過。

    import java.awt.Color; 
    import java.awt.Font; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.print.PageFormat; 
    import java.awt.print.Printable; 
    import java.awt.print.PrinterException; 

    import javax.print.Doc; 
    import javax.print.DocFlavor; 
    import javax.print.DocPrintJob; 
    import javax.print.PrintException; 
    import javax.print.PrintService; 
    import javax.print.PrintServiceLookup; 
    import javax.print.SimpleDoc; 
    import javax.print.attribute.DocAttributeSet; 
    import javax.print.attribute.HashDocAttributeSet; 
    import javax.print.attribute.HashPrintRequestAttributeSet; 
    import javax.print.attribute.PrintRequestAttributeSet; 
    import javax.print.attribute.standard.MediaSizeName; 
    import javax.swing.JOptionPane; 

    /** 
    * java定位打印,把打印內容打到指定的地方。 

    @author lyb 

    */
     
    public class LocatePrint implements Printable 
        
    private int PAGES = 0

        
    private String printStr; 

        
    /* 
         * Graphic指明打印的圖形環境;PageFormat指明打印頁格式(頁面大小以點為計量單位, 
         * 1點為1英寸的1/72,1英寸為25.4毫米。A4紙大致為595×842點);page指明頁號 
         
    */
     
        
    public int print(Graphics gp, PageFormat pf, int page) 
                
    throws PrinterException 
            Graphics2D g2 
    = (Graphics2D) gp; 
            g2.setPaint(Color.black); 
    // 設置打印顏色為黑色 
            if (page >= PAGES) // 當打印頁號大于需要打印的總頁數時,打印工作結束 
                return Printable.NO_SUCH_PAGE; 
            g2.translate(pf.getImageableX(), pf.getImageableY());
    // 轉換坐標,確定打印邊界 
            Font font = new Font("宋體", Font.PLAIN, 24);// 創建字體 
            g2.setFont(font); 
            
    // 打印當前頁文本 
            int printFontCount = printStr.length();// 打印字數 
            int printFontSize = font.getSize();// Font 的磅值大小 
            float printX = 595 / 2// 給定字符點陣,X頁面正中 
            float printY = 842 / 2// 給定字符點陣,Y頁面正中 
            float printMX = printX - (printFontCount * printFontSize / 2);// 打印到正中間 
            float printMY = printY - printFontSize / 2;// 打印到正中間 
            g2.drawString(printStr, printMX, printMY); // 具體打印每一行文本,同時走紙移位 
            g2.drawString(printStr, printMX - printFontSize * printFontCount, 
                    printMY 
    + printFontSize); // 具體打印每一行文本,同時走紙移位 
            g2.drawString(printStr, printMX + printFontSize * printFontCount, 
                    printMY 
    + printFontSize); // 具體打印每一行文本,同時走紙移位 
            g2.drawString(printStr, printMX, printMY + printFontSize * 2); // 具體打印每一行文本,同時走紙移位 
            return Printable.PAGE_EXISTS; // 存在打印頁時,繼續打印工作 
        }
     

        
    // 打印內容到指定位置 
        public void printContent() 
            printStr 
    = "打印測試內容";// 獲取需要打印的目標文本 
            if (printStr != null && printStr.length() > 0// 當打印內容不為空時 
            
                PAGES 
    = 1// 獲取打印總頁數 
                
    // 指定打印輸出格式 
                DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
                
    // 定位默認的打印服務 
                PrintService printService = PrintServiceLookup 
                        .lookupDefaultPrintService(); 
                
    // 創建打印作業 
                DocPrintJob job = printService.createPrintJob(); 
                
    // 設置打印屬性 
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
                
    // 設置紙張大小,也可以新建MediaSize類來自定義大小 
                pras.add(MediaSizeName.ISO_A4); 
                DocAttributeSet das 
    = new HashDocAttributeSet(); 
                
    // 指定打印內容 
                Doc doc = new SimpleDoc(this, flavor, das); 
                
    // 不顯示打印對話框,直接進行打印工作 
                try 
                    job.print(doc, pras); 
    // 進行每一頁的具體打印操作 
                }
     catch (PrintException pe) 
                    pe.printStackTrace(); 
                }
     
            }
     else 
                
    // 如果打印內容為空時,提示用戶打印將取消 
                JOptionPane.showConfirmDialog(null
                        
    "Sorry, Printer Job is Empty, Print Cancelled!"

                        
    "Empty", JOptionPane.DEFAULT_OPTION, 
                        JOptionPane.WARNING_MESSAGE); 
            }
     
        }
     

        
    public static void main(String[] args) 
            LocatePrint lp 
    = new LocatePrint(); 
            lp.printContent(); 
        }
     

    }
     

    評論

    # re: java定位打?。ㄈ纾撼校睋蛴。?a name="Post">  回復  更多評論   

    2010-06-25 16:13 by java打印
    // 設置紙張大小,也可以新建MediaSize類來自定義大小
    pras.add(MediaSizeName.ISO_A4);

    怎么通過新建MediaSize類來自定義大小呢?

    我新建了MediaSize類,但還是添加不到pras里!

    怎么通過新建MediaSize類來自定義大小 ?。?/div>
    主站蜘蛛池模板: 青柠影视在线观看免费高清 | 国产亚洲一区二区手机在线观看| 精品国产人成亚洲区| 亚洲欧洲日产国码av系列天堂 | 又粗又硬又大又爽免费视频播放| 亚洲精品成人区在线观看| 久久99亚洲综合精品首页| 亚洲AV无码乱码国产麻豆穿越| 五月天网站亚洲小说| 久久精品亚洲AV久久久无码 | 处破女第一次亚洲18分钟| 岛国精品一区免费视频在线观看| 久久免费视频99| 最近最好的中文字幕2019免费| 国产成人免费福利网站| 国产亚洲大尺度无码无码专线| 91精品国产亚洲爽啪在线观看| 亚洲人成网站看在线播放| 免费一区二区三区在线视频| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 亚洲人成网国产最新在线| 特级一级毛片免费看| 无码人妻丰满熟妇区免费| 成人毛片视频免费网站观看| 久久久久亚洲爆乳少妇无| 亚洲黄色网址大全| 国产成人精品亚洲一区| a在线免费观看视频| 青青久在线视频免费观看| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲精品中文字幕无码AV| 国产成人亚洲精品电影| 免费国产叼嘿视频大全网站| 午夜免费不卡毛片完整版| 国产精品亚洲成在人线| 亚洲精品无码专区久久| 男人的天堂网免费网站| 国产在线不卡免费播放| 91亚洲国产成人精品下载| 青草青草视频2免费观看| 1000部拍拍拍18免费网站|