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. cypress的EZ-USB对于USB的介绍

    Host is MasterThis is a fundamental USB concept. There is exactly onemaster in a USB system: the hos ...

  2. 新版的DEV RichEdit很强悍,兼容docx,排版更强

    RV至少rtf格式不用自己搞了 Rv没Dev出的强悍 RV最蛋疼的就是表格 DEV目前看来,表格比RV强其他方面来说,觉得到差不多,无所谓dev的excel我整过一次,BUG不少dxRichEdit换 ...

  3. treap启发式合并

    注意输入v要在建根的前面. #include <cstdio> #include <iostream> #include <algorithm> #include ...

  4. 调用test case集,并生成测试报告

    结构是 test_all.py 进行配置,执行所有测试用例集,并合并测试报告到同一个文件 #test_all.py 进行配置,执行所有测试用例集 # coding = utf-8 from time ...

  5. freemarker 时间格式化注意事项

    ${document.publishDate?string("yyyy-MM-dd")} 取出的是 2015-05-20 ${document.publishDate?string ...

  6. HDOJ(HDU) 2060 Snooker(英语很重要。。。)

    Problem Description background: Philip likes to play the QQ game of Snooker when he wants a relax, t ...

  7. Android新浪微博客户端(七)——ListView中的图片异步加载、缓存

    原文出自:方杰|http://fangjie.info/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到git ...

  8. [Design Pattern] Adapter Pattern 简单案例

    Adapter Pattern, 即适配器模式,用于连接两个不兼容的接口,属于结构类的设计模式. 或者叫做,转换器模式. 下面是一个转换器模式简单案例. 假设已有 AudioPlayer 专门播放 m ...

  9. python:numpy(文件存取)

      NumPy提供了多种存取数组内容的文件操作函数.保存数组数据的文件可以是二进制格式或者文本格式.二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型. 一,tofile()和from ...

  10. Android布局属性详解剖析

    View的布局显示方式有下面几种: 线性布局(LinearLayout) 相对布局(RelativeLayout) 表格布局(TableLayout) 网格视图(GridView) 标签布局(TabL ...