想利用java程序打印一些文件。做以下测试:

一、环境

要调用打印机输出文件,首先本地得有一个能正常使用的打印机。我电脑安装的是虚拟打印机。

二、java代码

一)、打印输出的实体类

import java.io.Serializable;
import java.util.Date;
/*** @Author: ykbian* @Date: 2018/10/24 9:22* @Todo: 打印的员工信息实体类*/
public class Persion implements Serializable {private static final long serialVersionUID = 1L;private String userName;        //姓名private String gender;          //性别private String nation;          // 民族private String address;        //住址private String IDNumber;        //身份证号码private int    age;            //启用日期private String qrCodePath;        //头像private Date   birthday;// 以下是get方法、set方法和两个构造函数,省略
}

二)、工具类及测试


/*** @Author: ykbian* @Date: 2018/10/24 9:24* @Todo: 打印的工具类*/
public class PrintUtil implements Printable {//    身份证:长度85.6毫米,宽度54毫米,厚度0.9毫米//待打印数据的条数,此变量需定义在数据集合之前private static int COUNT = 0;//待打印的文字数据private static List<Persion> STUDENT_LIST = getStudent();//日期格式private static SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");/***@Author:      ykbian*@date_time:   2018/10/24 13:41*@Description:  重写Printable 的print()方法*@param:      Graphic指明打印的图形环境*             PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点)*             pageIndex指明页号*/@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {Component c = null;//转换成Graphics2DGraphics2D g2 = (Graphics2D) graphics;//设置打印颜色为黑色g2.setColor(Color.BLACK);//打印起点坐标double x = pageFormat.getImageableX();double y = pageFormat.getImageableY();switch (pageIndex) {case 0://设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInputFont font = new Font("新宋体", Font.PLAIN, 20);//设置字体g2.setFont(font);float[] dash1 = {2.0f};//设置打印线的属性。//1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));//获取需要打印的图片,若是动态生成,直接传入绝对路径即可Image src = Toolkit.getDefaultToolkit().getImage(STUDENT_LIST.get(COUNT).getQrCodePath());System.out.println(STUDENT_LIST.get(COUNT).getQrCodePath());if (src == null) {System.out.println("没有找到图像");}// 图片的坐标(x,y)宽,高g2.drawImage(src,(int)120,(int)150,(int)136,(int)220,c);//标题,固定不变g2.drawString(STUDENT_LIST.get(COUNT).getTitle(), (float) 250, (float)100);//以下为动态的文字内容font = new Font("新宋体", Font.ROMAN_BASELINE, 15);g2.setFont(font);g2.drawString("姓名:" + STUDENT_LIST.get(COUNT).getUserName(), (float) 50, (float) 150);g2.drawString("性别:" + STUDENT_LIST.get(COUNT).getGender(), (float) 50, (float) 170);g2.drawString("民族:" + STUDENT_LIST.get(COUNT).getNation(), (float) 50, (float) 190);g2.drawString("住址:" + STUDENT_LIST.get(COUNT).getAddress(), (float) 50, (float) 210);g2.drawString("路径:" + STUDENT_LIST.get(COUNT).getQrCodePath(), (float) 50, (float) 230);g2.drawString("身份证号码:" + STUDENT_LIST.get(COUNT).getIDNumber(), (float) 50, (float) 250);g2.drawString("出生日期:" + FORMAT.format(STUDENT_LIST.get(COUNT).getBirthday()), (float) 50, (float) 280);return PAGE_EXISTS;default:return NO_SUCH_PAGE;}}/*** 封装测试数据** @return*/private static List<Persion> getStudent() {List<Persion> dtos = new ArrayList<>();dtos.add(new Persion("姜子牙", "男", "汉", "岐山县", "622222111111111111", 800, "E:\\test\\jzy.jpg", new Date(), "居民身份证"));dtos.add(new Persion("杨戬", "男", "汉", "岐山县", "622222111111111111", 800, "E:/test/jzy.jpg", new Date(), "居民身份证"));dtos.add(new Persion("哪吒", "男", "汉", "岐山县", "622222111111111111", 800, "E:/test/jzy.jpg", new Date(), "居民身份证"));dtos.add(new Persion("雷震子", "男", "汉", "岐山县", "622222111111111111", 800, "E:/test/jzy.jpg", new Date(), "居民身份证"));dtos.add(new Persion("哮天犬", "男", "汉", "岐山县", "622222111111111111", 800, "E:/test/jzy.jpg", new Date(), "居民身份证"));
//if (dtos.size() > 0) {COUNT = dtos.size() - 1;System.out.println("总共需打印" + (COUNT + 1) + "次");}return dtos;}public static void main(String[] args) {//    通俗理解就是书、文档Book book = new Book();//    设置成竖打()PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT);//    通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。Paper p = new Paper();//纸张大小p.setSize(1000, 618);// 页面可打印的区域大小(左上角定位,参数分别是x轴,y轴,宽度和长度)p.setImageableArea(15, 15, 800, 600);pf.setPaper(p);//    把 PageFormat 和 Printable 添加到书中,组成一个页面book.append(new PrintUtil(), pf);//获取打印服务对象PrinterJob job = PrinterJob.getPrinterJob();// 设置打印类job.setPageable(book);try {if (STUDENT_LIST.size() > 0) {for (int i = 0; i < STUDENT_LIST.size(); i++) {job.print();--COUNT;}}} catch (PrinterException e) {e.printStackTrace();}}
}

