JAVA打印类(带预览)
package tool;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.print.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Printclass {
//595×842
static String dh; //单号
static String lxr; //联系人
static String tel;
static String date;
static String khm; //客户名
static String add; //地址
static String js="现金"; //结算方式
static List<Object> kh=new ArrayList<Object>(); //客户信息list
static List<Object> sp=new ArrayList<Object>(); //主体list
static List<Object> hj=new ArrayList<Object>(); //尾部List
public static void setkhls(List<Object> kh){
Printclass.kh=kh;
dh=kh.get(0).toString().trim();
khm=kh.get(1).toString().trim();
lxr=kh.get(2).toString().trim();
tel=kh.get(3).toString().trim();
add=kh.get(4).toString().trim();
Date d=new Date();
date=String.format("%tF",d);
}
public static void setsp(List<Object> sp){
Printclass.sp=sp;
}
public static void sethj(List<Object> hj){
Printclass.hj=hj;
}
public Printclass(){
JFrame jf=new JFrame();
jf.setSize(595,842);
Container c=jf.getContentPane();
c.add(new Draw());
jf.addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_P){
try {
PrinterJob job = PrinterJob.getPrinterJob();
if (!job.printDialog()){
return;
}else{
job.setPrintable(new Printable() {
public int print(Graphics graphics, PageFormat pageFormat,
int pageIndex) throws PrinterException {
if (pageIndex > 0){
return Printable.NO_SUCH_PAGE;
}else{
Graphics2D g2 = (Graphics2D) graphics;
Font font,font2,font3;
font=new Font("黑体",Font.PLAIN,20);
g2.setFont(font);
g2.setFont(font);
g2.drawString("*",190,35);//title
font2=new Font("宋体",Font.PLAIN,10);
g2.setFont(font2);
g2.drawString("地址: 电话: Fax: ",100,50);
font3=new Font("宋体",Font.PLAIN,10);
g2.setFont(font3);
g2.drawString("单号:",20,65);g2.drawString("日期:",240,65);g2.drawString("结算:",420,65);
g2.drawString("客户:",20,85);g2.drawString("联系人:",240,85);g2.drawString("联系电话:",420,85);
g2.drawString("地址:",20,105);
g2.drawString(dh,50,65);g2.drawString(date,270,65);g2.drawString(js,445,65);
g2.drawString(khm,50,85);g2.drawString(lxr,280,85);g2.drawString(tel,470,85);
g2.drawString(add,50,105);
List<String> ls=new ArrayList<String>();
ls.add("序号");ls.add("商品种类");ls.add("商品名称");ls.add("单位");ls.add("折扣");ls.add("单价");ls.add("数量");ls.add("金额");ls.add("备注");
int n[]=new int[]{0,2,4,10,3,3,4,3,4,4};
int s=0;
int x=20;
int y=115;
int row=0;
int count=0;
List<Object> lsx=new ArrayList<Object>();
lsx=sp;
System.out.println(lsx.size());
for(int i=0;i<lsx.size()/9+3;i++){ //画横线
y=115+row*18;
if(i==1){
for(int j=0;j<ls.size();j++){
s=n[j]*14;
x=x+s;
g2.drawString(ls.get(j),x+3,y-4); //写入表头数据
}
}
s=0;
x=20;
if(i>1&&i<lsx.size()/9+2){
for(int j=0;j<9;j++){
s=n[j]*14;
x=x+s;
System.out.println(j+" "+x);
g2.drawString(lsx.get(j+count*9).toString().trim(),x+3,y-4); // 写入当行数据
}
count++;
}
if(i==lsx.size()/9+2){
g2.drawString(hj.get(0).toString().trim(),51,y-4);
g2.drawString(hj.get(1).toString().trim(),387,y-4);
g2.drawString(hj.get(2).toString().trim(),429,y-4);
}
g2.drawLine(20,y,538,y);//横线
row++;
}
count=0;
row=0;
s=0;
x=20;
for(int i=0;i<ls.size()+1;i++){ //画竖线
s=n[i]*14;
x=x+s;
if(i<2||i>5){
g2.drawLine(x,115,x,y);//竖线
}else{
g2.drawLine(x,115,x,y-18);//竖线
}
if(i==0){
g2.drawString("合计",x+3,y-4);
}
}
System.out.println(y);
g2.drawString("开单人: 经手人: 收货人:",20,y+20);
g2.drawString("白色:存根联 红色:记账联 蓝色:收款联 黄色:收货联",20,y+40);
return Printable.PAGE_EXISTS;
}
}
});
}
job.setJobName("打印图形");
job.print();
} catch (PrinterException e1) {
e1.printStackTrace();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
});
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
public static void main(String[] args) {
new Printclass();
}
class Draw extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g){
super.paint(g);
Font font,font2,font3;
font=new Font("黑体",Font.PLAIN,20);
Graphics2D g2=(Graphics2D) g;
g2.setFont(font);
g2.drawString("*",170,35);//标题
font2=new Font("宋体",Font.PLAIN,10);
g2.setFont(font2);
g2.drawString("地址: 电话: Fax:",100,50);
font3=new Font("宋体",Font.PLAIN,10);
g2.setFont(font3);
g2.drawString("单号:",20,65);g2.drawString("日期:",240,65);g2.drawString("结算:",420,65);
g2.drawString("客户:",20,85);g2.drawString("联系人:",240,85);g2.drawString("联系电话:",420,85);
g2.drawString("地址:",20,105);
g2.drawString(dh,50,65);g2.drawString(date,270,65);g2.drawString(js,445,65);
g2.drawString(khm,50,85);g2.drawString(lxr,280,85);g2.drawString(tel,470,85);
g2.drawString(add,50,105);
List<String> ls=new ArrayList<String>();
ls.add("序号");ls.add("商品种类");ls.add("商品名称");ls.add("单位");ls.add("折扣");ls.add("单价");ls.add("数量");ls.add("金额");ls.add("备注");
int n[]=new int[]{0,2,4,10,3,3,4,3,4,4};
int s=0;
int x=20;
int y=115;
int row=0;
int count=0;
List<Object> lsx=new ArrayList<Object>();
lsx=sp;
System.out.println(lsx.size());
for(int i=0;i<lsx.size()/9+3;i++){ //画横线
y=115+row*18;
if(i==1){
for(int j=0;j<ls.size();j++){
s=n[j]*14;
x=x+s;
g2.drawString(ls.get(j),x+3,y-4); //写入表头数据
}
}
s=0;
x=20;
if(i>1&&i<lsx.size()/9+2){
for(int j=0;j<9;j++){
s=n[j]*14;
x=x+s;
System.out.println(j+" "+x);
g2.drawString(lsx.get(j+count*9).toString().trim(),x+3,y-4); // 写入当行数据
}
count++;
}
if(i==lsx.size()/9+2){
g2.drawString(hj.get(0).toString().trim(),51,y-4);
g2.drawString(hj.get(1).toString().trim(),387,y-4);
g2.drawString(hj.get(2).toString().trim(),429,y-4);
}
g2.drawLine(20,y,538,y);//横线
row++;
}
count=0;
row=0;
s=0;
x=20;
for(int i=0;i<ls.size()+1;i++){ //画竖线
s=n[i]*14;
x=x+s;
if(i<2||i>5){
g2.drawLine(x,115,x,y);//竖线
}else{
g2.drawLine(x,115,x,y-18);//竖线
}
if(i==0){
g2.drawString("合计",x+3,y-4);
}
}
System.out.println(y);
g2.drawString("开单人: 经手人: 收货人:",20,y+20);
g2.drawString("白色:存根联 红色:记账联 蓝色:收款联 黄色:收货联",20,y+40);
}
}
}
之前一个项目的打印模块,带预览。
预览界面没有设置打印按钮,切换到英文输入法按P键开始打印。
激光打印机打印清晰;针式打印机有轻微错位,有漏色的现象,整体效果还是能看懂。(如果有朋友有解决办法请私聊!!!!!)
整体构思:
数据由主类生成,传递数组,判断是否打印,清空主类数组。
为什么不用JTable打印:
虽然JTable使用合并单元格也能做出来,而且更快速。(忘记是哪个版本了,JTable 可以直接调用print())
但是JTable打印有边框,而且边框比较粗(有解决办法请私聊!!!!!!)
另外需要重新建数据模型,而用print画出来的我可以直接调用写入之前数据库的数组模型。
其实主要的还是画出来的感觉要自由好多,想怎么画就怎么画。
JAVA打印类(带预览)的更多相关文章
- Java实现web在线预览office文档与pdf文档实例
https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...
- 可拖拽和带预览图的jQuery文件上传插件ssi-uploader
插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...
- Lodop中特殊符号¥打印设计和预览不同
Lodop中¥符号样式改变问题 Lodop中对超文本样式的解析,虽然说是按照调用的本机ie引擎,但是调用的ie版本可能不同,导致在ie下是一种样式,预览又是另一种样式.可能是有些样式没有具体设置,走的 ...
- java通过url在线预览Word、excel、ppt、pdf、txt文档
java通过url在线预览Word.excel.ppt.pdf.txt文档中的内容[只获得其中的文字] 在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputS ...
- FileUpload控件实现单按钮图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调 ...
- Asp.net实现同页面内多图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: 此方法适合针对有后台生成的图片相关内容,例如购物网站商品展示页面中的封面图片,图片的数量由后台访问数据库,并加载到页面.这种 ...
- java实现office文件预览
不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能. 相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事.大家请 ...
- FlexPaper+SWFTool+操作类=在线预览PDF
引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...
- JS Web打印,实现预览新样式
问题描述: JS实现Web打印,要求打印前一种样式,打印预览时新样式 问题解决: (1)设置打印时的css样式,设置打印前的css样式 注: 以上为print. ...
随机推荐
- 破解简单Mifare射频卡密钥杂记
先要了解一点大学城浴卡用的是什么卡,经查证是Mifare S50卡,也有叫ISO14443A的(协议名).本来想看看大学城浴卡有没有安全漏洞,没想到浴卡公司在安全性上几乎是蔑视我们大学生的智商,虽然被 ...
- Spark RDD Union
示例 Spark多个RDD(数据格式相同)“组合”为一个RDD 代码 from pyspark import SparkConf, SparkContext conf = SparkCon ...
- Google Java 风格 阅读随笔
官方文档:Google Java Style 中文翻译版:Google Java编程风格指南, Hawstein's Blog 可以先看官方文档,遇到不确定有疑问的,可以再对照翻译版本阅读,加深理解. ...
- 最受欢迎linux命令
1. 以 root 帐户执行上一条命令 sudo !! 2. 利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000访问 python -m ...
- Java 8 中新的 Date 和 Time 类入门详解
这篇文章主要是java8中新的Date和Time API的实战.新的Date和Time类是java开发者社区千呼万唤始出来的.Java8 之前存在的Date类一直都受人诟病,很多人都会选择使用第三方的 ...
- @RestController
/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Vers ...
- C++编写ATM(1)
// ATM的初始.cpp : 定义控制台应用程序的入口点. // /************************************************* 运行环境: VS2008 作者 ...
- nc命令
监视指定网络接口的数据包 nc -l -u 1001 像指定端口使用指定协议发送数据包 nc -l -u 192 168.10.11 1001
- Java笔记6之三目运算符
/* 单目运算符:~3 双目运算符:3 + 4 三目运算符: 格式:比较表达式?表达式1:表达式2; 比较表达式:结果是一个boolean ...
- css文本超出2行就隐藏并显示省略号
之前在网上看到过这样的代码,感觉有的时候还是挺有用的,故留个笔记. display:-webkit-box; //将对象作为弹性伸缩盒子模型显示. -webkit-box-orient:vertica ...