java中的打印( 二 )

< PAGES; i++) [i] = ""; //数组元素初始化为空字符串int k,= 0, lines = 0; while(s.() > 0) { if(lines < 54) //不够一页时 { k = s.('\n'); if (k != -1) //存在回车符 { lines += 1; //行数累加 //计算该页的具体文本内容,存放到相应下标的数组元素 [] = [] + s.(0, k + 1); if (s.(k + 1).() > 0) s = s.(k + 1); } else { lines += 1; //行数累加 //将文本内容存放到相应的数组元素 [] = [] + s;s = ""; } } else //已满一页时 { lines = 0; //行数统计清零 ++; //数组下标加1 } }; }
2、计算需要打印的总页数
int ( ) { int page = 0; int , count = 0;str = ; while(str.() > 0) //文本尚未计算完毕 {= str.('\n'); //计算回车符的位置 count += 1; //统计行数 if ( != -1) str = str.( + 1); //截取尚未计算的文本 else str = ""; //文本已计算完毕 } if (count > 0) page = count / 54 + 1; //以总行数除以54获取总页数page; //返回需打印的总页数 }
3.1、以jdk1.4以前的版本实现打印动作按钮监听,并完成具体的打印操作
void () {= area.().trim(); //获取需要打印的目标文本 if ( != null && .() > 0) //当打印内容不为空时 { PAGES = (); //获取打印总页数= .(); //获取默认打印作业= .(); //获取默认打印页面格式 .(this, ); //设置打印工作 if (.()) //显示打印对话框 { try { .print(); //进行每一页的具体打印操作 } catch( pe) { pe.(); } } } else { //如果打印内容为空时,提示用户打印将取消 . (null, "Sorry,Job is Empty, Print !", "Empty",., .); } }
3.2、以jdk1.4新版本提供的API实现打印动作按钮监听,并完成具体的打印操作
void () {= 0; //打印标志清零= area.().trim();//获取需要打印的目标文本 if ( != null && .() > 0) //当打印内容不为空时 { PAGES = (); //获取打印总页数 //指定打印输出格式= ..; //定位默认的打印服务= .rvice(); //创建打印作业 job = .(); //设置打印属性eSet pras = new ();das = new (); //指定打印内容Doc doc = new (this, , das); //不显示打印对话框,直接进行打印工作 try { job.print(doc, pras); //进行每一页的具体打印操作 } catch( pe) { pe.(); } } else { //如果打印内容为空时,提示用户打印将取消.(null, "Sorry,Job is Empty, Print !", "Empty", ., .); } }
3.2 打印预览
3.2.1应用场景
大多少商业应用都需要提供打印预览机制,它可以让我们在屏幕上看到页面,这样就不会因为不喜欢的打印结果而浪费纸张 。假设我们在打印上一节所说的文本之前,需要先进行打印预览 。那么该怎么实现呢?
界面实现图示如下:(Next预览下一页,预览前一页,Close则关闭预览)
3.2.2解决方法
基本思路:虽然Java2平台的打印API并不提供标准的打印预览对话框,但是自己来进行设计也并不复杂 。正常情况下,print方法将页面环境绘制到一个打印机图形环境上,从而实现打印 。而事实上,print方法并不能真正产生打印页面,它只是将待打印内容绘制到图形环境上 。所以,我们可以忽略掉屏幕图形环境,经过适当的缩放比例,使整个打印页容纳在一个屏幕矩形里,从而实现精确的打印预览 。
在打印预览的设计实现中,主要需要解决两个问题 。第一,如何将打印内容按合适的比例绘制到屏幕;第二,如何实现前后翻页 。下面我给出这两个问题的具体实现方法,完整的实现请参看附件中的.java文件 。
/*将待打印内容按比例绘制到屏幕*/ void ( g) {super 。(g);g2 = ()g;pf =。() 。(); //获取页面格式xoff; //在屏幕上页面初始位置的水平偏移yoff; //在屏幕上页面初始位置的垂直偏移scale; //在屏幕上适合页面的比例px = pf 。(); //页面宽度py = pf 。(); //页面高度sx = () - 1;sy = () - 1; if (px / py < sx / sy) { scale = sy / py; //计算比例 xoff = 0 。5 * (sx - scale * px); //水平偏移量 yoff = 0; } else { scale = sx / px; //计算比例 xoff = 0; yoff = 0 。