java定位打印,把打印内容打到指定的地方。
package com.centit.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; 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.MediaSizeName; import javax.swing.JOptionPane; import com.lowagie.text.pdf.BarcodePDF417; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * java定位打印,把打印内容打到指定的地方。 * * @author lyb */ public class CommonPrint implements Printable { private static final Logger logger = LoggerFactory.getLogger(CommonPrint.class); private int PAGES = 0; private String printStr; /* * Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位, * 1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号 */ public int print(Graphics gp, PageFormat pf, int page) throws PrinterException { Graphics2D g2 = (Graphics2D) gp; g2.setPaint(Color.black); // 设置打印颜色为黑色 if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束 { return Printable.NO_SUCH_PAGE; } g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界 Font font = new Font("宋体", Font.PLAIN, 24);// 创建字体 g2.setFont(font); // 打印当前页文本 int printFontCount = printStr.length();// 打印字数 int printFontSize = font.getSize();// Font 的磅值大小 int printX = 595 / 2; // 给定字符点阵,X页面正中 int printY = 842 / 2; // 给定字符点阵,Y页面正中 int printMX = printX - (printFontCount * printFontSize / 2);// 打印到正中间 int printMY = printY - printFontSize / 2;// 打印到正中间 g2.drawString(printStr, printMX, printMY); // 具体打印每一行文本,在指定位置 g2.drawString(printStr, printMX - printFontSize * printFontCount, printMY + printFontSize); // 具体打印每一行文本 g2.drawString(printStr, printMX + printFontSize * printFontCount, printMY + printFontSize); // 具体打印每一行文本 g2.drawString(printStr, printMX, printMY + printFontSize * 2); // 具体打印每一行文本 g2.drawString(printStr, printMX, printMY + printFontSize * 2); g2.drawString(printStr, printMX, printMY + printFontSize * 2); g2.drawString(printStr, printMX, printMY + printFontSize * 2); return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作 } // 打印内容到指定位置 public void printContent() { printStr = "打印测试内容";// 获取需要打印的目标文本 if (printStr != null && printStr.length() > 0) // 当打印内容不为空时 { PAGES = 1; // 获取打印总页数 // 指定打印输出格式 DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; // 设置打印属性 PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); // 设置纸张大小,也可以新建MediaSize类来自定义大小 pras.add(MediaSizeName.ISO_A4); DocAttributeSet das = new HashDocAttributeSet(); // 指定打印内容 Doc doc = new SimpleDoc(this, flavor, das); // 定位默认的打印服务 PrintService printService = null; printService = PrintServiceLookup.lookupPrintServices(flavor, pras)[0]; System.out.println(printService); // 创建打印作业 DocPrintJob job = printService.createPrintJob(); try { job.print(doc, pras); // 进行每一页的具体打印操作 } catch (PrintException pe) { logger.error(pe.getMessage()); } } else { // 如果打印内容为空时,提示用户打印将取消 JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE); } } // 打印内容到指定位置 public void printImage(String message) throws IOException { /* printStr = "打印测试内容";// 获取需要打印的目标文本 if (printStr != null && printStr.length() > 0) // 当打印内容不为空时 {*/ PAGES = 1; // 获取打印总页数 // 指定打印输出格式 DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG; // 设置打印属性 PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); // 设置纸张大小,也可以新建MediaSize类来自定义大小 pras.add(MediaSizeName.ISO_A4); DocAttributeSet das = new HashDocAttributeSet(); ByteArrayOutputStream outstream = new ByteArrayOutputStream(); BarcodePDF417 pdf = new BarcodePDF417(); pdf.setText(message.getBytes("GBK")); Image pdfImg = pdf.createAwtImage(Color.black, Color.white); BufferedImage img = new BufferedImage((int) pdfImg.getWidth(null), (int) pdfImg.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.drawImage(pdfImg, 0, 0, Color.white, null); ImageIO.write(img, "jpg", outstream); byte[] buf = outstream.toByteArray(); InputStream stream = new ByteArrayInputStream(buf); // 指定打印内容 Doc doc = new SimpleDoc(stream, flavor, das); // 定位默认的打印服务 PrintService printService = null; printService = PrintServiceLookup.lookupPrintServices(flavor, pras)[0]; System.out.println(printService); // 创建打印作业 DocPrintJob job = printService.createPrintJob(); try { job.print(doc, pras); // 进行每一页的具体打印操作 } catch (PrintException pe) { logger.error(pe.getMessage()); } /* } else { // 如果打印内容为空时,提示用户打印将取消 JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE); }*/ } public static void main(String message) throws IOException { CommonPrint lp = new CommonPrint(); lp.printImage(message); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界