浅谈 Java Printing
浅谈 Java Printing
其实怎么说呢?在写这篇博文之前,我对java printing 可以说是一无所知的。以至于我在敲文字时,
基本上是看着api文档翻译过来的。这虽然看起来非常的吃力,但是我相信,有道大哥不会辜负我的。嘻
嘻!
Java Printing 技术,也就是我们平时所接触的打印,只不过是说可以用Java实现而已。
一、Java Printing 打印简介
Java Printing API能够使java应用程序实现相关的打印功能,如:
1、打印所有 Java 2D 和 AWT 图形,包括复合的图形图像。
2、控制文档(如word文档)组成功能,如:柔软整理、反序打印 和 小册子打印。
3、调用打印机特定的功能,如:双面打印装订
4、能在所有平台上进行打印,如:windows、Solaris(我想这也是Java具有跨平台的优点体现)
二、Java Printing 相关类和接口
1、接口
Printable :该接口由每一个页面 painter 实现,应用程序通过打印系统调用print方法,以呈现一个页面
Pageable :该接口由即将被答打印系统打印的文档(document)实现,通过该接口,系统能够知道文档的页面 及每页
即将以什么格式打印
PrinterGraphics :一个用来呈现页面的 painter 的Graphics2D
对象,需要实现该接口。同时,通过该接
口,还可以获得控制打印的PrinterJob对象。
2、类
Book :实现了Pageable接口,代表一个拥有不同页面格式和页面painter的文档,该类通过Pageable接
口和PrintJob进行交互。
PageFormat :描述了打印页面的大小(如:A4,A3)及打印方向
Paper :描述了每一张纸的物理特性
PrintJob :控制打印的主要类。应用调用PrintJob方法去启动一个任务,向用户展示打印框,并打印。
三、Java打印的相关概念
Java 打印是基于一个回调打印模型的。即当页面被打印时,由打印系统(非应用程序)控制。应用程
序只是提供打印文档的相关信息,而当打印系统需要呈现页面时,打印系统就会向应用程序索取。
.......
实现打印,需要做些什么?
一个应用程序向支持打印功能,有以下2点需要实现:
1、任务控制 ----- 初始化(启动)、管理打印任务
2、成像 ----- 当打印系统请求时,要能呈现一个页面
什么是任务控制?
在一个应用程序中,用户通常是通过点击一个按钮或者一个菜单来启动一个打印任务。当一个打印操作
被用户触发,应用程序就会创建一个 PrintJob 对象并用该对象管理打印进程。
应用程序 负责设置打印任务,向用户展示打印窗格并启动打印任务。
什么是成像?
当一个文档被打印时,当打印系统请求时,应用程序必须呈现每一页面。为了实现这个机制,应用程序
提供一个实现Printable接口的 page painter ,当打印系统需要呈现一个页面时,它就会调用 page painter
的print 方法。
当 page painter 的print 方法被调用时,该方法是通过传递一个图形上下文来呈现图像页面。该方法
同时也传递一个 PageFormat 对象来指定页面的几何布局 和 一个 整型数 来指定页面在打印任务中的下标,即页码。
打印系统支持Graphics和Graphics2D呈现。如果想打印 Graphics 2D形状,文本,图形等,可以在
print方法中将 Graphics 对象强制转换为 Graphics 2D 对象。
什么是Page Painter?
Page Painter 的主要任务就是通过 打印系统提供的 Graphics 上下文对象 去呈现每个页面。一个
Page Painter 实现Printable接口的print方法。
因为许多打印机无法打印整个页面的所有地方,顾print方法pageFormate 参数指定页面可以成像的区域。
转载于:https://blog.51cto.com/smallcoder/1869860
浅谈 Java Printing相关推荐
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- java的byte php_java_浅谈java的byte数组的不同写法,(由于篇幅原因阐述的不够详 - phpStudy...
浅谈java的byte数组的不同写法 (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"b ...
- java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...
- java对象头_浅谈java对象结构 对象头 Markword
概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...
- java执行jar中的main_浅谈java 执行jar包中的main方法
浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...
- 浅谈Java中的Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- 浅谈Java网络编程之Socket (2)
<浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...
- java bitset用途_浅谈Java BitSet使用场景和代码示例
搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...
- java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰
今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...
最新文章
- Centos6.5集群安装64位hadoop2.2.0
- 基础拾遗------委托详解
- 一位大神的Python数据分析与可视化笔记
- 输入 ng build 或者 ng serve 之后没有任何输出的问题分析
- Arithmetic Slices
- 微信小程序 --- 页面跳转
- java int 包_int readInt()
- C++常用排序法、随机数
- 反射生成 INSERT 多个对象的 SQL 语句(批量插入)
- android 最新功能介绍,Android Studio 常用功能介绍
- java list 之详解_Java高级技术之List详解
- python类不接受任何参数_python中提示class不接受参数,为什么?
- Python3 从零单排17_类的继承
- 网络基础---网络层
- 学生学籍管理系统页面源代码html_学生信息管理系统系统源代码
- Axure汉化下载步骤
- HTML中table表格与form表单
- 通过串口波特率计算bit时间
- ps怎么做玻璃破碎碎片飞溅效果
- PyTorch 音频处理教程
热门文章
- 一些算法入门应该明白的东西
- 【spring】让spring的注解和xml配置文件变得优雅,最常用的注解
- 通过XmlDocument读写Xml文档(转)
- 多图详解教程:Eclipse 3.6连接Tomcat 7
- 一、你要拥有自己的服务器
- ORA-16629: database reports a different protection
- C#forUnity快速入门(连载2)-C#语言入门
- [linux内核]將ubuntu更新到最新的内核
- 你的团队能通过电梯测试吗?
- Linux下编译软件时指定安装目录的好处