关于打印(自己总结一下)
来源:互联网 发布:淘宝手机详情页图 750 编辑:程序博客网 时间:2024/06/17 05:28
关于打印(自己总结一下)
系统中需要添加一个打印功能,以前没有做过,忙活了几天才做出来
(技术很菜,见谅 ^^)。期间也尝试了几个方法,现总结如下:
·用JavaScript调用IE的打印功能,代码如下:
window.print(); //很简单?貌似是这样!
但window.print();的功能是打印整个网页,在很多情况下我们并不需要打印整个网页,可能只是
需要打印网页中的某个部分,怎么解决呢?再看下面的代码:
function printdiv(printpage)
{
var headstr = "<html><head><title></title></head><body>";
var footstr = "</body>";
var newstr = document.all.item(printpage).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = headstr+newstr+footstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}
我们把需要打印的内容放到div中,然后再将div传递到上面的方法中即可。怎么调用它我就不说了吧,是个人就会。
但是,问题又来了,打印出来在纸张上会显示页面和页脚,我晕!
接下来我们再解决页眉页脚的问题,有两种方法:
1、使用者打开IE——文件——页面设置,将页眉和页脚设为空
2、使用程序完成:代码如下:
var hkey_root,hkey_path,hkey_key;
hkey_root="HKEY_CURRENT_USER";
hkey_path="//Software//Microsoft//Internet Explorer//PageSetup//";
function pagesetup_null()
{
try{
var RegWsh = new ActiveXObject("WScript.Shell");
hkey_key="header";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
hkey_key="footer";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
}catch(e){
alert("请先更改您的IE安全设置再打印!步骤如下:打开“IE——Internet选项——安全——自定义级别,将“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”修改为“启用”即可");
}
}
将<body></body>设为<body onload="pagesetup_null()"></body>即可。
由于上面代码需要更改注册表,而IE默认是不能修改注册表的,所以还得手动设置IE,步骤如下:"打开
IE——Internet选项——安全——自定义级别——“对未标记为可安全执行的脚本的ActiveX控件初始化并执行脚本”更改为启用"即可,
这个方法还是需要使用者要手动修改IE,所以感觉并不是十分合适。
接下来有尝试了几种方法,因为我们需要将数据放到表格中打印出来,所以想到了JTable。
对JTable不怎么熟悉,而且第一行还需要合并单元格,所以做了很长时间,单独测试终于成功了,很是高兴!
(由于代码比较多,就不贴上来了)于是放到系统中进行测试,刚开始一切正常(窃喜),当弹出打印选择框时,
服务器突然自动关闭了,试了很多次都是这样,在Google中找了半天发现是dwr和程序发生冲突(我狂晕!怎么这么倒霉?)
看来还得另辟蹊径,这时候突然想到了不怎么喜欢的Graphics类,参考着API随便的画了两下没想到结果成功了!终于打印出自己想要的数据了。有点儿欣喜若狂,但更多的是痛心疾首,咋就早没想到她呢?
长期做J2EE看来对J2SE中的一些东西已经有些生疏了,要补课啊,就写这么多吧。
代码片段:
PAGES = 1;
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
DocPrintJob job = service.createPrintJob();
pras.add(MediaSizeName.ISO_A4);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(this, flavor, das);
try {
job.print(doc, pras);
} catch (PrintException pe) {
pe.printStackTrace();
}
//类要继承Printable
//重写方法
public int print(Graphics gp, PageFormat pf, int page)
throws PrinterException {
Graphics2D g2 = (Graphics2D) gp;
g2.setPaint(Color.black);
if (page >= PAGES){
return Printable.NO_SUCH_PAGE;
}
g2.translate(pf.getImageableX(), pf.getImageableY());
Font font = new Font("楷体", Font.BOLD, 16);
g2.setFont(font);
/* 下面就自己开始画吧 */
return Printable.PAGE_EXISTS;
}
系统中需要添加一个打印功能,以前没有做过,忙活了几天才做出来
(技术很菜,见谅 ^^)。期间也尝试了几个方法,现总结如下:
·用JavaScript调用IE的打印功能,代码如下:
window.print(); //很简单?貌似是这样!
但window.print();的功能是打印整个网页,在很多情况下我们并不需要打印整个网页,可能只是
需要打印网页中的某个部分,怎么解决呢?再看下面的代码:
function printdiv(printpage)
{
var headstr = "<html><head><title></title></head><body>";
var footstr = "</body>";
var newstr = document.all.item(printpage).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = headstr+newstr+footstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}
我们把需要打印的内容放到div中,然后再将div传递到上面的方法中即可。怎么调用它我就不说了吧,是个人就会。
但是,问题又来了,打印出来在纸张上会显示页面和页脚,我晕!
接下来我们再解决页眉页脚的问题,有两种方法:
1、使用者打开IE——文件——页面设置,将页眉和页脚设为空
2、使用程序完成:代码如下:
var hkey_root,hkey_path,hkey_key;
hkey_root="HKEY_CURRENT_USER";
hkey_path="//Software//Microsoft//Internet Explorer//PageSetup//";
function pagesetup_null()
{
try{
var RegWsh = new ActiveXObject("WScript.Shell");
hkey_key="header";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
hkey_key="footer";
RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
}catch(e){
alert("请先更改您的IE安全设置再打印!步骤如下:打开“IE——Internet选项——安全——自定义级别,将“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”修改为“启用”即可");
}
}
将<body></body>设为<body onload="pagesetup_null()"></body>即可。
由于上面代码需要更改注册表,而IE默认是不能修改注册表的,所以还得手动设置IE,步骤如下:"打开
IE——Internet选项——安全——自定义级别——“对未标记为可安全执行的脚本的ActiveX控件初始化并执行脚本”更改为启用"即可,
这个方法还是需要使用者要手动修改IE,所以感觉并不是十分合适。
接下来有尝试了几种方法,因为我们需要将数据放到表格中打印出来,所以想到了JTable。
对JTable不怎么熟悉,而且第一行还需要合并单元格,所以做了很长时间,单独测试终于成功了,很是高兴!
(由于代码比较多,就不贴上来了)于是放到系统中进行测试,刚开始一切正常(窃喜),当弹出打印选择框时,
服务器突然自动关闭了,试了很多次都是这样,在Google中找了半天发现是dwr和程序发生冲突(我狂晕!怎么这么倒霉?)
看来还得另辟蹊径,这时候突然想到了不怎么喜欢的Graphics类,参考着API随便的画了两下没想到结果成功了!终于打印出自己想要的数据了。有点儿欣喜若狂,但更多的是痛心疾首,咋就早没想到她呢?
长期做J2EE看来对J2SE中的一些东西已经有些生疏了,要补课啊,就写这么多吧。
代码片段:
PAGES = 1;
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
DocPrintJob job = service.createPrintJob();
pras.add(MediaSizeName.ISO_A4);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(this, flavor, das);
try {
job.print(doc, pras);
} catch (PrintException pe) {
pe.printStackTrace();
}
//类要继承Printable
//重写方法
public int print(Graphics gp, PageFormat pf, int page)
throws PrinterException {
Graphics2D g2 = (Graphics2D) gp;
g2.setPaint(Color.black);
if (page >= PAGES){
return Printable.NO_SUCH_PAGE;
}
g2.translate(pf.getImageableX(), pf.getImageableY());
Font font = new Font("楷体", Font.BOLD, 16);
g2.setFont(font);
/* 下面就自己开始画吧 */
return Printable.PAGE_EXISTS;
}
- 关于打印(自己总结一下)
- 自己总结一下CSpinButtonCtrl用法
- 总结一下自己的2015
- 总结一下自己的2016
- 总结一下自己学习语言的经验(给初学者)
- 关于通信原理的一点总结(大学的时候写的,现在把自己仅有的一点点总结存档一下)
- 关于kernel debug总结一下
- 大三了总结一下自己的大学
- 自己总结一下STRUTS上传图片
- 工作了三年了,总结一下自己
- 根据别人ruby总结,自己梳理一下
- 根据别人ruby总结,自己梳理一下
- 总结一下适合自己的看书方式
- 总结一下自己常用的命令
- 总结一下自己所学过的语言
- 自己使用xUtils3后总结一下下
- 应该用心看一下,总结一下,对自己有所提高
- 关于springmvc @requestmapping(自己整理总结)
- java web部署
- SQLSERVER附加错误代码823的处理
- Android ADB usb
- 一个根据数据库中数据,并且页面中用户的勾选所达到的效果
- 另外一个ASP.NET 实现邮件发送和接受的功能(Sockets)
- 关于打印(自己总结一下)
- 不用栈实现二叉树非递归中序遍历
- 今天开始学习EJB,做个记号。
- 结婚的那天晚上,不看你会后悔的!~!~12月3日 14:48
- 关于QUARTZ JOB遇到的问题
- Siebel 异常:Windows.Word.APP required version 9.0.0.0, no version found
- 关于C++类库KYLib: 扩展平衡二叉树类(AVL extended tree)
- extjs 学习笔记
- 存储过程例子