java 打印

本博客主要实现图片指定位置插入文字,然后使用默认打印机实现打印功能

引入的类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;

方法如下
public static void print(){
		try{
			DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
			//获取系统所有打印设备
			PrintService[] printers = PrintServiceLookup.lookupPrintServices(
					flavor, null);
			for (int i = 0; i < printers.length; i++)
				System.out.println(printers[i].getName());
			//获取第一个默认打印设备
			PrintService printer = printers[0];
	            
			DocPrintJob job = printer.createPrintJob();
                        //图片路径
                       String filePath = Thread.currentThread().getContextClassLoader().getResource("Image_00008.jpg").getPath();
			BufferedImage img =ImageIO.read(new File(filePath));
			Graphics g1 = img.getGraphics();
			Graphics g2 = img.getGraphics();
			Graphics g3 = img.getGraphics();
			Graphics g4 = img.getGraphics();
			Graphics g5 = img.getGraphics();
			Graphics g6 = img.getGraphics();
			Graphics g7 = img.getGraphics();
			Graphics g8 = img.getGraphics();
			g1.setColor(Color.BLACK);	//字体设为黑色
			g2.setColor(Color.BLACK);
			g3.setColor(Color.BLACK);
			g4.setColor(Color.BLACK);
			g5.setColor(Color.BLACK);
			g6.setColor(Color.BLACK);
			g7.setColor(Color.BLACK);
			g8.setColor(Color.BLACK);
			
                        //指定位置插入文字
			/*((Graphics2D) g1).rotate(-(3.1415926/2),105,781);  //逆时针选中90度相同坐标的文字
			g1.drawString("罗兵逊", 105, 781);
			
			((Graphics2D) g2).rotate(-(3.1415926/2),105 ,618);
			g2.drawString("12345677890", 105, 618);
			
			((Graphics2D) g3).rotate(-(3.1415926/2),135 ,775);
			g3.drawString("圣安东尼奥马刺GDP",135 , 775);
			
			((Graphics2D) g4).rotate(-(3.1415926/2),153 ,793);
			g4.drawString("北京市东花市北里20号楼6单元501室", 153, 793);*/
			
			((Graphics2D) g5).rotate(-(3.1415926/2),229 ,784);
			g5.drawString("大卫·罗兵逊", 229, 784);
			
			((Graphics2D) g6).rotate(-(3.1415926/2),229 ,622);
			g6.drawString("78945612301", 229, 622);
			
			/*((Graphics2D) g7).rotate(-(3.1415926/2),257 ,770);
			g7.drawString("俄克拉荷马雷霆杜兰特", 257, 770);*/
			
			((Graphics2D) g8).rotate(-(3.1415926/2),278 ,784);
			g8.drawString("虹口区西康南路125弄34号201室 ", 278, 784);
			
			ByteArrayOutputStream outstream = new ByteArrayOutputStream();
			ImageIO.write(img, "gif", outstream);
			byte[] buf = outstream.toByteArray();
			InputStream stream = new ByteArrayInputStream(buf);
			Doc doc = new SimpleDoc(stream, flavor, null);
			System.out.println(doc);
			// print
			for(int i=0; i<1; i++){
			    job.print(doc, null);
			}
			System.out.println("打印结束");
		}catch(Exception e){
			e.printStackTrace();
		}
	}


### 如何在 Java 中执行打印操作 #### 使用 `System.out` 进行基本打印 最简单的方式是在 Java 中使用 `System.out.println()` 或者 `System.out.print()` 来输出信息到控制台。前者会在每条消息之后自动换行,而后者则不会。 ```java // 打印并换行 System.out.println("Hello, world!"); // 不换行地连续打印多个项目 System.out.print("First item "); System.out.print("Second item"); ``` #### 利用 `Arrays.toString()` 对于数组类型的变量,可以借助于 `java.util.Arrays` 类中的静态方法来简化其内容的显示过程[^1]: ```java import java.util.Arrays; public class PrintArrayExample { public static void main(String[] args) { int[] numbers = {1, 2, 3}; System.out.println(Arrays.toString(numbers)); } } ``` #### 结合 Lambda 表达式的高级打印方式 自 Java 8 起引入了 lambda 表达式这一特性,允许更简洁地编写某些特定场景下的代码逻辑。下面展示了如何利用它来进行数据处理的同时完成打印工作[^2]: ```java import java.util.function.Consumer; import java.util.stream.IntStream; public class LambdaPrintExample { public static void main(String[] args) { Consumer<Integer> printer = (Integer x) -> System.out.println(x); IntStream.range(0, 5).forEach(printer::accept); } } ``` 上述例子中创建了一个消费者接口实例用于接收整数参数并通过调用 `println` 方法将其输出;接着通过流 API 的范围生成器配合 foreach 循环实现了对一系列数值的一次性遍历与展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值