1.自定義壹個mediasize,java是開源的,妳自己創造壹個CustomedMediaSize,代碼復制java相應源文件。
2.讓妳的類根據需要實現應有的屬性。
如果,妳用java.awt.print方式,建議實現PrintRequestAttribute
如果,用javax.print方式,建議多加實現壹個DocAttribute
3.打印的實現程式。
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
MediaSizeExp ms = new MediaSizeExp(8F, 5F, MediaSizeExp.INCH);
//筆者用mediasize自定義名
DocAttributeSet das = new HashDocAttributeSet();
das.add(ms);
Doc doc = new SimpleDoc(Report.this, DocFlavor.SERVICE_FORMATTED.PRINTABLE, das);
//report對象為筆者自實現了printable的打印對象
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(ms);
DocPrintJob job = service.createPrintJob();
try {
job.print(doc, pras);
} catch (PrintException pe) {
}
——這是doc打印方式
PrinterJob pj = PrinterJob.getPrinterJob();
PrintService[] services = PrinterJob.lookupPrintServices();
if (services.length > 0) {
System.out.println("selected printer: " + services[0]);
try {
pj.setPrintService(services[0]);
} catch (PrinterException ex) {
Logger.getLogger(PrinterExperiment.class.getName()).log(Level.SEVERE, null, ex);
}
pj.setPrintable(Report.this, pj.pageDialog(new ParaPageFormat()));
MediaSizeExp ms = new MediaSizeExp(8F,5F,MediaSize.INCH);
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(ms);
pras.add(ms);
try {
pj.print(pras);
} catch (PrinterException ex) {
Logger.getLogger(Report.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
——這是awt,printerjob.getprinterjob()打印方式
需要說明的是:1.兩種方式,筆者實踐了第二種(awt方式),定義頁設置成功顯示為 高<寬 圖例,第壹種方式應該也能成功.以下針對第壹種方式來說.
2.8f和5f是我根據inch算下來的符合高<寬的寬和高。但要求高必須大於內容高度,否則紙張又將設回4a尺寸...
3.pageDialog方法不能少,添加PrintRequestAttributeSet(包括mediasize)也不能少.這是筆者經過實踐發現的,兩個環節應是缺壹不可。
4.筆者使用epson打印機,打印結果可壹參照頁面設置裏的情況,二參照打印機裏的打印任務裏的主視窗設置頁面是否為自定義
5.以上是實驗方法,旨在解決可能性問題,突破技術瓶頸,還不是成熟的商業應用.java的這個高寬限制問題是被報告到java的bug library裏面去的,筆者已經查過。
最後,我的目的實際上是控制java單據的走紙打印,妳應該也懷抱的是相同的打印目的吧。上面的講法實際上是改造java api。
我所說的希望對妳能有所幫助。留個QQ吧:158796347,都是開發者,希望能有所交流和溝通啊。