java表格打印的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else*/
if(k==0)
g2.drawString(tm.getValueAt(j,k).toString(),(float)x+31,(float)y+60+16*(j%30+1));
else
g2.drawString(tm.getValueAt(j,k).toString(),(float)x+31+(int)getlocal(k),(float)y+60+16*(j%30+1));
}
}
}
//超过30行
else
{
//画边框
//画横边
for(int n=0;n<=(30+1);n++)
{
g2.drawLine((int)x+30,(int)y+50+n*16,(int)x+780+30,(int)y+50+n*16);
}
//画竖边
g2.drawLine((int)x+30,(int)y+50,(int)x+30,(int)y+16*(30+4));
Font font = new Font("新宋体", Font.PLAIN, 15);
g2.setFont(font);//设置字体
//BasicStroke bs_3=new BasicStroke(0.5f);
//float[] dash1 = {2.0f}; //虚线参数
//设置打印线的属性。
g2.drawString(new java.text.DecimalFormat("#.00").format(tm.getValueAt(j,k).toString(),(float)x+31+k*column_width,(float)y+60+16*(j%30+1));
else*/
if(k==0)
for(int ll=1;ll<=l;ll++)
{
ww=ww+base_with*col_with[ll-1];
}
return ww;
}
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException
//------------------------打印类
class Print_V1 implements Printable
{
//@param Graphic指明打印的图形环境
//@param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点)
for(int i=1;i<column;i++)
{
g2.drawString(tm.getColumnName(i),(float)x+31+(int)getlocal(i),(float)y+60);
}
//重设字体
Font font2 = new Font("新宋体", Font.PLAIN, pound);
}
//画表头
g2.drawString(tm.getColumnName(0),(float)x+31,(float)y+60);
for(int i=1;i<column;i++)
{
g2.drawString(tm.getColumnName(i),(float)x+31+(int)getlocal(i),(float)y+60);
}
}
//统计总列宽
for(int w=0;w<column;w++)
{
byte_count=byte_count+col_with[w];
}
//计算每字节占的点数
base_with=(double)780/byte_count;
if(pageIndex>=getPagesCount(tm))
returnNO_SUCH_PAGE;
{
byte_count=0;
int row=tm.getRowCount();//数据总行数
int column=tm.getColumnCount();//总列数
col_with=new int[column];
//初始化列宽
for(int w=0;w<column;w++)
{
col_with[w]=tm.getColumnName(w).length();
}
/*public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException
{
System.out.println("pageIndex="+pageIndex);
Component c = null;
//print string
//转换成Graphics2D
Graphics2D g2 = (Graphics2D) gra;
//设置打印颜色为黑色
g2.setColor(Color.black);
//打印起点坐标
double x = pf.getImageableX();
double y = pf.getImageableY();
}
}
}
return PAGE_EXISTS;
}
}
public int getPagesCount(TableModel tm)
{
int page=tm.getRowCount()%30==0?tm.getRowCount()/30:tm.getRowCount()/30+1;
return page;
//@param pageIndex指明页号
String title;//表头
TableModel tm;
int pound;//字体磅数
Printable printable;
double base_with=0;
int byte_count=0;
int [] col_with;
Print_V1(String title,TableModel tm,int pound)
{
this.title=title;
this.tm=tm;
this.pound=pound;
}
void getPrintable()
{
printable=new Print_V1(title,tm,pound);
}
//返回当前位置占的点数
double getlocal(int l)
{
double ww=0;
}
//重设字体
Font font2 = new Font("新宋体", Font.PLAIN, pound);
g2.setFont(font2);
//画数据
for(int j=30*pageIndex;j<(30*pageIndex+row%30);j++)
{
for(int k=0;k<column;k++)
//设置字体
Font font = new Font("新宋体", Font.PLAIN, 15);
g2.setFont(font);
//设置实线
g2.setStroke(new BasicStroke(0.5f));
//画标题
g2.drawString(title,(float)x+365,(float)y+40);
g2.setFont(font2);
//画数据
for(int j=30*pageIndex;j<(30*(pageIndex+1));j++)
{
for(int k=0;k<column;k++)
{
/*if(j==row-1 && (tm.getValueAt(j,k) instanceof Double|tm.getValueAt(j,k) instanceof Float))
g2.drawString(tm.getValueAt(j,k).toString(),(float)x+31,(float)y+60+16*(j%30+1));
else
g2.drawString(tm.getValueAt(j,k).toString(),(float)x+31+(int)getlocal(k),(float)y+60+16*(j%30+1));
}
//对比列宽,取该列最大值
for(int r=0;r<row;r++)
{
for(int w=0;w<column;w++)
{
col_with[w]=tm.getValueAt(r,w).toString().trim().length()>col_with[w]?tm.getValueAt(r,w).toString().trim().length():col_with[w];
import javax.swing.table.TableModel;
import java.awt.Font;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.BasicStroke;
//重设字体
Font font1 = new Font("新宋体", Font.PLAIN, 8);
g2.setFont(font1);
//剩下不超过30行时
if((row-30*pageIndex)<=30)
{
//画边框
//画横边
for(int n=0;n<=(row%30+1);n++)
{
g2.drawLine((int)x+30,(int)y+50+n*16,(int)x+780+30,(int)y+50+n*16);
else
{
Graphics2Dቤተ መጻሕፍቲ ባይዱg2 = (Graphics2D) gra;//转换成Graphics2D
g2.setColor(Color.black);//设置打印颜色为黑色
//打印起点坐标
double x = pf.getImageableX();
double y = pf.getImageableY();
System.out.println("X="+x);
System.out.println("Y="+y);
switch(pageIndex)
{
case 0:
//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog和DialogInput
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;
//1.线宽2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量
//g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 0.0f, dash1, 0.0f)); //设置虚线
g2.setStroke(new BasicStroke(0.5f));//设置实线
}
//画竖边
g2.drawLine((int)x+30,(int)y+50,(int)x+30,(int)y+16*(row%30+4));
for(int m=1;m<=column;m++)
{
g2.drawLine((int)x+30+(int)getlocal(m),(int)y+50,(int)x+30+(int)getlocal(m),(int)y+16*(row%30+4));
{
/*if(j==row-1 && (tm.getValueAt(j,k) instanceof Double|tm.getValueAt(j,k) instanceof Float))
g2.drawString(new java.text.DecimalFormat("#.00").format(tm.getValueAt(j,k).toString(),(float)x+31+k*column_width,(float)y+60+16*(j%30+1));
for(int m=1;m<=column;m++)
{
g2.drawLine((int)x+30+(int)getlocal(m),(int)y+50,(int)x+30+(int)getlocal(m),(int)y+16*(30+4));
}
//画表头
g2.drawString(tm.getColumnName(0),(float)x+31,(float)y+60);
相关文档
最新文档