浅谈 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相关推荐

  1. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  2. java的byte php_java_浅谈java的byte数组的不同写法,(由于篇幅原因阐述的不够详 - phpStudy...

    浅谈java的byte数组的不同写法 (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"b ...

  3. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  4. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  5. java执行jar中的main_浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

  6. 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  7. 浅谈Java网络编程之Socket (2)

    <浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...

  8. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  9. java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...

最新文章

  1. Centos6.5集群安装64位hadoop2.2.0
  2. 基础拾遗------委托详解
  3. 一位大神的Python数据分析与可视化笔记
  4. 输入 ng build 或者 ng serve 之后没有任何输出的问题分析
  5. Arithmetic Slices
  6. 微信小程序 --- 页面跳转
  7. java int 包_int readInt()
  8. C++常用排序法、随机数
  9. 反射生成 INSERT 多个对象的 SQL 语句(批量插入)
  10. android 最新功能介绍,Android Studio 常用功能介绍
  11. java list 之详解_Java高级技术之List详解
  12. python类不接受任何参数_python中提示class不接受参数,为什么?
  13. Python3 从零单排17_类的继承
  14. 网络基础---网络层
  15. 学生学籍管理系统页面源代码html_学生信息管理系统系统源代码
  16. Axure汉化下载步骤
  17. HTML中table表格与form表单
  18. 通过串口波特率计算bit时间
  19. ps怎么做玻璃破碎碎片飞溅效果
  20. PyTorch 音频处理教程

热门文章

  1. 一些算法入门应该明白的东西
  2. 【spring】让spring的注解和xml配置文件变得优雅,最常用的注解
  3. 通过XmlDocument读写Xml文档(转)
  4. 多图详解教程:Eclipse 3.6连接Tomcat 7
  5. 一、你要拥有自己的服务器
  6. ORA-16629: database reports a different protection
  7. C#forUnity快速入门(连载2)-C#语言入门
  8. [linux内核]將ubuntu更新到最新的内核
  9. 你的团队能通过电梯测试吗?
  10. Linux下编译软件时指定安装目录的好处