package vis.cf.ss.pub.util;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.io.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
/**
* 打印图片的类
*
* @author tianmaochun
*
*/
public class PrintImage {
/**
* 画图片的方法
*
* @param fileName[图片的路径]
*/
public static void drawImage(String fileName) {
try {
DocFlavor dof = null;
// 根据用户选择不同的图片格式获得不同的打印设备
if (fileName.endsWith(".gif")) {
// gif
dof = DocFlavor.INPUT_STREAM.GIF;
} else if (fileName.endsWith(".jpg") || fileName.endsWith(".JPG")) {
// jpg
dof = DocFlavor.INPUT_STREAM.JPEG;
} else if (fileName.endsWith(".png")) {
// png
dof = DocFlavor.INPUT_STREAM.PNG;
}
// 字节流获取图片信息
FileInputStream fin = new FileInputStream(fileName);
// 获得打印属性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 每一次默认打印一页
pras.add(new Copies(1));
pras.add(MediaSizeName.ISO_A4); // 默认A4打印
// 获得打印设备 ,字节流方式,图片格式
PrintService pss[] = PrintServiceLookup.lookupPrintServices(dof,
pras);
// 如果没有获取打印机
if (pss.length == 0) {
System.out.println("未获取打印机!");
// 终止程序
return;
}
// 获取第一个打印机
PrintService ps = pss[0];
System.out.println("Printing image..........." + ps);
// 获得打印工作
DocPrintJob job = ps.createPrintJob();
// 设置打印内容
Doc doc = new SimpleDoc(fin, dof, null);
// 出现设置对话框
pras.add(new MediaPrintableArea(0,0,210,297,MediaPrintableArea.MM)); // 设置打印区域大小:此设置只能放在此处不能往前放
PrintService service = ServiceUI.printDialog(null, 50, 50, pss, ps,
dof, pras);
if (service != null) {
// 开始打印
job.print(doc, pras);
fin.close();
}
} catch (IOException ie) {
// 捕获io异常
ie.printStackTrace();
} catch (PrintException pe) {
// 捕获打印异常
pe.printStackTrace();
}
}
/**
* 主函数
*
* @param args
*
*/
public static void main(String args[]) {
PrintImage dp = new PrintImage();
dp.drawImage("D:/IMG00001.jpg");
}
}