java打印
經過前幾次的配置與解析,現在來說下java打印。java的api打印可以有字符串,畫線,圖片等。我們這里只用這兩種。
1.打印字符串與圖片
來看下打印類的結構。
這里在服務層初始化這個類。設置打印頁數,xx.doPrint(類xx)。即可打印,他會執行兩次print方法。 在print方法中,參數
- 1.graphics - 用來繪制頁面的上下文,即打印的圖形;
- 2.pageFormat - 將繪制頁面的大小和方向,即設置打印格式,如頁面大小一點為計量單位(以1/72 英寸為單位,1英寸為25.4毫米。A4紙大致為595 × 842點);
- 3.pageIndex - 要繪制的頁面從 0 開始的索引 ,即頁號。
這里有兩個參數,NO_SUCH_PAGE:從 print 返回,表示 pageindex 太大以及請求的頁面不存在。 PAGE_EXISTS:pageindex 指定請求頁面從 0 開始的索引。如果請求的頁面不存在,那么此方法將返回 no_such_page;否則返回 page_exists。
說到這里是打印文字,下面說打印圖片。
2.打印圖片
- 1.首先引入谷歌的二維碼依賴
<!--gogle的Zxing生成二維碼-->
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
然后創建生成二維碼的工具類-QrCodeUtil。成員變量寬,高,內容。定義一個生成二維碼的字節數組方法,然后以流的方式輸出為圖片。
public byte[] createQRCode() throws WriterException, IOException {
// 二維碼基本參數設置
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置編碼字符集utf-8
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);// 設置糾錯等級L/M/Q/H,糾錯等級越高越不易識別,當前設置等級為最高等級H
hints.put(EncodeHintType.MARGIN, 0);// 可設置范圍為0-10,但僅四個變化0 1(2) 3(4 5 6) 7(8 9 10)
// 生成圖片類型為QRCode
BarcodeFormat format = BarcodeFormat.QR_CODE;
// 創建位矩陣對象
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, format, width, height, hints);
// 設置位矩陣轉圖片的參數
//MatrixToImageConfig config = new MatrixToImageConfig(Color.black.getRGB(), Color.white.getRGB());
// 位矩陣對象轉流對象
ByteArrayOutputStream os = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "png", os);
return os.toByteArray();
}
在printOrder中,獲取字節數組,生成圖片,然后java打印到紙上。
//先生成一個二維碼圖片
String strQRCode = printVo.getStrQRCode();
Integer qrcodeSize = printSettings.getQrcodeSize();
QrCodeUtil util = new QrCodeUtil(100,100,strQRCode);
String name = "";
String orderCode = printVo.getOrderCode();
try {
byte[] b = util.createQRCode();
name = printSettings.getBasePath()+orderCode+".png";
OutputStream os = new FileOutputStream(name);
os.write(b);
os.close();
}catch (Exception e){
logger.error("異常",e);
}
//把圖片畫到上
try {
File file=new File(name);
if(!file.exists()){
file.mkdir();
}
BufferedImage image = ImageIO.read(file);
x0 = data.get(1).getX();
y0 = data.get(1).getY();
g2.drawImage(image,x0,y0,qrcodeSize,qrcodeSize,null);
} catch (IOException e) {
logger.error("獲取二維碼圖像異常",e);
}
- 2.打印條形碼
引入依賴
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j-light</artifactId>
<version>2.0</version>
</dependency>
創建生成條形碼的工具類,還是用字節流輸出文件,不同的是 Code128Bean去描繪出條形碼。在PrintTmOrder里面,去獲取生成的文件,java畫到紙上。
//第三行,條形碼
String orderCode = printVo.getOrderCode();
String path = tmParameters.getPath();//參數路徑
BarcodeUtil.generateFile(orderCode,path);
//把圖片畫到上
try {
File file=new File(path);
if(!file.exists()){
file.mkdir();
}
BufferedImage image = ImageIO.read(file);
Integer x0 = tmParameters.getX();
Integer y0 = tmParameters.getY();
Integer width = tmParameters.getWidth();
Integer height = tmParameters.getHeight();
g2.drawImage(image,x0,y0,width,height,null);
} catch (IOException e) {
logger.error("獲取二維碼圖像異常",e);
}
到此,java簡單打印字符串,打印二維碼、條形碼圖片完成。
展示一下條形碼:
已經上傳gitee,可以自行下載。