package com.paic.printFile;
import java.io.File;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.swing.JFileChooser;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.swing.JFileChooser;
/**
* 建立与打印机的连接
* @author Administrator
*
*/
* 建立与打印机的连接
* @author Administrator
*
*/
public class PrintFileTest {
public static void main(String[] args) {
JFileChooser fileChooser = new JFileChooser(); //创建打印作业
int state = fileChooser.showOpenDialog(null);
if(state == fileChooser.APPROVE_OPTION){
File file = new File("F:\\Java\\jre1.8\\README.txt"); //获取选择的文件
//构建打印请求属性集
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//查找所有的可用的打印服务
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
//定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//显示打印对话框
PrintService service = ServiceUI.printDialog(null, 200, 200, printService,
defaultService, flavor, pras);
if(service != null){
try {
DocPrintJob job = service.createPrintJob(); //创建打印作业
FileInputStream fis = new FileInputStream(file); //构造待打印的文件流
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
JFileChooser fileChooser = new JFileChooser(); //创建打印作业
int state = fileChooser.showOpenDialog(null);
if(state == fileChooser.APPROVE_OPTION){
File file = new File("F:\\Java\\jre1.8\\README.txt"); //获取选择的文件
//构建打印请求属性集
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//查找所有的可用的打印服务
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
//定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//显示打印对话框
PrintService service = ServiceUI.printDialog(null, 200, 200, printService,
defaultService, flavor, pras);
if(service != null){
try {
DocPrintJob job = service.createPrintJob(); //创建打印作业
FileInputStream fis = new FileInputStream(file); //构造待打印的文件流
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
调用打印机打印pdf等文件,支持打印份数,双面打印
import java.awt.print.PrinterException;import java.awt.print.PrinterJob;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Sides;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.printing.PDFPageable;
import com.gehouse.smartdevice.config.Global;
/**
* 调用打印机打印文件
* @author 寇航艇
*
*/
public class PrintFile {
/**
* 调用打印机进行打印(打印pdf的打印参数没起作用)
* @param printFilePath 打印文件路径
* @param printFilePath 打印参数
*/
public void print(String printFilePath, Map<Object, Object> map) {
try {
// 构建打印请求属性集
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置打印格式,因为未确定文件类型,这里选择AUTOSENSE
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// 查找所有的可用打印服务
// [发送至 OneNote 2013, NPI82AACC (HP LaserJet M1536dnf MFP), Microsoft XPS Document Writer, Fax, CutePDF Writer]
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
// 定位默认的打印服务
PrintService defaultService = null;
// 获取打印机
String printer = (String)map.get("printer");
// 判断打印机是否为空
if (StringUtils.isBlank(printer)) {
// 获取默认配置文件打印机
printer = Global.getPrinterA4();
}
for (int i = 0; i < printService.length; i++) {
if (printService[i].getName().contains(printer)) {
defaultService = printService[i];
break;
}
}
if (defaultService != null) {
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
// 创建打印作业
DocPrintJob job = defaultService.createPrintJob();
// 构造待打印的文件流
FileInputStream fis = new FileInputStream(printFilePath);
DocAttributeSet das = new HashDocAttributeSet();
// 建立打印文件格式
Doc doc = new SimpleDoc(fis, flavor, das);
//A4纸张
//attr.add(MediaSize.A4);
// 打印份数
if (map.get("Copies") != null) {
attr.add(new Copies((int) map.get("Copies")));
}
//双面打印
//attr.add(Sides.DUPLEX);
if (map.get("duplex") != null) {
if ((boolean)map.get("duplex")) {
attr.add(Sides.DUPLEX);
}
} else {
attr.add(Sides.DUPLEX);
}
// 进行文件的打印
job.print(doc, attr);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (PrintException e) {
e.printStackTrace();
}
}
/**
* 调用打印机,设置打印份数,打印起始位置结束位置,双面打印
* Prints using custom PrintRequestAttribute values.
*/
public void printWithAttributes(String printFilePath, Map<Object, Object> map) {
try {
PrinterJob job = PrinterJob.getPrinterJob();
PDDocument document = PDDocument.load(new File(printFilePath));
<span style="white-space:pre;"> </span>job.setPageable(new PDFPageable(document));
// 构建打印请求属性集
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置打印格式,因为未确定文件类型,这里选择AUTOSENSE
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// 查找所有的可用打印服务
// [发送至 OneNote 2013, NPI82AACC (HP LaserJet M1536dnf MFP), Microsoft XPS Document Writer, Fax, CutePDF Writer]
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
// 定位默认的打印服务
PrintService defaultService = null;
// 获取打印机
String printer = (String)map.get("printer");
// 判断打印机是否为空
if (StringUtils.isBlank(printer)) {
// 获取默认配置文件打印机
printer = Global.getPrinterA4();
}
for (int i = 0; i < printService.length; i++) {
if (printService[i].getName().contains(printer)) {
defaultService = printService[i];
break;
}
}
if (defaultService != null) {
// 设置打印机
job.setPrintService(defaultService);
// 设置打印机属性
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
// 打印范围,第几页到第几页
// attr.add(new PageRanges(1, 1));
// 打印份数
// attr.add(new Copies(1));
if (map.get("Copies") != null) {
attr.add(new Copies((int) map.get("Copies")));
}
// 纸张大小
// attr.add(MediaSize.ISO.A4);
// 双面打印
if (map.get("duplex") != null) {
if ((boolean)map.get("duplex")) {
attr.add(Sides.DUPLEX);
}
} else {
attr.add(Sides.DUPLEX);
}
job.print(attr);
document.close();
}
} catch (NullPointerException e) {
e.printStackTrace();
} catch (InvalidPasswordException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (PrinterException e) {
e.printStackTrace();
}
}
/**
* 获取打印参数
* @param request
* @return
*/
public Map<Object, Object> getPrintParams(HttpServletRequest request) {
// 文件已生成则根据文件路径打印文件
Map<Object, Object> map = new HashMap<Object, Object>();
// 获取所请求的打印机
String printer = request.getParameter("printer");
if (printer != null && !"".equals(printer)) {
map.put("printer", printer);
}
// 获取打印份数
String pages = request.getParameter("printPages");
if (pages != null && !"".equals(pages)) {
map.put("Copies", Integer.valueOf(pages));
}
// 获取双面打印
String Sides = request.getParameter("printSides");
if (Sides != null && !"".equals(Sides)) {
map.put("Sides", Integer.getInteger(Sides));
}
return map;
}
}