- 浏览: 441450 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
belonghu:
这还和字段是否主键,加索引,有很大关系,我对一个索引的字段查询 ...
MYSQL每日一用:SELECT 语句中比对(between and \ like \ left) -
lqingqingzijin:
好,就是想知道怎样将默认bash修改成nologin
我怎么创建和修改用户帐号,让它有一个nologin shell? -
yangxiutian:
“在jar中添加了字体”是什么意思?
java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:299) -
ljhard_1030:
楼主学习了,以后继续发表这类的文章,会继续光临的。。
刨根问底(Proxool连接池设置) -
RobustTm:
Selenium中使用的貌似是Junit 3.x,上面的例子也 ...
使用Selenium 和Junit 进行WEB功能测试
如果您已经使用过一段时间 Java 平台,您可能会象我一样因打印 API 的无休止更改而感到沮丧。Merlin 已经为 Java 平台带来了另一套打印功能和技术。这个被称为“Java 打印服务 API”(Java Print Service API)的最新的再版从 1999 起就已经应用于 Java Community Process 了。幸运的是,新 API 是积极的补充,应该在一段时间里代表对打印支持的最终重要修改。
使用新的“打印服务 API”进行打印的过程包括三部分:发现、规范和打印。第四部分是当打印任务有进展时进行通知,这部分是可选的。本文中将用到的所有类和接口都在
javax.print
包,或者它的其中一个子包中(请参阅
参考资料 )。
执行打印作业的第一步是识别您想用来打印的一个或一组打印机。打印机对象被称为
打印服务,识别过程被称为
查找。支持查找任务的类被恰如其分地命名为
PrintServiceLookup
。要查找打印服务,您需要使用清单 1 中所示的三个方法的其中之一。
public static final PrintService
lookupDefaultPrintService()
public static final PrintService[]
lookupPrintServices(DocFlavor flavor, AttributeSet attributes)
public static final MultiDocPrintService[]
lookupMultiDocPrintServices(DocFlavor[] flavors,
AttributeSet attributes)
清单 1 中所示的这三个方法中的每一个都被用于不同的任务:
-
lookupDefaultPrintService()
返回缺省的打印服务。 -
lookupPrintServices()
返回支持打印特定文档类型(比如 GIF)的打印机集,和一个特定的属性集(比如双面打印)。 -
lookupMultiDocPrintServices()
支持一次打印多个文档。
定位了自己想使用的打印服务后,您需要创建一个打印作业。 稍后,您将向这个作业发送输出。查找过程返回的
PrintService
可以用其
createPrintJob()
方法创建作业,如下所示:
PrintService printService =
PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = printService.createPrintJob();
除了指定要打印到什么地方之外,您还必须指定打印文档的格式。这时,使用
DocFlavor
类(或它的其中一个子类)就很方便。
DocFlavor
类被用于识别您要打印的对象的 MIME(Multipurpose
Internet Mail Extensions,多用途因特网邮件扩展)类型。MIME
类型描述应该如何解释电子数据。在处理电子邮件和附件时,您可能已经遇到过 MIME 类型,但 MIME 规范描述了识别数据格式的更通用的机制。
Merlin 提供了
DocFlavor
的七个子类,作为它自身用来定义格式的内部类。这些类可以分为三个 MIME 类型子集:面向字节的、面向字符的和面向服务的。面向字节的风格有:
-
BYTE_ARRAY
-
INPUT_STREAM
-
URL
面向字符的有:
-
CHAR_ARRAY
-
READER
-
STRING
面向服务的内部类是
SERVICE_FORMATTED
。
每种风格类型支持它自己的 MIME 类型集。这些 MIME 类型也被定义为内部类。有 19 种面向字节的风格,如下所示:
-
AUTOSENSE
-
GIF
-
JPEG
-
PCL
-
PDF
-
PNG
-
POSTSCRIPT
-
TEXT_HTML_HOST
-
TEXT_HTML_US_ASCII
-
TEXT_HTML_UTF_16
-
TEXT_HTML_UTF_16BE
-
TEXT_HTML_UTF_16LE
-
TEXT_HTML_UTF_8
-
TEXT_PLAIN_HOST
-
TEXT_PLAIN_US_ASCII
-
TEXT_PLAIN_UTF_16
-
TEXT_PLAIN_UTF_16BE
-
TEXT_PLAIN_UTF_16LE
-
TEXT_PLAIN_UTF_8
面向字符的流比较单调,只提供两种格式:
-
TEXT_HTML
-
TEXT_PLAIN
面向服务的流包含三种格式:
-
PAGEABLE
-
PRINTABLE
-
RENDERABLE_IMAGE
您可以象下面这样配置风格(在这个示例中,将其配置为 PNG 图像):
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
打印时,您可以指定一些属性来描述您想如何打印文档。示例属性包括副本数目、要打印哪一页和文档图像类型(例如横向和纵向)。要指定属性,您需要使用下面两个类的其中之一:
-
DocAttributeSet
为单个文档指定特性。 -
PrintRequestAttributeSet
指定单个打印作业的特性。
要为打印运行指定属性,您需要创建一个适当的属性集(
DocAttributeSet
或
PrintRequestAttributeSet
)的实例并用您期望的打印运行属性填充它。对于未指定的那些属性,还要为其配置合理的缺省值。
javax.print.attribute
包拥有大约 70 个不同的属性,每个属性都被定义为单独的类。每个属性都使用一个或多个属性集。除本文中描述的两个属性集外,另外还有两个属性集可用于查询信息。
javax.print.attribute
包提供一个公共空间用来查找所有的类型。
下面我们将看到一个打印运行,它使用
PrintRequestAttributeSet
并把对象打印五份:
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(5));
请务必看一下
javax.print.attribute
包中所有可用属性的列表。
Doc
接口为打印作业提供数据。该接口的实现者是
SimpleDoc
类。使用一个构造函数,提供内容作为第一个参数,风格作为第二个参数,属性作为第三个参数。该构造函数如下所示:
public SimpleDoc(Object printData, DocFlavor flavor,
DocAttributeSet attributes)
这就为我们留下了数据问题。答案取决于 DocFlavor。如果您指定了
DocFlavor.INPUT_STREAM
这种风格,那么数据将由它的
InputStream
识别。如果您的风格是
DocFlavor.BYTE_ARRAY
,那么数据就是一个字节数组(
byte [ ]
)。
所以,要打印 PNG 图像文件,您需要使用清单 2 中所示的语法。
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
String filename = ...;
FileInputStream fis = new FileInputSteam(filename);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
一旦您识别了打印机,并指定了输出格式、属性和内容,那么只要打印一下就行了。实际的打印作业是通过
DocPrintJob
(是从
PrintService
检索到的)的
print()
来执行,如清单 3 所示。
DocPrintJob job = ...;
PrintRequestAttributeSet pras = ...;
Doc doc = ...;
job.print(doc, pras);
通过调用
print()
,您触发了一个机制,该机制在一个单独的线程中向打印服务发送内容。
很明显,目前为止我们还没有提到打印对话框。该对话框是由系统弹出的,允许您通过图形方式配置打印机属性。图 1 显示新“Java 打印服务 API”的打印对话框。
有趣的是,打印机对话框的缺省行为已经用新的 API 更改了:缺省情况下对话框不显示。所以我们必须使用
ServiceUI
类创建如上面所示的打印对话框。
ServiceUI
类提供一个单独的方法来显示打印机选择对话框:
printDialog(GraphicsConfiguration gc, int x, int y,
PrintService[] services, PrintService defaultService,
DocFlavor flavor, PrintRequestAttributeSet attributes)
然后您使用返回的
PrintService
获取打印要用的
DocPrintJob
,如清单 4 所示。
String filename = ...;
PrintRequestAttributeSet pras = ...;
DocFlavor flavor = ...;
PrintService printService[] =
PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService =
PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200,
printService, defaultService, flavor, pras);
if (service != null) {
DocPrintJob job = service.createPrintJob();
FileInputStream fis = new FileInputStream(filename);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
}
我们将以一个可运行的示例结束本文,该示例将让您试验新的“打印服务 API”的功能。下面的代码本质上是由先前所有的代码示例组合而成的一个可运行程序。运行该程序时,请确保在命令行上输入了 PNG 图像文件的名称。如果您更倾向于打印一种不同的格式,只需更改
DocFlavor
即可。
import javax.print.*;
import javax.print.attribute.*;
import java.io.*;
public class Printing {
public static void main(String args[]) throws Exception {
String filename = args[0];
PrintRequestAttributeSet pras =
new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
PrintService printService[] =
PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService =
PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200,
printService, defaultService, flavor, pras);
if (service != null) {
DocPrintJob job = service.createPrintJob();
FileInputStream fis = new FileInputStream(filename);
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
Thread.sleep(10000);
}
System.exit(0);
}
}
发表评论
-
Centos(带宽测试脚本-测试通过)
2010-07-15 18:00 2492#!/bin/bash # test network ... -
linux 安装SVN
2010-07-07 18:09 1593安装配置 svn server+apache ... -
linux 性能检测工具 dstat
2010-07-06 14:40 1784在sentos中,使用yum install dstat ... -
网络监控:带宽、网络情况……
2010-06-25 13:37 1375iftop是LINUX下查看網路流 ... -
Rootkit Hunter
2010-06-04 14:06 1994Rootkit Hunter Description ... -
SSH安全配置
2010-06-04 13:00 01.远程可否重启SSHD服务? 答:实际操作是: ... -
vsftp客户连接常见故障现象
2010-05-24 16:54 1555ftp客户连接常见故障现象 现象0: > ftp ... -
linux下压缩与解压缩
2010-04-16 13:49 1225linux下压缩与解压缩 对于刚刚接触Lin ... -
linux 出现大量的TIME_WAIT解决办法
2010-04-15 10:11 3599昨天服务器的应用有开 ... -
linux下修改目录权限(chmod)
2010-04-14 16:09 3051指令名称 : chmod 使用权限 : 所有使用者 ... -
批量修改LINUX下的文件或目录权限
2010-04-14 16:01 1877CU里的一个用户用"#chown -R 777 /* ... -
我怎么创建和修改用户帐号,让它有一个nologin shell?
2010-04-13 15:34 15146我怎么创建和修改用户帐号,让它有一个nologin shell ... -
repair filesystem 1 #一般是什么引起的和该怎样解决
2010-04-08 10:40 3307Finding module dependencies; ... -
提高linux ssh访问的安全性
2010-02-25 16:44 1639提高ssh安全性: 鼓励您系统上的所有用户使用 ssh 取 ... -
查看linux硬件信息大全
2010-02-24 10:53 31431, 主板信息 .查看主板的序列号 ------- ... -
网关服务器设置手册(iptables+iptables_logger_v0.4)
2010-01-15 18:03 3203iptables_logger的配置网站: http ... -
添加yum源 :yum install PHP 5.2
2010-01-15 15:37 7526喜欢CentOS 的原因之一他有yum ,有些依赖包安装起来 ... -
tar.bz2解压方法
2010-01-14 13:10 41781. tar -zvxf wine******.tar. ... -
MYSQL: ERROR 2002 (HY000):Can't connect to local MySQL server
2010-01-14 11:58 2805在SentOS 5中: >>yum instal ... -
IPtables日志管理
2010-01-13 17:48 2526IPtables日志管理 Iptable ...
相关推荐
Java的`java.awt.print`包提供了打印服务,可以创建`PrinterJob`对象,设置打印属性,加载要打印的数据,然后调用`print()`方法启动打印任务。 在实际应用中,考虑到安全性问题,Applet已经逐渐被更现代的技术如...
其中,打印属性的设置、JasperPrint对象的加载及打印操作是核心部分。 4. **注意事项** - 确保Applet能够正确加载所需的JasperPrint对象。 - 配置打印属性以适应不同规格的纸张。 - 处理异常情况,确保用户界面...
Java打印全集主要涵盖Java平台中的打印功能,包括如何使用...通过以上知识点的学习和实践,开发者可以充分理解和利用Java的打印功能,为用户提供便捷的打印体验,无论是在传统的桌面应用程序还是Web环境下的Applet中。
在`printdemo`这个示例项目中,可能包含了如何使用Java Print Service API创建和配置打印任务的代码示例,以及如何在Web环境中调用这些功能的演示。通过研究这个示例,你可以更深入地了解Java Print组件的使用方法,...
- 在生产环境中部署Applet时,确保已正确配置安全设置和权限。 总之,使用Java的`javax.print`包通过Applet实现打印功能是一项实用且重要的技能,特别是在需要集成条码打印的企业级应用开发中。通过遵循上述步骤和...
在示例代码中,创建了`Font`对象来设置打印文本的字体、风格和大小。`FontRenderContext`和`TextLayout`用于精确地测量和布局文本,包括换行和对齐。`AttributedString`可以用于添加文本属性,如颜色或下划线。 6....
- **应用实例**:通过Oracle Reports设计工具,将条码控件添加到报表中,配置数据源和条码属性,运行报告即可打印条码。 4. **方案四:PASTA** - PASTA可能是另一种条码生成库或工具,但具体细节未在提供的信息中...
其中 javax.print 包中主要包含打印服务的相关类,而 javax.print.event 则包含打印事件的相关定义,javax.print.attribute 则包括打印服务的可用属性列表等。 要实现打印,至少需要考虑两条:首先,需要一个打印...
- height和width属性用于设定Applet的显示高度和宽度。 - 在文档中可以见到两段Applet的代码示例,第一段示例创建了一个红色边框的图形,第二段示例创建了两个不同颜色的椭圆并添加了文字。 5. Java程序结构: -...
04.05.01.04 编辑字段集列表和属性 04.05.01.05 汇总 04.05.01.06 子表对齐 04.05.02 创建交叉字段集 04.05.02.01 选择数据集 04.05.02.02 选择行维分组字段 04.05.02.03 选择列维分组字段 04.05.02.04 设置...
- **打印属性(Print)**:涉及打印文档时的样式。 - **表格属性(Table)**:定义表格的样式。 - **文本属性(Text)**:控制文本的对齐、缩进、装饰等。 - **2D/3D转换属性(Transform)**:允许元素进行旋转、...
1. **设置开发环境**:确保已经安装了Java Development Kit (JDK),并配置好环境变量,如JAVA_HOME和PATH。 2. **创建源代码文件**:使用文本编辑器或集成开发环境(IDE)创建一个新的Java文件,例如`HelloJava....
对于Applet,还需创建HTML文件(如Helloworld.html)来嵌入Applet代码,并设置code属性指向.class文件。 总之,Java运行环境包括JDK的安装和配置,开发工具如编译器和解释器,以及源代码的编辑和执行。理解这个过程...
**行式引擎只支持从上到下扩展属性,其它属性设置均不支持** - **错误代码**: 1104 - **含义**: 行式报表引擎仅支持特定方向上的属性扩展。 - **解决方案**: - 严格按照从上到下的顺序设置属性。 - 如需其他...