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. codevs 1107 等价表达式

    传送门 题解:第一眼这题好像非常难得样子,简直没有思路.但是这可以用栈带入特殊值来解决.这里用到两个栈,一个是存贮数字,另一个存贮运算符,按优先级进行运算.当读入的运算符比运算符栈的栈顶元素优先级低时 ...

  2. 自然语言处理(1)之NLTK与PYTHON

    自然语言处理(1)之NLTK与PYTHON 题记: 由于现在的项目是搜索引擎,所以不由的对自然语言处理产生了好奇,再加上一直以来都想学Python,只是没有机会与时间.碰巧这几天在亚马逊上找书时发现了 ...

  3. .NET调用osql.exe执行sql脚本创建表和存储过程

    using System;using System.Diagnostics;using System.Windows.Forms; namespace WindowsFormsApplication1 ...

  4. Mobie 有用的几个css js代码

    1. 防止页面缩放 <meta name="viewport" content="width=device-width, initial-scale=1, maxi ...

  5. ARP劫持攻击

    今天下午,莫名其妙的产生. 部分客户的网站产生乱码,但本机访问或是好好的. 外网访问,乱码的原文件是一个<IFRAME>网页. 听说,有时ARP攻击是导致网络中断或时断时续. 安全狗和36 ...

  6. HBase Java API使用(一)

    前言 1. 创建表:(由master完成) 首先需要获取master地址(master启动时会将地址告诉zookeeper)因而客户端首先会访问zookeeper获取master的地址 client和 ...

  7. C# 我是个传奇的 using

    呵呵呵: ----------------------------------------------------------------------------------------------- ...

  8. 【高级算法】模拟退火算法解决3SAT问题(C++实现)

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46453761 ---------------------------------- ...

  9. Spine(2D骨骼动画)

    点击进入Spine官网 Spine 是一款针对游戏的 2D 骨骼动画编辑工具. Spine 旨在提供更高效和简洁 的工作流程,以创建游戏所需的动画. 功能: 1.摄影表 Dopesheet 在动画制作 ...

  10. struts开发&lt;struts中的action详细配置. 二&gt;

    在eclipse中新建项目StrutsDemo1[struts的配置见]struts开发<在eclipse中配置struts. 一> 详细文件夹结构例如以下 第一种配置方法 新建UserA ...