获取打印机的名字:

// 获取打印机
public static List<String> findPrints() {List<String> list = new ArrayList<>();HashPrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;//查找所有的可用的打印服务PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);if (printService == null || printService.length == 0) {log.info("打印获取失败,未找到可用打印机,请检查。");}if (printService != null) {for (PrintService print : printService) {list.add(print.getName());}}return list;
}

PFD文件打印

  <!--打印--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.6</version></dependency>

代码:

需要获得打印机的名称

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;public class DYController {public static void main(String[] args) throws Exception {String pdfFile = "E:\\a.pdf";//文件路径File file = new File(pdfFile);String printerName = "HP MFP M436 PCL6";//打印机名包含字串PDFprint(file,printerName);}public static void PDFprint(File file , String printerName) throws Exception {PDDocument document = null;try {document = PDDocument.load(file);PrinterJob printJob = PrinterJob.getPrinterJob();printJob.setJobName(file.getName());if (printerName != null) {// 查找并设置打印机//获得本台电脑连接的所有打印机PrintService[] printServices = PrinterJob.lookupPrintServices();if(printServices == null || printServices.length == 0) {System.out.print("打印失败,未找到可用打印机,请检查。");return ;}PrintService printService = null;//匹配指定打印机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){printJob.setPrintService(printService);}else{System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。");return ;}}//设置纸张及缩放PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);//设置多页打印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);}finally {if (document != null) {try {document.close();} catch (IOException e) {e.printStackTrace();}}}}public static Paper getPaper() {Paper paper = new Paper();// 默认为A4纸张,对应像素宽和高分别为 595, 842int width = 595;int height = 842;// 设置边距,单位是像素,10mm边距,对应 28pxint marginLeft = 10;int marginRight = 0;int marginTop = 10;int marginBottom = 0;paper.setSize(width, height);// 下面一行代码,解决了打印内容为空的问题paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));return paper;}}

excel转换成pdf

生成excel请看下面的链接:

java导出Excel_Mr_Jin.的博客-CSDN博客_java导出excel方法https://blog.csdn.net/Java_Mr_Jin/article/details/124076055?spm=1001.2014.3001.5501

当然我们的excel要想打印可以转换成pdf的形式,再用上面的进行打印:

关于word转换pdf需要用到jaboc,所以在这需要先下载jaboc.jar包,链接及提取码如下:

链接: 链接: https://pan.baidu.com/s/17nLuDAYC33Yu8KvwS2J2gA

提取码: qwer

将jar包解压后

1.将Jacob.jar包复制到程序的jdk的lib文件夹下

2.将dll文件复制到jdk的bin目录下

然后在idea中引入jacob.jar包

<dependency><groupId>com.hynnet</groupId><artifactId>jacob</artifactId><version>1.18</version></dependency>

在java中进行实现excel转换成pdf:

package com.sangeng.controller;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;import java.io.File;public class DYPdfController {//word转化pdf,传入转换前的文件路径(例:"E:\\a.docx")和转换后的文件路径(例:"E:\\a.pdf")public static void main(String[] args) {String sFilePath = "D:\\java-demo\\zzzzz\\qqq.doc";//文件路径String toFilePath = "D:\\java-demo\\zzzzz\\qqq.pdf";wordToPDF(sFilePath,toFilePath);}public static void wordToPDF(String sFilePath,String toFilePath) {System.out.println("启动 Word...");long start = System.currentTimeMillis();ActiveXComponent app = null;Dispatch doc = null;try {app = new ActiveXComponent("Word.Application");app.setProperty("Visible", new Variant(false));Dispatch docs = app.getProperty("Documents").toDispatch();doc = Dispatch.call(docs, "Open", sFilePath).toDispatch();System.out.println("打开文档:" + sFilePath);System.out.println("转换文档到 PDF:" + toFilePath);File tofile = new File(toFilePath);if (tofile.exists()) {tofile.delete();}Dispatch.call(doc, "SaveAs", toFilePath,17);//17是pdf格式 // FileNamelong end = System.currentTimeMillis();System.out.println("转换完成..用时:" + (end - start) + "ms.");} catch (Exception e) {System.out.println("========Error:文档转换失败:" + e.getMessage());} finally {Dispatch.call(doc, "Close", false);System.out.println("关闭文档");if (app != null)app.invoke("Quit", new Variant[]{});}// 如果没有这句话,winword.exe进程将不会关闭ComThread.Release();}
}

当然转换打印完成后。记得删除生成的pdf文件:

                File file=new File(toFilePath);if(file.exists()&&file.isFile())file.delete();

直接excel进行打印

缺点:就是不能更改打印参数

package com.sangeng.controller;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;public class WordController {public static void main(String[] args) {String filePath = "E:\\a.docx";//文件路径String printerName = "HP MFP M436 PCL6";//打印机名包含字串printWord(filePath,printerName);}public static void printWord(String filePath, String printerName){
//        初始化线程ComThread.InitSTA();ActiveXComponent word = new ActiveXComponent("Word.Application");//设置打印机名称word.setProperty("ActivePrinter", new Variant(printerName));// 这里Visible是控制文档打开后是可见还是不可见,若是静默打印,那么第三个参数就设为false就好了Dispatch.put(word, "Visible", new Variant(false));// 获取文档属性Dispatch document = word.getProperty("Documents").toDispatch();// 打开激活文挡Dispatch doc=Dispatch.call(document, "Open", filePath).toDispatch();//Dispatch doc = Dispatch.invoke(document, "Open", Dispatch.Method,//  new Object[] { filePath }, new int[1]).toDispatch();try{Dispatch.callN(doc, "PrintOut");System.out.println("打印成功!");}catch (Exception e){e.printStackTrace();System.out.println("打印失败");}finally {try {if (doc != null) {Dispatch.call(doc, "Close", new Variant(0));//word文档关闭}} catch (Exception e2) {e2.printStackTrace();}//退出word.invoke("Quit", new Variant[0]);//释放资源ComThread.Release();ComThread.quitMainSTA();}}
}

导入C盘失效

文件不能直接导入c盘,因为权限问题。所以先创建一个文件夹,再导入即可

 File dir=new File("C:\\nmgbzj");File file2=new File(dir.getPath()+"/");if(!dir.exists()){dir.mkdir();file2.createNewFile();}else{if(file2.exists()){file2.delete();file2.createNewFile();}else{file2.createNewFile();}}

java链接打印机打印文件相关推荐

  1. Java调用打印机打印(远程、本地皆可用)

    Java调用打印机打印(远程.本地皆可用) 背景 准备 MAVEN环境 步骤 获取PrinterJob 设置PrinterJob纸张样式 打印PDF 背景 开发个Java项目需要远程调用共享打印机打印 ...

  2. Java调用打印机读写文件

    最近跟着项目组在做项目,分到了打印机这个任务,顺便记录一下. 首先本地最好安装一下打印机的驱动,然后连上打印机开始测试! Java调用打印机打印图片,文本都是很简单的,如下代码: /*** 通过 IP ...

  3. C# 调用打印机打印文件

    C# 调用打印机打印文件,通常情况下,例如Word.Excel.PDF等可以使用一些对应的组件进行打印,另一个通用的方式是直接启用一个打印的进程进行打印.示例代码如下: using System.Di ...

  4. 远程计算机打印,win7系统电脑如何远程连接打印机打印文件

    打印机设备是办公不可缺少一部分,将有需要的文件打印出来,是很简单一件事情.如果打印机不是连着自己电脑的,这时通常的做法是拿着U盘拷贝到连接打印机的电脑上进行打印,这个方法比较麻烦.其实还有一种很便捷的 ...

  5. 打印机出现另存为xps_win7系统打印机打印文件弹出另存为xps/pdf的解决方法

    打印机设备对大家办公还是有一定帮助的,有时候我们在时候打印机设备时会碰到一些奇怪的问题.比如win7旗舰版系统打印的时候弹出另存为xps/pdf的窗口,无论我们怎么操作都打印不了,关闭重启之后还是一样 ...

  6. 打印机用计算机名慢,打印机打印文件特别慢怎么办_打印机打印文件特别慢如何解决-系统城...

    平时办公的时候经常会使用打印机打印方案.记录等文件,打印机已成为日常办公中必不可少的设备之一.打印机使用时间长了,难免出现一些小问题,比如打印机打印文件特别慢,每次打印要等待好几分钟,拖慢办公效率,那 ...

  7. vb.net 如何文件指定打印机打印文件_使用Dropbox文件请求配合Canon Inkjet实现多用户文件打印...

    由于旧的Xerox Phasor 3020激光打印机的硒鼓多次出现问题,再加上对于个人文件彩印以及扫描的需求日益增加,我终于在今年四月剁手购买了佳能MG3680多功能一体机,实现了对于复印打印扫描的全 ...

  8. Java连接打印机打印二维码

    首先导入依赖 implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1' 1 ...

  9. Java调用打印机打印PDF文档的两种方法

    最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能.以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法. 1.Java Print Servi ...

  10. Java调用打印机打印pdf

    要在Java中调用打印机打印PDF,可以使用Java打印API和第三方库,如Apache PDFBox或iText PDF. 以下是使用Java打印API打印PDF的基本步骤: 安装打印机:确保您已经 ...

最新文章

  1. 华为机考HJ8合并表记录
  2. “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
  3. Io 异常: The Network Adapter could not establish the connection解决方案
  4. 【Thinkphp 5】 整合邮箱类 phpmailer实现邮件发送
  5. Uboot启动全过程
  6. 模板:割点、桥与双连通
  7. JavaScript:利用StringBuffer类提升+=拼接字符串效率
  8. 手写一些js方法收集:
  9. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
  10. win7上安装mysql数据库_mysql-windows系统安装mysql数据库
  11. java数组元素的默认值_数组元素默认的初始值都是什么?
  12. 学习笔记(2):Google开发专家带你入门神经网络-深度学习“四件套”:数据、模型、损失函数与优化器
  13. dirent struct_dirent和DIR 结构体 --- 表示文件夹中目录内容信息
  14. MKV文件提取dts音频转化成ac3
  15. java 412_http 412问题
  16. 豆瓣top250html源码,用23行代码爬取豆瓣音乐top250
  17. 输入框input或内容区域textarea中关于光标移动问题
  18. Springboot+vue项目火车订票管理系统
  19. 成都Uber优步司机奖励政策(3月8日)
  20. Rk3399 Android 7.1 使用 git 管理代码之后编译不通过

热门文章

  1. ssh 整合TOMCAT启动遇到错误
  2. 信息隐藏基础算法——LSB算法(python实现)
  3. word公式编辑器复制粘贴未响应_word公式编辑器常见问题汇总,附带解决方法
  4. PowerApps中应用如何显示用户详细信息
  5. 怎么白嫖一部好手机?我来告诉你
  6. 我的 Serverless 实战 — Serverless 腾讯云文字识别(OCR)详细部署过程
  7. 称呼大全,亲戚称呼,祖宗十八代的称呼!
  8. 微信公众号迁移流程和公众号迁移公证书办理步骤
  9. 一文学会如何使用工厂模式
  10. LeetCode 520. Detect Capital