目录
2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用)
一、Java的打印简介
在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Java 提供的打印功能一直都比较弱。实际上最初的 jdk 根本不支持打印,直到 jdk1.1 才引入了很轻量的打印支持。实际上,SUN 公司也一直致力于 Java 打印功能的完善,而 Java2 平台则终于有了一个健壮的打印模式的开端, jdk1.4 则提供了一套完整的"Java 打印服务 API" (Java Print Service API),它对已有的打印功能是积极的补充。
本次调研的打印对象主要是JPG,PDF和Word这三种常见文件格式。
二、Java打印实现
2.1 JPG图片文件格式打印实现
打印JPG图片格式的文件,本次采用的Java原生的打印方式。
jdk1.4之后对打印功能有了很好的支持。Java 的打印 API 主要存在于 java.awt.print 包中。而 jdk1.4 新增的类则主要存在于 javax.print 包及其相应的子包 javax.print.event 和 javax.print.attribute 中。其中 javax.print 包中主要包含打印服务的相关类,而 javax.print.event 则包含打印事件的相关定义,javax.print.attribute 则包括打印服务的可用属性列表等。可以很好的解决打印JPG图片格式的需求。
优点:jdk的原生支持的打印功能,可直接使用,支持设置各项打印参数。
缺点:局限性较大,只能打印一些图片和文本格式的文件。
具体实现如下:
public static void main(String[] argv) throws Exception {
File file = new File("E:\\a.jpg");
String printerName = "HP MFP M436 PCL6";//打印机名包含字串
PDFPrint(file,printerName);
}
// 传入文件和打印机名称
public static void JPGPrint(File file,String printerName) throws PrintException {
if (file == null) {
System.err.println("缺少打印文件");
}
InputStream fis = null;
try {
// 设置打印格式,如果未确定类型,可选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;
// 设置打印参数
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1)); //份数
//aset.add(MediaSize.ISO.A4); //纸张
// aset.add(Finishings.STAPLE);//装订
aset.add(Sides.DUPLEX);//单双面
// 定位打印服务
PrintService printService = null;
if (printerName != null) {
//获得本台电脑连接的所有打印机
PrintService[] printServices = PrinterJob.lookupPrintServices();
if(printServices == null || printServices.length == 0) {
System.out.print("打印失败,未找到可用打印机,请检查。");
return ;
}
//匹配指定打印机
for (int i = 0;i < printServices.length; i++) {
System.out.println(printServices[i].getName());
if (printServices[i].getName().contains(printerName)) {
printService = printServices[i];
break;
}
}
if(printService==null){
System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。");
return ;
}
}
fis = new FileInputStream(file); // 构造待打印的文件流
Doc doc = new SimpleDoc(fis, flavor, null);
DocPrintJob job = printService.createPrintJob(); // 创建打印作业
job.print(doc, aset);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} finally {
// 关闭打印的文件流
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.2 PDF文件格式打印实现
在经过网上的查找及对比,我选择了使用Apache PDFbox来实现进行PDF文件格式的打印。
Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。Apache PDFBox还包含了数个命令行工具。在此,我们只研究打印功能。
优点:功能强大,开源软件,较完美的解决了PDF格式文件的一系列处理,使用方便。
缺点:
具体实现如下:
①直接导入maven依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.6</version>
&l