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
*
*/
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;
}
}