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打印类(带预览)的更多相关文章

  1. Java实现web在线预览office文档与pdf文档实例

    https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...

  2. 可拖拽和带预览图的jQuery文件上传插件ssi-uploader

    插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...

  3. Lodop中特殊符号¥打印设计和预览不同

    Lodop中¥符号样式改变问题 Lodop中对超文本样式的解析,虽然说是按照调用的本机ie引擎,但是调用的ie版本可能不同,导致在ie下是一种样式,预览又是另一种样式.可能是有些样式没有具体设置,走的 ...

  4. java通过url在线预览Word、excel、ppt、pdf、txt文档

    java通过url在线预览Word.excel.ppt.pdf.txt文档中的内容[只获得其中的文字] 在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputS ...

  5. FileUpload控件实现单按钮图片自动上传并带预览显示

    FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理:   FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调 ...

  6. Asp.net实现同页面内多图片自动上传并带预览显示

    FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: 此方法适合针对有后台生成的图片相关内容,例如购物网站商品展示页面中的封面图片,图片的数量由后台访问数据库,并加载到页面.这种 ...

  7. java实现office文件预览

    不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能. 相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事.大家请 ...

  8. FlexPaper+SWFTool+操作类=在线预览PDF

    引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...

  9. JS Web打印,实现预览新样式

    问题描述:     JS实现Web打印,要求打印前一种样式,打印预览时新样式 问题解决:         (1)设置打印时的css样式,设置打印前的css样式 注:         以上为print. ...

随机推荐

  1. Windows Live Write 日志客户端

    下载地址 下载地址:http://wl.dlservice.microsoft.com/download/E/4/9/E494934D-C33E-486A-AB1A-82248C800922/zh-c ...

  2. iOS常见内存泄漏解决

    iOS常见内存泄漏解决     1 OC和CF转化出现的内存警告 CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(kCFA ...

  3. MFC枚举USB设备碰到的一个疑难,还没解决

    代码如下: 打开USB Hub设备之后,返回句柄hHubDevice,然后使用EnumerateHubPorts来枚举Hub的端 口.疑问在代码的中文注释中. bool CUsbEnumHub::En ...

  4. 【技术贴】xp下改变7zip默认关联图标和美化教程

    今天发现7z被还原成了复古样式,就是那种win2000的图标,感觉果然是技术人员做的美工. 于是开始想办法替换掉,自己找到了一个最简单的办法 首先,默认用7z打开 1.随便找到一个7z后缀,然后右键, ...

  5. Jest

    http://www.ibm.com/developerworks/cn/java/j-javadev2-24/

  6. C#程序设计基础——转义字符

    \’ 单引号 \” 双引号 \\ 反斜杠 \0 空字符 \a 感叹号 \b 退格 \f 换页 \n 换行 \r 回车 \t 水平Tab \v 垂直Tab

  7. POJ3083 Children of the Candy Corn(搜索)

    题目链接. 题意: 先沿着左边的墙从 S 一直走,求到达 E 的步数. 再沿着右边的墙从 S 一直走,求到达 E 的步数. 最后求最短路. 分析: 最短路好办,关键是沿着墙走不太好想. 但只要弄懂如何 ...

  8. Pascal's Triangle II —LeetCode

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  9. WKWebview点击图片查看大图

    大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...

  10. in, out, ref

    C#中的函数传递方式可以为in.out.ref(引用) in方式的是默认的传递方式,即向函数内部传送值,不作讲解 很多语言都有类似的操作从函数向调用者返回值,这样我们可以通过函数的调用返回多个值,因为 ...