包裹?測試;
進口?Java . awt . *;
進口?Java . awt . print . *;
公共?班級?JavaPrint?器物?可打印?{
int?m _ wPage
int?m _ hPage
int?m _ orientation
可打印?m _ target
int?maxNumPage?=?1;
字符串?標題?=?”數據表單打印”;
字體?titleFont?=?新的?字體(" bold ",字體。大膽,?14);
布爾?hasTail?=?真實;
int?tailAlign?=?0;
int?headAlign?=?0;
int?topSpace?=?0;
int?leftSpace?=?0;
int?yStart?=?0;
int?yEnd?=?0;
int?xStart?=?topSpace
int?xEnd?=?0;
int?x?=?0,?y?=?0;
字符串?strTemp?=?”打印內容”;
公共?作廢?doPrint()?{
試試?{
m _定向?=?頁面格式。人像;
//?設置打印對象,默認紙張。
PrinterJob?prnJob?=?printer job . getprinterjob();
頁面格式?頁面格式?=?prn job . default page();
page format . set orientation(m _ orientation);
m_wPage?=?(int)?(page format . getwidth());
m_hPage?=?(int)?(page format . getheight());
//?根據默認紙張設置將要打印的表單傳遞到打印對象中。
prnJob.setPrintable(這個,?page format);
如果?(!prnJob.printDialog())
返回;
prn job . print();
}?接住?(PrinterException?ex)?{
ex . printstacktrace();
System.err.println("打印錯誤:"?+?ex . tostring());
}
}
/**
?*?初始化打印參數
?*/
公共?作廢?initPrintParameter()?{
}
/**
?*構造打印機要打印的打印內容。
?*/
公共?int?打印(圖形?pg,?頁面格式?頁面格式,?int?頁面索引)
摔投?PrinterException?{
//?初始化打印參數
initPrintParameter();
//?將畫布設置為頁面大小
pg.translate((int)?pageFormat.getImageableX(),?(int)?頁面格式
。getImageableY());
int?wPage?=?0;
int?hPage?=?0;
//?根據打印機頁面設置調整畫布大小。
如果?(pageFormat.getOrientation()?==?頁面格式。人像)?{
wPage?=?(int)?page format . getimageablewidth();
hPage?=?(int)?page format . getimageableheight();
}?不然呢?{
wPage?=?(int)?page format . getimageablewidth();
wPage?+=?wPage?/?2;
hPage?=?(int)?page format . getimageableheight();
pg.setClip(0,?0,?wPage,?h page);
}
wPage?=?wPage?-?2?*?左側空間;
hPage?=?hPage?-?2?*?topSpace
xStart?=?左側空間;
xEnd?=?wPage?-?2;
//?設定畫布的顏色和字體。
int?y?=?topSpace
pg . set font(title font);
pg . set color(color . black);
//?畫壹個標題,居中。
字體?fn?=?pg . get font();
FontMetrics?fm?=?pg . getfont metrics();
y?+=?FM . getascent();
alignText(標題,pg,?y,?xStart,?xEnd,?head align);
y?+=?30;
x?=?leftSpace?+?2;
字體?海德豐?=?新的?字體("宋體",字體。大膽,?14);
pg . set font(header font);
fm?=?pg . getfont metrics();
int?h?=?FM . getascent();
yStart?=?y?-?1;
y?+=?h;
pg . set font(header font);
fm?=?pg . getfont metrics();
int?表頭?=?y;
h?=?FM . get height();
//?計算行高、每頁行數、總行數以及指定頁碼的起始行和結束行。
int?羅?=?Math.max(h,10);
int?tailH?=?羅?+?30;
int?rowPerPage?=?0;
int?leftPix?=?0;
如果?(hasTail)?{
rowPerPage?=?(hPage?-?表頭?-?tailH)?/?rowH
leftPix?=?(hPage?-?表頭?-?tailH)?%?rowH
yEnd?=?hPage?-?leftPix?-?tailH?+?2;
}?不然呢?{
rowPerPage?=?(hPage?-?表頭)?/?rowH
leftPix?=?(hPage?-?表頭)?%?rowH
yEnd?=?hPage?-?leftPix?+?2;
}
pg .拉繩(strTemp,x,?y);
//?繪制表格邊框
pg.drawLine(xStart,yStart?xStart,?yEnd);
pg.drawLine(xStart,yStart?xEnd,?yStart);
pg.drawLine(xEnd,yStart?xEnd,?yEnd);
pg.drawLine(xStart,yEnd?xEnd,?yEnd);
//?打印頁碼
如果?(hasTail)?{
int?頁碼?=?pageIndex?+?1;
字符串?s?=?“沒有”+?頁碼?+?”頁面”;
alignText(s,pg,?yEnd?+?30,?xStart,?xEnd,?tail align);
}
system . GC();
回歸?PAGE _ EXISTS
}
/**
?*?文字排列,y坐標,顯示範圍(起止)?0表示居中顯示,1表示左對齊,2表示右對齊。
?*/
私人?作廢?alignText(字符串?s,?圖形?pg,?int?y,?int?開始,?int?結束,
int?模式)?{
字體?fn?=?pg . get font();
FontMetrics?fm?=?pg . getfont metrics();
int?wString?=?FM . string width(s);
int?x?=?開始;
切換?(模式)?{
案子?0:
如果?((完?-?開始?-?wString)?& gt?0)
x?=?開始?+?(完?-?開始?-?wString)?/?2;
打破;
案子?1:
打破;
案子?2:
如果?((完?-?開始?-?wString)?& gt?0)
x?=?開始?+?(完?-?開始?-?wString);
打破;
}
第2頁,拉繩(s,?x,?y);
}
公共?靜電?作廢?main(String[]?args)?{
JavaPrint?p?=?新的?Java print();
p . do print();
}
我叫雷鋒,請認養~ ~