62,614
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] args) {
JFileChooser fileChooser = new JFileChooser("F://"); // 创建打印作业
int state = fileChooser.showOpenDialog(null);
if (state == fileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile(); // 获取选择的文件
// 构建打印请求属性集
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// 查找所有的可用的打印服务
PrintService printService[] = PrintServiceLookup
.lookupPrintServices(flavor, pras);
System.out.println(printService.length);
// 定位默认的打印服务
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); // 构造待打印的文件流
System.out.println(file.getName());
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis, flavor, das);
System.out.println(doc.getAttributes());
try {
job.print(doc, pras); // 进行每一页的具体打印操作
} catch (PrintException pe) {
pe.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
// 如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog(null,
"Sorry, Printer Job is Empty, Print Cancelled!",
"Empty", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
}
}
解决了吗解决了联系我 我或者我联系你
PDDocument document = null;
try {
document = PDDocument.load(file);
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setJobName("快递面单打印");
PrintService printService=PrintServiceLookup
.lookupDefaultPrintService();
if(printService!=null){
printJob.setPrintService(printService);
}else{
System.out.print("打印失败,未找到默认打印机,请检查。");
return ;
}
// }
//设置纸张及缩放
PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.SCALE_TO_FIT);
//设置多页打印
Book book = new Book();
PageFormat pageFormat = new PageFormat();
//设置打印方向
pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向
pageFormat.setPaper(getPaper());//设置纸张
book.append(pdfPrintable, pageFormat, document.getNumberOfPages());
printJob.setPageable(book);
printJob.setCopies(1);//设置打印份数
//添加打印属性
HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();
//pars.add(Sides.DUPLEX); //设置单双页
printJob.print(pars);
public static Paper getPaper() {
Paper paper = new Paper();
// 默认为A4纸张,对应像素宽和高分别为 595, 842
int width = 284;
int height = 567;
// 设置边距,单位是像素,10mm边距,对应 28px
int marginLeft = 5;
int marginRight = 0;
int marginTop = 5;
int marginBottom = 0;
paper.setSize(width, height);
// 下面一行代码,解决了打印内容为空的问题
paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
return paper;
}