Atitit.java swing打印功能 api  attilax总结

Atitit.java swing打印功能 api  attilax总结

 

 

1打印方式有三种:2

1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印。2

1.2. 二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。2

1.3. 三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。 2

1.4. 使用lang api2

2打印模式 单页模式 与多页模式3

3虚拟打印测试4

4Java 打印api4

4.1. 通过PrinterJob接口  ( 不推荐@depeart4

4.2. 通过PrintService(推荐)4

5Java jpos 打印框架5

5.1. Ati print ----DevicePrinterPrinter5

6Code  实现打印Graphics  drawImage drawString5

6.1. PrinterJob  setPrintable6

6.2. PrinterJob  .setPageable6

7获取打印机列表7

8使用指定打印机打印8

9参考8

 

1. 打印方式有三种:

1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印。

1.2. 二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。

1.3. 三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。 

 

1.4. 使用lang api

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来;IEtitile不想打印出来。

解决办法:把button放在一个table或者div里,打印的时候隐藏,完成后显示就可以。系统中的javascript打印代码如下:

 

 

第三种方案利用word强大的排版、打印功能,把排版和打印的需求扔到word中,OA软件要做的仅仅是让数据导到word中去。JAVA读取WORD模板,通过XML读取相关的数据库数据,自动转载数据到WORD模板中,最终展现给客户打印的是WORD

 

完成此方案后,有几个特点:打印格式由现有的word格式提供,不需要再花时间开发调试程序;实施人员只需要花一点时间就完成标签和XML文件的设置;在报表中自动加入审批意见,领导印章等,直观跟现实一致;打印的格式和效果完全由word决定,而word强大并且被大众而熟悉,在打印的时候可以调整,所见即所得!

       小结:这几种方案不仅仅应用于OA的打印,任何web系统CRMERPHR等打印都可以处理。而且也不仅仅是java打印、jsp打印,用PHPASP等语言开发的WEB打印也一样适用。这几种打印方案广泛应用,特别是第三种,有效解决了政务OA的红头文件,此文仅做思路的总结,具体实现方法有很多。

 

 

2. 打印模式 单页模式 与多页模式 

 

3. 虚拟打印测试

 

直接打印的时候,会弹出存为pdf文件。。。

貌似win7 PDF-XChange Printer 2012

 

 

4. Java 打印api

4.1. 通过PrinterJob接口  ( 不推荐@depeart

 

比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。另外,完善的PrinterJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。

 

PrintService内部也是使用PrintService

4.2. 通过PrintService(推荐)

Java打印最大的改变来自于J2SE的发布带来的Java打印服务API。这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintServiceDocPrintJob接口的局限性。因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集,它是目前我们常用的方法并且是这篇文章的焦点。

  更深入来说,以下的步骤包含了怎么使用这个新的Java打印服务API

  1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。打印服务实现了PrintService接口.

  2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。

  3.创建一个实现Doc接口的类来描述你想要打印的数据 你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。

  4.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet或者设为空值。

  现在你可以检查每一步并且试着完成它们。

 

 

5. Java jpos 打印框架

 

参考

jpos_examples_图文_百度文库.htm

 

5.1. Ati print ----DevicePrinterPrinter

6. Code  实现打印Graphics  drawImage drawString

 

import java.awt.print.PrinterJob;

 

 

1. 
           Image src = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg");  

1. 
          drawImage

 

1. Graphics g) {  

2.             if (paintable) {  

3.                 g.setColor(Color.GRAY);  

4.                 g.drawString

 

 

6.1. PrinterJob  setPrintable

        //获取打印服务对象

 

          PrinterJob  job  =  PrinterJob.getPrinterJob();          

 

     //     PageFormat  pageFormat  =  job.defaultPage();//得到默认页格式    

 

          job.setPrintable(new  PrintTest1());//设置打印类

 

 

6.2. PrinterJob  .setPageable

 

 

   //------------------add page and format

 

        //        设置成竖打

 

        PageFormat  pf  =  new  PageFormat();

 

        pf.setOrientation(PageFormat.PORTRAIT);

 

        //        通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。

 

        Paper  p  =  new  Paper();

 

        p.setSize(590,840);//纸张大小  

 

        p.setImageableArea(10,10,  590,840);//A4(595  X  842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72

 

        pf.setPaper(p);

 

        //        把  PageFormat  和  Printable  添加到书中,组成一个页面

        

        

        //        通俗理解就是书、文档

 

        Book  book  =  new  Book();   

 

        book.append(new  PrintTest(),  pf);

 

 

 

          //获取打印服务对象

 

          PrinterJob  job  =  PrinterJob.getPrinterJob();            

 

          //  设置打印类

 

          job.setPageable(book);

 

 

7. 获取打印机列表

package com.openbravo.pos.util;

 

import javax.print.DocFlavor;

import javax.print.DocFlavor.SERVICE_FORMATTED;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

 

public class ReportUtils

 

  public static String[] getPrintNames()

  {

    PrintService[] arrayOfPrintService = PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLEnull);

    String[] arrayOfString = new String[arrayOfPrintService.length];

    for (int i = 0; i < arrayOfPrintService.lengthi++)

      arrayOfString[i] = arrayOfPrintService[i].getName();

    return arrayOfString;

  }

8. 使用指定打印机打印

 

接口 PrintService 是 DocPrintJob 的工厂。PrintService 描述了打印机的功能,并可查询它来了解打印机支持的属性。

示例:

   DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;

   PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();

   aset.add(MediaSizeName.ISO_A4);

   PrintService[] pservices =

                 PrintServiceLookup.lookupPrintServices(flavor, aset);

   if (pservices.length > 0) {

       DocPrintJob pj = pservices[0].createPrintJob();

       try {

           FileInputStream fis = new FileInputStream("test.ps");

           Doc doc = new SimpleDoc(fis, flavor, null);

           pj.print(doc, aset);

        } catch (FileNotFoundException fe) {

        } catch (PrintException e) { 

        }

   }

 

 

9. 参考

Java web 打印方案 - tanksyg的专栏 博客频道 - CSDN.NET.htm

Java打印-Print Swing component - dontsan - ITeye技术网站.htm

impt )打印--学习如何使用打印服务api.htm

Java高级编程 使用打印服务API() - 3P代码.htm

 

转载于:https://www.cnblogs.com/attilax/p/5099572.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git clone 速度过慢

由于公司内网限制&#xff0c;通过git clone mybatis的源码时速度贼慢 原来的方式&#xff1a;git clone ​​​​​​​https://github.com/mybatis/mybatis-3.git 超级慢——失败 改进方式&#xff1a;git clone https://github.com.cnpmjs.org/mybatis/mybatis-3.git 贼快…

2016/1/4 学习笔记 数据类型转换 注释 语句

⑤ 数据类型转换 自动转换&#xff1a; 一般在算术运算过程中进行自 动转换为数字类型比较大的类型 由低级到高级转换 强制转换&#xff1a;又叫做显示转换。 1&#xff0c;从高精…

前端学习(1718):前端系列javascript之生命周期上

<script>export default {onLaunch: function() {console.log(App Launch)//登录//用户信息//存储},onShow: function() {console.log(App Show)//时间戳//计算用胡得使用时间},onHide: function() {console.log(App Hide)//应用进入后台所作得得事情},onError(e){consol…

05 | 数组:为什么很多编程语言中数组都从0开始编号?

什么是数组&#xff1f; 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表存储结构连续内存空间存储相同类型数据 优点&#xff1a;连续内存相同类型数据数组可以实现随机访问 缺点&#…

远离你身边消极爱抱怨的人!!

跟着苍蝇你會找到厕所&#xff0c; 跟着蜜蜂你會找到花朵&#xff0c; 跟着千万赚百万&#xff0c; 跟着乞丐会要饭. 现实生活中&#xff0c; 你和谁在一起的确很重要&#xff0c; 甚至能改变你的成长轨迹&#xff0c; 决定你的人生成败。 和什么样的人在一起&#xff0c; 就会…

前端学习(1720):前端系列javascript之生命周期下

page2.vue <template><view>这是page2<button type"primary" click"open">点击跳转</button></view> </template><script>export default {data() {return {}},onLoad() {console.log(page onload2)},//页面渲…

LeetCode训练

缺失的正整数 /*** 0&#xff5e;n-1中缺失的数字*/ public class MissingNum {public int missingNumber(int[] nums) {int i 0;int j nums.length - 1;while (i < j) {int m i ((j - i) >> 2);if (nums[m] m) i m 1;else j m - 1;}return nums[i] i ? nu…

C#线程学习

齐全线程学习转载于:https://www.cnblogs.com/AiYaTou/p/5110712.html

06 | 链表(上):如何实现LRU缓存淘汰算法?

缓存 作用 缓存是一种提高数据读取性能的技术&#xff0c;在硬件设计、软件开发中都有着非常广泛的应用&#xff0c;比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。 淘汰策略 常见的策略有三种&#xff1a;先进先出策略 FIFO&#xff08;First In&#xff0c;First Ou…

C++处理一个动态规划的问题

嗯哼&#xff0c;别人问的问题&#xff0c;看的我也头晕&#xff0c;百度了一下动态规划&#xff0c;看了看才想起来该怎么做&#xff0c;今天写了写代码&#xff0c;实现了~ 要求是递归&#xff0c;动态规划&#xff0c;想了想这种方法也是最简单的~ 所谓动态规划&#xff1a;…

07 | 链表(下):如何轻松写出正确的链表代码?

目录 技巧一&#xff1a;理解指针或者引用的含义 技巧二&#xff1a;警惕指针丢失和内存泄漏 技巧三&#xff1a;利用哨兵简化实现难度 技巧四&#xff1a;重点留意边界条件处理 技巧五&#xff1a;举例画图&#xff0c;辅助思考 技巧六&#xff1a;多写多练&#xff0c;…

“睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)

目录 1. 传统方法 2. 基本概念 2.1异步 2.2回调函数 2.3Promise 3. Generator 函数 3.1协程 3.2协程的 Generator 函数实现 3.3Generator 函数的数据交换和错误处理 3.4异步任务的封装 4. Thunk 函数 4.1参数的求值策略 4.2Thunk 函数的含义 4.3JavaScript 语言的…

【转】成为Java顶尖程序员 ,看这10本书就够了

“学习的最好途径就是看书“&#xff0c;这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处&#xff1a; 1.能出版出来的书一定是经过反复的思考、雕琢和审核的&#xff0c;因此从专业性的角度来说&#xff0c;一本好书的价值远超其他资料2.对着书上的…

“睡服”面试官系列第二十一篇之class基本语法(建议收藏学习)

目录 1. 简介 2. 严格模式 3. constructor 方法 4. 类的实例对象 5. Class 表达式 6. 不存在变量提升 7. 私有方法 8. 私有属性 9. this 的指向 10. name 属性 11. Class 的取值函数&#xff08;getter&#xff09;和存值函数&#xff08;setter&#xff09; 12. Cl…

08 | 栈:如何实现浏览器的前进和后退功能?

栈 后进者先出&#xff0c;先进者后出&#xff0c;这就是典型的“栈”结构。栈是一种“操作受限”的线性表&#xff0c;只允许在一端插入和删除数据。 为什么要使用到“栈”这种操作受限的数据结构&#xff1f; 事实上&#xff0c;从功能上来说&#xff0c;数组或链表确实可…

关于tag,viewWithTag

iOS SDK内置了一套搜寻机制&#xff0c;可通过tag来查找子视图。 **苹果公司很少给子视图设置tag.笔者所知范围的唯一例外出现在UIAlertView中&#xff0c;该类会给按钮分别设置值为1、2的标签 viewWithTag:可以在某视图的所有下属中根据tag来查找相关的子视图。 ** 假如有多个…

09 | 队列:队列在线程池等有限资源池中的应用

队列定义 先进者先出&#xff0c;这就是典型的“队列”。队列跟栈一样&#xff0c;也是一种操作受限的线性表数据结构。 顺序队列和链式队列 顺序队列&#xff1a;用数组实现的队列// 用数组实现的队列 public class ArrayQueue {// 数组&#xff1a;items&#xff0c;数组大…

“睡服”面试官系列第二十二篇之class的继承(建议收藏学习)

目录 1. 简介 2. Object.getPrototypeOf() 3. super 关键字 4. 类的 prototype 属性和__proto__属性 4.1extends 的继承目标 4.2实例的 __proto__ 属性 5. 原生构造函数的继承 6. Mixin 模式的实现 1. 简介 Class 可以通过 extends 关键字实现继承&#xff0c;这比 ES…

PICT实现组合测试用例

成功安装后&#xff0c;在命令行中输入命令pict&#xff1a; 可以看到pict命令的一些选项&#xff1a;/o:N 组合数&#xff0c;默认值为2&#xff0c;即pict生成的测试用例集中每条测试数据会有两个值与其他测试集是不同的&#xff1b;/d:C 值与值之间的分隔符&#xff0c;…

10 | 递归:如何用三行代码找到“最终推荐人”?

什么是递归&#xff1f; 递归是一种应用非常广泛的算法&#xff08;或者编程技巧&#xff09;。很多数据结构和算法的编码实现都要用到递归&#xff0c;比如 DFS 深度优先搜索、前中后序二叉树遍历等等。 去的过程叫“递”&#xff0c;回来的过程叫“归” 场景 周末你带着女…