三、输出结果

运行程序,输出结果如下:

然而,还是存在一些问题,图片打印失败。不知道为什么… …

四、源码

源码在这里:https://github.com/bian1234/JAVAPrintTest

五、鸣谢

参考文章:

  1. https://blog.csdn.net/qq_38743494/article/details/79132722
  2. https://blog.csdn.net/postersxu/article/details/80705247
  3. https://www.cnblogs.com/gaopeng527/p/4357591.html

JAVA 调用打印机输出PDF文件相关推荐

  1. 【项目管理】Java使用pdfbox调用打印机打印PDF文件

    [项目管理]Java使用pdfbox调用打印机打印PDF文件 1.项目前言 2.项目实现 3.关键代码 4.效果演示 5.问题处理 5.1 安装对应字体 5.2 修改对应代码 系统:Win10 Jav ...

  2. java调用wkhtmltopdf生成pdf文件,美观,省事

    最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...

  3. Java调用打印机打印pdf

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

  4. 通过安装虚拟打印机输出PDF文件

    前两天,用FastReport输出pdf文件,在查资料时候,无意看到可通过安装一个虚拟的打印机,把任何支持打印的软件的输出,都输出为pdf文件.比如把word,excel...等等都可以转化成pdf文 ...

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

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

  6. java 调用打印机 打印pdf方案

    网上检索到的Java Printing Service方案 类似的方法的确会向打印机发送打印任务,但是打印机无反应不响应打印 //1.得到一个文件的输入流 FileInputStream fiStre ...

  7. java调用pdfbox转pdf文件为图片文件,有中文时在windows上正常,部署到linux下乱码

    最近遇到了一个很头疼的问题,我们的项目移动端需要一个读pdf的功能,但是手机端开发人员说移动端是用jquerymobile做的,不能直接甩pdf文件过去(原因是pdf文件太大),于是乎我们想到了2个解 ...

  8. java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo

    ## Java实现PDF生成并且打印pdf文件(附demo) #### 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现p ...

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

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

最新文章

  1. 机器学习漫谈:还有很长的路要走
  2. python类中成员的的调用
  3. Android自定义sleep图,android自定义view实现钟表效果
  4. 如何在 Web 发布规则中使用证书进行 SSL 身份验证
  5. 微信公众平台服务器 反馈,微信公众号开发之大坑
  6. C#中如何动态加载DockPanel
  7. 时序数据在滴滴实时数据开发平台中的处理和应用...
  8. Flutter获取packageName和versionCode
  9. python中哪些词是敏感字词_敏感词库(收集2017年最新最全敏感词) 2017 最新版
  10. IDC机房电信宽带光缆施工方案以及系统建设
  11. ansible常见模块
  12. js实现点击隐藏图片
  13. 编剧小记 — Contour
  14. L1正则化、L2正则化的多角度分析和概率角度的解释
  15. 自动气象站解决方案 案例分享
  16. [Unity3d]unity从入门到精通官方教程
  17. ue4html插件,【UE4插件Mirror】全球超千万Maya用户终于可以高质量实时渲染了
  18. SQL SERVER 数据库delete 未加where 条件数据误删恢复办法
  19. 用于反激和准谐振的同步整流器MST1692DS
  20. 【前端 VUE】VUE 微信网页扫码登录(微信)

热门文章

  1. 十一月简报 | Coinversation官网更新,CTO开放转账24小时交易量超过100万美金
  2. 中职计算机专业英语课件,计算机专业英语课件—unit 1.ppt
  3. c语言判断正整数位数 请用strengh,C语言程序设计-4、12章习题解答.doc
  4. 云计算机房管理,云计算在机房管理中的应用前景研究
  5. 计算机组成(超详细)+附带思维导图
  6. python数据分析报告范文_Python数据分析求解题
  7. 用友2008服务器密码怎么修改,用友服务器ip地址在哪里修改密码
  8. easyx游戏编程:魔塔(C++游戏开发)
  9. 五一假期选择哪款蓝牙耳机比较好?舒适度最好的蓝牙耳机推荐
  10. 混合选择集的坐标提起lisp_Autolisp函数