这个题目很大,我用一个我最近遇到的问题来说这个问题吧。
大家看下图
看简单的一张表
就是学生经常看到的成绩单
现在有这么个需求,就是每个学生的成绩单横着打印在一张a4纸上
而且 一张纸只能打印一个学生的成绩单
而且一个学生的成绩单 也只能占据一张纸
这个需求很简单 要求一点也不高
我先说说我是怎么做的
在所有的成绩单最后,加上一个按钮
在jsp的body里用
<!--begin-->
与
<!--end-->
把我需要打印的内容框起来
例如
<!--begin-->
<table></table>
<table></table>
<!--end-->
页面就能打印了
但问题是,如何保证一个成绩单只占用一页呢?
跟朋友讨论的时候,朋友说,你每次打印一张成绩单,就输出几个<br>呗
我一想,OK呀。
这方法不错
我就先得知道学生前四个学期中,单个学期内课程最多时,到底有几节课。
还有5个学期之后,也就是第二行最多有几门课。
然后根据这个两个数字,来计算打印一张成绩单后,下面得空几行。
然后呢,我就写了这样一个方法:
我得不断的试验,上面有几门课,下面有几门课的时候 到底应该空几行 才不会影响下一张的打印。
可就是这样还不行,因为有的课程名字太长,会占用两行..........
至此,我已经花了快3个小时了
特别的头疼
感觉都没有爱了。
晚上睡觉的时候,脑子里,灵光一闪
就想到,能不能再每个成绩单打印完毕后,直接输出一个分页符呢。
然后在百度了3分钟后发现了:
<br style='page-break-before:always'>
然后我在代码里写下了这样的话:
师弟,师妹呀
人蠢不能怨社会
当你发现自己现在干的事情很无聊 很琐碎的时候
当你发现自己现在干的活 是一种纯粹工作量的时候
那么请 一定要暂时先思考一些 这么做 方向是否正确
请一定记得 写代码是一项艺术 那是一个脑力活
所以 别急着敲代码 多想想
但是总有那么一些蹩脚的程序员 把脑力活 干成了体力活
那些干体力活的程序员 我们俗称码农
而那些 能在大方向上 给码农指示方向的程序员我们称之为 架构师
by dlf 2016-01-16
qq:460795365
大家看下图
看简单的一张表
就是学生经常看到的成绩单
现在有这么个需求,就是每个学生的成绩单横着打印在一张a4纸上
而且 一张纸只能打印一个学生的成绩单
而且一个学生的成绩单 也只能占据一张纸
这个需求很简单 要求一点也不高
我先说说我是怎么做的
在所有的成绩单最后,加上一个按钮
<input type="button" value="打印" οnclick="printpage()">
<script type="text/javascript">
function printpage() {
document.title="";
PageSetup_Null() ;
bdhtml=window.document.body.innerHTML;
sprnstr="<!--begin-->";
eprnstr="<!--end-->";
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
window.document.body.innerHTML=prnhtml;
window.print();
}
/*----------------去除页眉页脚--------*/
var HKEY_Root,HKEY_Path,HKEY_Key;
HKEY_Root="HKEY_CURRENT_USER";
HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
//设置网页打印的页眉页脚为空
function PageSetup_Null() {
try {
if(window.ActiveXObject){
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
}
} catch(e) {}
}
在jsp的body里用
<!--begin-->
与
<!--end-->
把我需要打印的内容框起来
例如
<!--begin-->
<table></table>
<table></table>
<!--end-->
页面就能打印了
但问题是,如何保证一个成绩单只占用一页呢?
跟朋友讨论的时候,朋友说,你每次打印一张成绩单,就输出几个<br>呗
我一想,OK呀。
这方法不错
我就先得知道学生前四个学期中,单个学期内课程最多时,到底有几节课。
还有5个学期之后,也就是第二行最多有几门课。
然后根据这个两个数字,来计算打印一张成绩单后,下面得空几行。
然后呢,我就写了这样一个方法:
//max2 是第一列最多的课程数
//max3 是第二列最多的课程数
private void pareEND(int max2, int max3, PrintWriter out) {
int countTR=20;
//可以用数组法
if (max2 == 5) {
if (max3 == 2) {
countTR = 15;
}
if (max3 == 3) {
countTR = 13;
}
if (max3 == 4) {
countTR = 12;
}
if (max3 == 5) {
countTR = 11;
}
if (max3 == 6) {
countTR = 1;
}
}
if (max2 == 6) {
if (max3 == -1) {
countTR = 19;
}
if (max3 == 1) {
countTR = 15;
}
if (max3 == 2) {
countTR = 14;
}
if (max3 == 3) {
countTR = 12;
}
if (max3 == 4) {
countTR = 12;
}
if (max3 == 8) {
countTR = 10;
}
if (max3 == 9) {
countTR = 9;
}
if (max3 == 10) {
countTR = 7;
}
}
if (max2 == 7) {
if (max3 == -1) {
countTR = 19;
}
if (max3 == 2) {
countTR = 14;
}
if (max3 == 3) {
countTR = 13;
}
if (max3 == 4) {
countTR = 12;
}
if (max3 == 5) {
countTR = 11;
}
if (max3 == 6) {
countTR = 11;
}
if (max3 == 7) {
countTR = 10;
}
if (max3 == 8) {
countTR = 9;
}
}
if (max2 == 8) {
if (max3 == -1) {
countTR = 18;
}
if (max3 == 2) {
countTR = 14;
}
if (max3 == 3) {
countTR = 13;
}
if (max3 == 4) {
countTR = 12;
}
if (max3 == 6) {
countTR = 10;
}
if (max3 == 7) {
countTR = 9;
}
if (max3 == 8) {
countTR = 8;
}
}
if (max2 == 9) {
if (max3 == -1) {
countTR = 17;
}
if (max3 == 5) {
countTR = 17;
}
if (max3 == 6) {
countTR = 17;
}
if (max3 == 7) {
countTR = 17;
}
}
if (max2 == 10) {
if (max3 == -1) {
countTR = 17;
}
if (max3 == 5) {
countTR = 10;
}
if (max3 == 6) {
countTR = 9;
}
if (max3 == 7) {
countTR = 8;
}
if (max3 == 8) {
countTR = 7;
}
}
if (max2 == 11) {
if (max3 == 8) {
countTR = 7;
}
}
if (max2 == 13) {
if (max3 == -1) {
countTR = 16;
}
}
countTR+=8;
for (int j = 0; j < countTR; j++) {
out.write(max2 + " " + max3 + " " + j + " aaaa<br>");
}
}
我得不断的试验,上面有几门课,下面有几门课的时候 到底应该空几行 才不会影响下一张的打印。
可就是这样还不行,因为有的课程名字太长,会占用两行..........
至此,我已经花了快3个小时了
特别的头疼
感觉都没有爱了。
晚上睡觉的时候,脑子里,灵光一闪
就想到,能不能再每个成绩单打印完毕后,直接输出一个分页符呢。
然后在百度了3分钟后发现了:
<br style='page-break-before:always'>
然后我在代码里写下了这样的话:
师弟,师妹呀
人蠢不能怨社会
当你发现自己现在干的事情很无聊 很琐碎的时候
当你发现自己现在干的活 是一种纯粹工作量的时候
那么请 一定要暂时先思考一些 这么做 方向是否正确
请一定记得 写代码是一项艺术 那是一个脑力活
所以 别急着敲代码 多想想
但是总有那么一些蹩脚的程序员 把脑力活 干成了体力活
那些干体力活的程序员 我们俗称码农
而那些 能在大方向上 给码农指示方向的程序员我们称之为 架构师
by dlf 2016-01-16
qq:460795365