首先 來看看效果 如下圖
10年的羅平網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整羅平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“羅平網(wǎng)站設(shè)計(jì)”,“羅平網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
代碼如下
PrintTest java
import java awt BasicStroke;
import java awt Color;
import java awt Font;
import java awt Graphics;
import java awt Graphics D;
import java awt print Book;
import java awt print PageFormat;
import java awt print Paper;
import java awt print Printable;
import java awt print PrinterException;
import java awt print PrinterJob;
import java text SimpleDateFormat;
import java util Date;
import snjp model RentDetail;
import snjp parameter RentRecordParameter;
public class PrintTest implements Printable
{
private String roomID;
private Date printDate;
private Integer rentType;
private Float waterFee;
private Float electricityFee;
private Float rent;
private String remark;
private static int RECEIPT_NO = ;
public PrintTest()
{
}
public PrintTest printTest;
public PrintTest(RentRecordParameter prentRecord RentDetail prentDetail)
{
this roomID = prentRecord getRoomId()+ 房間 ;
this printDate = prentRecord getRegisterDate();
this rentType = prentRecord getRentType();
this waterFee = prentDetail getWaterBill();
this electricityFee = prentDetail getElectricityBill();
this rent = prentDetail getRent();
this remark = prentDetail getRemark();
}
/** */
/**
* @param Graphic指明打印的圖形環(huán)境
* @param PageFormat指明打印頁格式(頁面大小以點(diǎn)為計(jì)量單位 點(diǎn)為 英才的 / 英寸為 毫米 A 紙大致為 × 點(diǎn))
* @param pageIndex指明頁號(hào)
**/
public int print(Graphics graphics PageFormat pf int pageIndex)
throws PrinterException
{
//print string
String receiptTitle = 收款收據(jù) ;
String content = 今收到 ;
String feeItem = null;
Float rentTotal = f;
String content = 總計(jì)人民幣(大寫) ;
//收款的內(nèi)容(根據(jù)租賃類型 只有 房租 房租 水費(fèi) 電費(fèi) 兩種值)
switch(this rentType)
{
case :
feeItem = 房租 押金 ;
rentTotal=this rent;
break;
case :
feeItem = 房租 押金 水費(fèi) 電費(fèi) ;
rentTotal=this rent+this electricityFee+this waterFee;
break;
default:
feeItem = 未知收費(fèi)項(xiàng)目 ;
}
//轉(zhuǎn)換成Graphics D
Graphics D graphics D = (Graphics D) graphics;
//設(shè)置打印顏色為黑色
graphics D setColor(Color black);
//打印起點(diǎn)坐標(biāo)x=
double x = pf getImageableX();
double y = pf getImageableY();
System out println( 打印起點(diǎn)坐標(biāo)值是{ +x+ +y+ } );
switch (pageIndex)
{
case :
//設(shè)置打印字體(字體名稱 樣式和點(diǎn)大?。ㄗ煮w名稱可以是物理或者邏輯名稱)
//Java平臺(tái)所定義的五種字體系列 Serif SansSerif Monospaced Dialog 和 DialogInput
Font font = new Font( 新宋體 Font TRUETYPE_FONT );
graphics D setFont(font);//設(shè)置字體
BasicStroke?? basicStroke=new?? BasicStroke( f);
float[] dash = { f };
//設(shè)置打印線的屬性
// 線寬; ; ; 空白的寬度; 虛線的寬度; 偏移量
//??????????????? graphics D setStroke(new BasicStroke( f
//??????????????????????????????? BasicStroke CAP_BUTT BasicStroke JOIN_MITER
//??????????????????????????????? f dash f));
//graphics D setStroke(new BasicStroke( f));
graphics D setStroke(basicStroke);//設(shè)置線寬
float height = font getSize D();//字體高度
System out println( 字體高度是 +height);
//繪制收據(jù)標(biāo)題
graphics D drawString(receiptTitle (float) y + * height);
//繪制收據(jù)編號(hào)
String receiptNo = String valueOf(RECEIPT_NO);
graphics D drawString( No : +GlobalMethod get String(receiptNo ) (float)x* (float) y + * height);
//繪制打印時(shí)間
SimpleDateFormat myDateFormat = new SimpleDateFormat( yyyy年MM月dd日 );
graphics D drawString(myDateFormat format(printDate) (float)x* (float) y + * height);
//繪制收據(jù)標(biāo)題下面的第一條橫線
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
);
//繪制收據(jù)標(biāo)題下面的第二條橫線
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
);
//正文 ——今收到
graphics D drawString(content (float) x* (float) y + * height);
//收費(fèi)項(xiàng)目名稱
graphics D drawString(this roomID+feeItem (float) x* (float) y + * height);
//繪制正文 下劃線
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
);
//人民幣(大寫)
graphics D drawString(content +Money NumToRMBStr(rentTotal) (float) x* (float) y + * height);
//繪制人民幣(大寫)下劃線
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
);
//(小寫)
graphics D drawString( (小寫) +rentTotal+ 元 (float) x* (float) y + * height);
//繪制(小寫)下劃線
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
);
//附注
graphics D drawString( 附注: +this remark (float) x* (float) y + * height);
//繪制附注下劃線
graphics D drawLine(
(int)x* +
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
);
// 簽字(收款人)
graphics D drawString( 簽字(收款人) (float) x* + (float) y + * height);
//簽字(收款人)下劃線
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
);
return PAGE_EXISTS;
default:
RECEIPT_NO=RECEIPT_NO ;
return NO_SUCH_PAGE;
}
}
//方法調(diào)用
public? void printReceipt(PrintTest printTest){
//通俗理解就是書 文檔
Book book = new Book();
//設(shè)置成豎打
PageFormat pf = new PageFormat();
pf setOrientation(PageFormat PORTRAIT);
//通過Paper設(shè)置頁面的空白邊距和可打印區(qū)域 必須與實(shí)際打印紙張大小相符
Paper p = new Paper();
p setSize( );//紙張大小
p setImageableArea( );//A ( X )設(shè)置打印區(qū)域 其實(shí) 應(yīng)該是 因?yàn)锳 紙的默認(rèn)X Y邊距是
pf setPaper(p);
//把 PageFormat 和 Printable 添加到書中 組成一個(gè)頁面
book append(printTest pf);
//獲取打印服務(wù)對(duì)象
PrinterJob job = PrinterJob getPrinterJob();
//設(shè)置打印類
job setPageable(book);
try
{
//可以用printDialog顯示打印對(duì)話框 在用戶確認(rèn)后打印 也可以直接打印
//??????????? boolean isShowing=job printDialog();
//??????????? if(isShowing)
//??????????? {
//????????????? System out println(this printDate+ ************* );
RECEIPT_NO=RECEIPT_NO+ ;
job print();
//??????????? }
}
catch (PrinterException e)
{
e printStackTrace();
}
}
public static void main(String[] args)
{
//??? 通俗理解就是書 文檔
Book book = new Book();
//??? 設(shè)置成豎打
PageFormat pf = new PageFormat();
pf setOrientation(PageFormat PORTRAIT);
//??? 通過Paper設(shè)置頁面的空白邊距和可打印區(qū)域 必須與實(shí)際打印紙張大小相符
Paper p = new Paper();
p setSize( );//紙張大小
p setImageableArea( );//A ( X )設(shè)置打印區(qū)域 其實(shí) 應(yīng)該是 因?yàn)锳 紙的默認(rèn)X Y邊距是
pf setPaper(p);
//??? 把 PageFormat 和 Printable 添加到書中 組成一個(gè)頁面
book append(new PrintTest() pf);
//獲取打印服務(wù)對(duì)象
PrinterJob job = PrinterJob getPrinterJob();
// 設(shè)置打印類
job setPageable(book);
try
{
//可以用printDialog顯示打印對(duì)話框 在用戶確認(rèn)后打印 也可以直接打印
//boolean a=job printDialog();
//if(a)
//{
job print();
//}
}
catch (PrinterException e)
{
e printStackTrace();
}
}
lishixinzhi/Article/program/Java/hx/201311/25778
一: 首先理清業(yè)務(wù)邏輯
兩個(gè)窗口, 第一個(gè)主窗口, 是用于填寫信息的, 點(diǎn)擊按鈕后,跳轉(zhuǎn)到第二個(gè)窗口,.
第二個(gè)對(duì)話框窗口 ,用于顯示需要打印的信息, 以及打印到文檔
二: 確定需要的技術(shù), java圖像界面主要使用awt和swing
swing里面的控件比較豐富, 且功能強(qiáng)大 .
三: 效果圖片
四: 完整的參考代碼
import?java.awt.*;
import?java.awt.event.*;
import?java.io.*;
import?javax.swing.*;
//定義一個(gè)主窗口類
public?class?MainFrame?extends?JFrame?{
public?static?final?String?FILE_PATH?=?"c:\\print.txt";//常量,用于指定信息的保存路徑
//定義主要的組件
private?final?JTextField?jtf1,jtf2,jtf3;
private?final?JCheckBox?jcb1,jcb2,jcb3;
private?final?JRadioButton?jrb1,jrb2;
public?MainFrame()?{
setTitle("信息提交窗口");//設(shè)置窗口標(biāo)題
setSize(350,?320);//設(shè)置窗口大小
setLocationRelativeTo(null);//讓窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//當(dāng)主窗口關(guān)閉的時(shí)候退出jvm虛擬機(jī)
JPanel?jp?=?new?JPanel(new?GridLayout(5,?1,?2,?1));//定義主顯示面板,布局為表格布局5行1列,水平間距2,垂直間距1
JPanel?jp1?=?new?JPanel();//第一行的組件面板
JLabel?jl1?=?new?JLabel("姓名");
jtf1?=?new?JTextField(10);
jp1.add(jl1);
jp1.add(jtf1);
JPanel?jp2?=?new?JPanel();//第二行的組件面板
JLabel?jl2?=?new?JLabel("學(xué)號(hào)");
jtf2?=?new?JTextField(10);
jp2.add(jl2);
jp2.add(jtf2);
JPanel?jp3?=?new?JPanel();//第三行的組件面板
JLabel?jl3?=?new?JLabel("性別");
jrb1?=?new?JRadioButton("男");
jrb2?=?new?JRadioButton("女");
jrb1.setSelected(true);
ButtonGroup?bgs?=?new?ButtonGroup();
bgs.add(jrb1);
bgs.add(jrb2);
jp3.add(jl3);
jp3.add(jrb1);
jp3.add(jrb2);
JPanel?jp4?=?new?JPanel();//第四行的組件面板
JLabel?jl4?=?new?JLabel("選擇愛好");
jcb1?=?new?JCheckBox("游泳");
jcb2?=?new?JCheckBox("籃球");
jcb3?=?new?JCheckBox("跑步");
jp4.add(jl4);
jp4.add(jcb1);
jp4.add(jcb2);
jp4.add(jcb3);
JPanel?jp5?=?new?JPanel();//第五行的組件面板
JLabel?jl5?=?new?JLabel("自我介紹");
jtf3?=?new?JTextField(22);
jp5.add(jl5);
jp5.add(jtf3);
//添加到主顯示面板
jp.add(jp1);
jp.add(jp2);
jp.add(jp3);
jp.add(jp4);
jp.add(jp5);
jp.setBorder(BorderFactory.createTitledBorder("填寫資料"));//設(shè)置主顯示面板的邊框
JButton?jb?=?new?JButton("跳轉(zhuǎn)到打印頁");
jb.addActionListener(new?ActionListener()?{//按鈕事件
public?void?actionPerformed(ActionEvent?e)?{//獲取組件的信息
StringBuilder?sb?=?new?StringBuilder();//用于連接信息
String?name?=?jtf1.getText();
sb.append("姓名:"?+?name?+?"\r\n");
String?num?=?jtf2.getText();
sb.append("學(xué)號(hào):"?+?num?+?"\r\n");
String?sex;
if?(jrb1.isSelected())?{
sex?=?"男";
}?else?{
sex?=?"女";
}
sb.append("性別:"?+?sex?+?"\r\n");
String?aihao?=?"";
if?(jcb1.isSelected())?{
aihao?+=?jcb1.getText();
}
if?(jcb2.isSelected())?{
aihao?+=?"?"?+?jcb2.getText();
}
if?(jcb3.isSelected())?{
aihao?+=?"?"?+?jcb3.getText();
}
sb.append("愛好:"?+?aihao?+?"\r\n");
String?jieshao?=?jtf3.getText();
sb.append("自我介紹:"?+?jieshao?+?"\r\n");
new?PrintDailog(sb.toString(),?FILE_PATH).setVisible(true);//打開打印頁面,并設(shè)置為可見
}
});
getContentPane().add(new?JLabel("信息填寫",JLabel.CENTER),BorderLayout.NORTH);
getContentPane().add(jp);
getContentPane().add(jb,?BorderLayout.SOUTH);
}
public?static?void?main(String[]?args)?{
new?MainFrame().setVisible(true);
}
}
//定義一個(gè)對(duì)話框窗口類
class?PrintDailog?extends?JDialog?{
String?info;//用于接受信息
String?filePath;//文檔的路徑
private?final?JLabel?jl2;
public?PrintDailog(String?info,?final?String?filePath)?{
this.info?=?info;
this.filePath?=?filePath;
setModal(true);//模態(tài)為真,如果不關(guān)閉這個(gè)對(duì)話框,那么無法點(diǎn)擊其他窗口
setTitle("信息打印頁");//設(shè)置打印窗口的標(biāo)題
setSize(300,?320);//設(shè)置打印窗口的大小
setLocationRelativeTo(null);//設(shè)置打印窗口居中
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);//當(dāng)點(diǎn)擊關(guān)閉按鈕時(shí),該窗口銷毀
JLabel?jl1?=?new?JLabel("信息打印顯示",?JLabel.CENTER);
JTextArea?jta?=?new?JTextArea(info);
jta.setEditable(false);//不可編輯
jta.setLineWrap(true);//自動(dòng)換行
JScrollPane?jsp?=?new?JScrollPane(jta);
jsp.setBorder(BorderFactory.createTitledBorder("信息"));
JButton?jb1?=?new?JButton("打印");
JPanel?jp?=?new?JPanel(new?GridLayout(2,?1));
JPanel?jp1?=?new?JPanel();
jp1.add(jb1);
JPanel?jp2?=?new?JPanel();
jl2?=?new?JLabel();
jp2.add(jl2);
jp.add(jp1);
jp.add(jp2);
add(jl1,?BorderLayout.NORTH);
add(jsp);
add(jp,?BorderLayout.SOUTH);
jb1.addActionListener(new?ActionListener()?{//點(diǎn)擊打印的按鈕的事件
public?void?actionPerformed(ActionEvent?e)?{
saveToFile();//信息打印到了文檔
jl2.setText("信息已經(jīng)打印到"?+?filePath);//顯示出來
jl2.setForeground(Color.RED);//為了醒目設(shè)置顏色為紅色
}
});
}
private?void?saveToFile()?{//該方法用于保存信息到文檔
try?{
BufferedWriter?bw?=?new?BufferedWriter(new?OutputStreamWriter(new?FileOutputStream(filePath),?"UTF-8"));
bw.write(info);
bw.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
}
五: 拓展
java 制作圖像界面比較簡單, ?只需要熟練的掌握三大布局(流布局 表格布局 邊界布局)和常用組件 ?, 就能制作出比較復(fù)雜的界面 . ?所以理清業(yè)務(wù)邏輯, ?才是重點(diǎn)
用java實(shí)現(xiàn)本地打印:java.awt中提供了一些打印的API,要實(shí)現(xiàn)打印,首先要獲得打印對(duì)象,然后繼承Printable實(shí)現(xiàn)接口方法print,以便打印機(jī)進(jìn)行打印,最后用用Graphics2D直接輸出直接輸出。下面代碼實(shí)現(xiàn)了簡單的打印功能:
如一樓所說,你的jsp源文件的java代碼是在服務(wù)器上執(zhí)行的,客戶端接收到的只有html
用JavaScript打印吧
input
id="btnPrint"
type="button"
value="打印"
onclick="javascript:window.print();"
/
可以用樣式控制,你想讓那塊打印就打印啊,樣式如下:
style
type="text/css"
media=print
.noprint{display
:
none
}
/style
然后使用樣式就可以:
p
class="noprint"不需要打印的地方/p