首先 来看看效果 如下图
10年的罗平网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整罗平建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“罗平网站设计”,“罗平网站推广”以来,每个客户项目都认真落实执行。
代码如下
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指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位 点为 英才的 / 英寸为 毫米 A 纸大致为 × 点)
* @param pageIndex指明页号
**/
public int print(Graphics graphics PageFormat pf int pageIndex)
throws PrinterException
{
//print string
String receiptTitle = 收款收据 ;
String content = 今收到 ;
String feeItem = null;
Float rentTotal = f;
String content = 总计人民币(大写) ;
//收款的内容(根据租赁类型 只有 房租 房租 水费 电费 两种值)
switch(this rentType)
{
case :
feeItem = 房租 押金 ;
rentTotal=this rent;
break;
case :
feeItem = 房租 押金 水费 电费 ;
rentTotal=this rent+this electricityFee+this waterFee;
break;
default:
feeItem = 未知收费项目 ;
}
//转换成Graphics D
Graphics D graphics D = (Graphics D) graphics;
//设置打印颜色为黑色
graphics D setColor(Color black);
//打印起点坐标x=
double x = pf getImageableX();
double y = pf getImageableY();
System out println( 打印起点坐标值是{ +x+ +y+ } );
switch (pageIndex)
{
case :
//设置打印字体(字体名称 样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列 Serif SansSerif Monospaced Dialog 和 DialogInput
Font font = new Font( 新宋体 Font TRUETYPE_FONT );
graphics D setFont(font);//设置字体
BasicStroke basicStroke=new BasicStroke( f);
float[] dash = { f };
//设置打印线的属性
// 线宽; ; ; 空白的宽度; 虚线的宽度; 偏移量
// 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);//设置线宽
float height = font getSize D();//字体高度
System out println( 字体高度是 +height);
//绘制收据标题
graphics D drawString(receiptTitle (float) y + * height);
//绘制收据编号
String receiptNo = String valueOf(RECEIPT_NO);
graphics D drawString( No : +GlobalMethod get String(receiptNo ) (float)x* (float) y + * height);
//绘制打印时间
SimpleDateFormat myDateFormat = new SimpleDateFormat( yyyy年MM月dd日 );
graphics D drawString(myDateFormat format(printDate) (float)x* (float) y + * height);
//绘制收据标题下面的第一条横线
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
);
//绘制收据标题下面的第二条横线
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
);
//正文 ——今收到
graphics D drawString(content (float) x* (float) y + * height);
//收费项目名称
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;
}
}
//方法调用
public void printReceipt(PrintTest printTest){
//通俗理解就是书 文档
Book book = new Book();
//设置成竖打
PageFormat pf = new PageFormat();
pf setOrientation(PageFormat PORTRAIT);
//通过Paper设置页面的空白边距和可打印区域 必须与实际打印纸张大小相符
Paper p = new Paper();
p setSize( );//纸张大小
p setImageableArea( );//A ( X )设置打印区域 其实 应该是 因为A 纸的默认X Y边距是
pf setPaper(p);
//把 PageFormat 和 Printable 添加到书中 组成一个页面
book append(printTest pf);
//获取打印服务对象
PrinterJob job = PrinterJob getPrinterJob();
//设置打印类
job setPageable(book);
try
{
//可以用printDialog显示打印对话框 在用户确认后打印 也可以直接打印
// 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();
// 设置成竖打
PageFormat pf = new PageFormat();
pf setOrientation(PageFormat PORTRAIT);
// 通过Paper设置页面的空白边距和可打印区域 必须与实际打印纸张大小相符
Paper p = new Paper();
p setSize( );//纸张大小
p setImageableArea( );//A ( X )设置打印区域 其实 应该是 因为A 纸的默认X Y边距是
pf setPaper(p);
// 把 PageFormat 和 Printable 添加到书中 组成一个页面
book append(new PrintTest() pf);
//获取打印服务对象
PrinterJob job = PrinterJob getPrinterJob();
// 设置打印类
job setPageable(book);
try
{
//可以用printDialog显示打印对话框 在用户确认后打印 也可以直接打印
//boolean a=job printDialog();
//if(a)
//{
job print();
//}
}
catch (PrinterException e)
{
e printStackTrace();
}
}
lishixinzhi/Article/program/Java/hx/201311/25778
一: 首先理清业务逻辑
两个窗口, 第一个主窗口, 是用于填写信息的, 点击按钮后,跳转到第二个窗口,.
第二个对话框窗口 ,用于显示需要打印的信息, 以及打印到文档
二: 确定需要的技术, java图像界面主要使用awt和swing
swing里面的控件比较丰富, 且功能强大 .
三: 效果图片
四: 完整的参考代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
//定义一个主窗口类
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("信息提交窗口");//设置窗口标题
setSize(350, 320);//设置窗口大小
setLocationRelativeTo(null);//让窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//当主窗口关闭的时候退出jvm虚拟机
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("学号");
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("填写资料"));//设置主显示面板的边框
JButton jb = new JButton("跳转到打印页");
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("学号:" + 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);//打开打印页面,并设置为可见
}
});
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);
}
}
//定义一个对话框窗口类
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);//模态为真,如果不关闭这个对话框,那么无法点击其他窗口
setTitle("信息打印页");//设置打印窗口的标题
setSize(300, 320);//设置打印窗口的大小
setLocationRelativeTo(null);//设置打印窗口居中
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);//当点击关闭按钮时,该窗口销毁
JLabel jl1 = new JLabel("信息打印显示", JLabel.CENTER);
JTextArea jta = new JTextArea(info);
jta.setEditable(false);//不可编辑
jta.setLineWrap(true);//自动换行
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() {//点击打印的按钮的事件
public void actionPerformed(ActionEvent e) {
saveToFile();//信息打印到了文档
jl2.setText("信息已经打印到" + filePath);//显示出来
jl2.setForeground(Color.RED);//为了醒目设置颜色为红色
}
});
}
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 制作图像界面比较简单, 只需要熟练的掌握三大布局(流布局 表格布局 边界布局)和常用组件 , 就能制作出比较复杂的界面 . 所以理清业务逻辑, 才是重点
用java实现本地打印:java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。下面代码实现了简单的打印功能:
如一楼所说,你的jsp源文件的java代码是在服务器上执行的,客户端接收到的只有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
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款