springboot的java打印票據-4


java打印

經過前幾次的配置與解析,現在來說下java打印。java的api打印可以有字符串,畫線,圖片等。我們這里只用這兩種。

1.打印字符串與圖片

來看下打印類的結構。
avator
  這里在服務層初始化這個類。設置打印頁數,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。
    avator
    說到這里是打印文字,下面說打印圖片。 

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簡單打印字符串,打印二維碼、條形碼圖片完成。
展示一下條形碼:
avator
已經上傳gitee,可以自行下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM