Atitit.java swing打印功能 api attilax总结
Atitit.java?swing打印功能?api??attilax總結(jié)
?
?
1.?打印方式有三種:2
1.1.?一是不經(jīng)過任何修改,直接調(diào)用javascript中的window.print()打印。2
1.2.?二根據(jù)客戶要求的報表格式,編寫相應格式的html,裝載數(shù)據(jù)打印,同樣調(diào)用window.print()打印,只是對html的格式要求比較高。2
1.3.?三是通過客戶提供的word格式,通過xml配置文件與數(shù)據(jù)庫的數(shù)據(jù)進行關(guān)聯(lián),自動裝載數(shù)據(jù)到word中打印,這里是利用客戶端的word進行打印。?2
1.4.?使用lang?api2
2.?打印模式?單頁模式?與多頁模式3
3.?虛擬打印測試4
4.?Java?打印api4
4.1.?通過PrinterJob接口??(?不推薦@depeart)4
4.2.?通過PrintService(推薦)4
5.?Java?jpos?打印框架5
5.1.?Ati?print?----DevicePrinterPrinter5
6.?Code??實現(xiàn)打印Graphics??drawImage?drawString5
6.1.?PrinterJob??。setPrintable6
6.2.?PrinterJob??.setPageable6
7.?獲取打印機列表7
8.?使用指定打印機打印8
9.?參考8
?
1.?打印方式有三種:
1.1.?一是不經(jīng)過任何修改,直接調(diào)用javascript中的window.print()打印。
1.2.?二根據(jù)客戶要求的報表格式,編寫相應格式的html,裝載數(shù)據(jù)打印,同樣調(diào)用window.print()打印,只是對html的格式要求比較高。
1.3.?三是通過客戶提供的word格式,通過xml配置文件與數(shù)據(jù)庫的數(shù)據(jù)進行關(guān)聯(lián),自動裝載數(shù)據(jù)到word中打印,這里是利用客戶端的word進行打印。?
?
1.4.?使用lang?api
作者::?老哇的爪子?Attilax?艾龍,??EMAIL:1466519819@qq.com
轉(zhuǎn)載請注明來源:?http://www.cnblogs.com/attilax/
?
第一種幾乎不用編寫程序,最簡單快捷,這里會遇到幾個問題,只能打印表單內(nèi)容,按鈕不希望打印出來;頁眉頁腳不想打印出來;IE的titile不想打印出來。
解決辦法:把button放在一個table或者div里,打印的時候隱藏,完成后顯示就可以。系統(tǒng)中的javascript打印代碼如下:
?
?
第三種方案利用word強大的排版、打印功能,把排版和打印的需求扔到word中,OA軟件要做的僅僅是讓數(shù)據(jù)導到word中去。JAVA讀取WORD模板,通過XML讀取相關(guān)的數(shù)據(jù)庫數(shù)據(jù),自動轉(zhuǎn)載數(shù)據(jù)到WORD模板中,最終展現(xiàn)給客戶打印的是WORD。
?
完成此方案后,有幾個特點:打印格式由現(xiàn)有的word格式提供,不需要再花時間開發(fā)調(diào)試程序;實施人員只需要花一點時間就完成標簽和XML文件的設置;在報表中自動加入審批意見,領導印章等,直觀跟現(xiàn)實一致;打印的格式和效果完全由word決定,而word強大并且被大眾而熟悉,在打印的時候可以調(diào)整,所見即所得!
???????小結(jié):這幾種方案不僅僅應用于OA的打印,任何web系統(tǒng)CRM、ERP、HR等打印都可以處理。而且也不僅僅是java打印、jsp打印,用PHP、ASP等語言開發(fā)的WEB打印也一樣適用。這幾種打印方案廣泛應用,特別是第三種,有效解決了政務OA的紅頭文件,此文僅做思路的總結(jié),具體實現(xiàn)方法有很多。
?
?
2.?打印模式?單頁模式?與多頁模式?
?
3.?虛擬打印測試
?
直接打印的時候,會彈出存為pdf文件。。。
貌似win7?PDF-XChange?Printer?2012
?
?
4.?Java?打印api
4.1.?通過PrinterJob接口??(?不推薦@depeart)
?
比如,這兩種機制使用java.awt.Graphics這個類的一個接口來展現(xiàn)打印內(nèi)容,意味著所有要打印的東西都必須用一張圖片表示。另外,完善的PrinterJob提供了很有限的工程相關(guān)屬性的設置;這兩種機制都沒有辦法通過程序來選擇目標打印機。
?
PrintService內(nèi)部也是使用PrintService
4.2.?通過PrintService(推薦)
Java打印最大的改變來自于J2SE的發(fā)布帶來的Java打印服務API。這個第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。因為新的API就是以前兩種舊的打印機制定義的功能函數(shù)的一個父集,它是目前我們常用的方法并且是這篇文章的焦點。
更深入來說,以下的步驟包含了怎么使用這個新的Java打印服務API:
1.定義打印機,限制那些返回到提供你要實現(xiàn)功能的函數(shù)的列表。打印服務實現(xiàn)了PrintService接口.
2.通過調(diào)用接口中定義的createPrintJob()方法創(chuàng)建一個打印事件,作為DocPrintJob的一個實例。
3.創(chuàng)建一個實現(xiàn)Doc接口的類來描述你想要打印的數(shù)據(jù)?,?你也可以創(chuàng)建一個PrintRequestAttributeSet的實例來定義你想要的打印選項。
4.通過DocPrintJob接口定義的printv()方法來初始化打印,指定你先前創(chuàng)建的Doc,指定PrintRequestAttributeSet或者設為空值。
現(xiàn)在你可以檢查每一步并且試著完成它們。
?
?
5.?Java?jpos?打印框架
?
參考
jpos_examples_圖文_百度文庫.htm
?
5.1.?Ati?print?----DevicePrinterPrinter
6.?Code??實現(xiàn)打印Graphics??drawImage?drawString
?
import?java.awt.print.PrinterJob;
?
?
1.?
???????????Image?src?=?Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg");??
1.?
??????????drawImage
?
1.?Graphics?g)?{??
2.?????????????if?(paintable)?{??
3.?????????????????g.setColor(Color.GRAY);??
4.?????????????????g.drawString
?
?
6.1.?PrinterJob??。setPrintable
????????//獲取打印服務對象
?
??????????PrinterJob??job??=??PrinterJob.getPrinterJob();??????????
?
?????//?????PageFormat??pageFormat??=??job.defaultPage();//得到默認頁格式????
?
??????????job.setPrintable(new??PrintTest1());//設置打印類
?
?
6.2.?PrinterJob??.setPageable
?
?
???//------------------add?page?and?format
?
????????//????????設置成豎打
?
????????PageFormat??pf??=??new??PageFormat();
?
????????pf.setOrientation(PageFormat.PORTRAIT);
?
????????//????????通過Paper設置頁面的空白邊距和可打印區(qū)域。必須與實際打印紙張大小相符。
?
????????Paper??p??=??new??Paper();
?
????????p.setSize(590,840);//紙張大小??
?
????????p.setImageableArea(10,10,??590,840);//A4(595??X??842)設置打印區(qū)域,其實0,0應該是72,72,因為A4紙的默認X,Y邊距是72
?
????????pf.setPaper(p);
?
????????//????????把??PageFormat??和??Printable??添加到書中,組成一個頁面
????????
????????
????????//????????通俗理解就是書、文檔
?
????????Book??book??=??new??Book();???
?
????????book.append(new??PrintTest(),??pf);
?
?
?
??????????//獲取打印服務對象
?
??????????PrinterJob??job??=??PrinterJob.getPrinterJob();????????????
?
??????????//??設置打印類
?
??????????job.setPageable(book);
?
?
7.?獲取打印機列表
package?com.openbravo.pos.util;
?
import?javax.print.DocFlavor;
import?javax.print.DocFlavor.SERVICE_FORMATTED;
import?javax.print.PrintService;
import?javax.print.PrintServiceLookup;
?
public?class?ReportUtils
?
??public?static?String[]?getPrintNames()
??{
????PrintService[]?arrayOfPrintService?=?PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLE,?null);
????String[]?arrayOfString?=?new?String[arrayOfPrintService.length];
????for?(int?i?=?0;?i?<?arrayOfPrintService.length;?i++)
??????arrayOfString[i]?=?arrayOfPrintService[i].getName();
????return?arrayOfString;
??}
8.?使用指定打印機打印
?
接口?PrintService?是?DocPrintJob?的工廠。PrintService?描述了打印機的功能,并可查詢它來了解打印機支持的屬性。
示例:
???DocFlavor?flavor?=?DocFlavor.INPUT_STREAM.POSTSCRIPT;
???PrintRequestAttributeSet?aset?=?new?HashPrintRequestAttributeSet();
???aset.add(MediaSizeName.ISO_A4);
???PrintService[]?pservices?=
?????????????????PrintServiceLookup.lookupPrintServices(flavor,?aset);
???if?(pservices.length?>?0)?{
???????DocPrintJob?pj?=?pservices[0].createPrintJob();
???????try?{
???????????FileInputStream?fis?=?new?FileInputStream("test.ps");
???????????Doc?doc?=?new?SimpleDoc(fis,?flavor,?null);
???????????pj.print(doc,?aset);
????????}?catch?(FileNotFoundException?fe)?{
????????}?catch?(PrintException?e)?{?
????????}
???}
?
?
9.?參考
Java?web?打印方案?-?tanksyg的專欄?-?博客頻道?-?CSDN.NET.htm
Java打印-Print?Swing?component?-?dontsan?-?ITeye技術(shù)網(wǎng)站.htm
(impt?)打印--學習如何使用打印服務api.htm
Java高級編程?使用打印服務API一(圖)?-?3P代碼.htm
?
轉(zhuǎn)載于:https://www.cnblogs.com/attilax/p/5099572.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Atitit.java swing打印功能 api attilax总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己用纯Java写的这款Mysql客户端
- 下一篇: Linux网络编程——黑马程序员笔记