天天看點

Java 利用Graphics類繪制票據

pom.xml

<!--Google Zxing 條碼生成-->
<dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>core</artifactId>
   <version>3.0.0</version>
</dependency>
<dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>javase</artifactId>
   <version>3.0.0</version>
</dependency>
           

代碼:

package com.christian.admin.util;

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @program: christian
 * @Date: 2019/7/11 9:33
 * @Author: rui
 * @Description:
 */
public class PrintTest {

    public static void main(String[] args) {
        String str = "府過山逢都";
        String barCode = "201408210001";
        String dateStr = "2014/08/25 23:59:59";
        String name = "Christopher Adam Hernandez";
        String visitorCompany = "CHINA Chengdu";
        String employeeName = "SDFEE2101903162037430";

        int zoom = 6;
        BufferedImage resultImage = null;
        BufferedImage bufferedImage = new BufferedImage(216 * zoom, 144 * zoom, BufferedImage.TYPE_INT_RGB);
        Graphics g = bufferedImage.getGraphics();
//        g.draw3DRect(0, 0, 216, 144, true);
        //将文字,邊框或要填充的區域為指定顔色
        g.setColor(Color.WHITE);
        //用預先指定的顔色填充矩形
        g.fillRect(0, 0, 216 * zoom, 144 * zoom);
        g.setColor(Color.BLACK);

//        Image image;
        try {
//            image = ImageIO.read(PrintTest.class.getClassLoader().getResource("logo.bmp").openStream());
//            if (image != null) {
//                g.drawImage(image, 6 * zoom, 6 * zoom, 60 * zoom, 24 * zoom, null);
//            }
            g.setFont(new Font("宋體", Font.BOLD, 14 * zoom));
            //字元串寬度
            int strWidth = g.getFontMetrics().stringWidth(str);
            //中心點x位置
            int centerx = bufferedImage.getWidth() / 2;
            g.drawString(str, centerx  - strWidth / 2, 24 * zoom);

            g.setFont(new Font("宋體", Font.BOLD, 10 * zoom));
            g.drawString("name:", 10 * zoom, 42 * zoom);
            g.drawString("monument:", 10 * zoom, 63 * zoom);
            g.drawString("history:", 10 * zoom, 80 * zoom);
            g.drawString("編号:", 10 * zoom, 97 * zoom);

            g.setFont(new Font("宋體", Font.PLAIN, 8 * zoom));

            g.drawString(name, 75 * zoom, 42 * zoom);
            g.drawString(dateStr, 75 * zoom, 63 * zoom);
            g.drawString(visitorCompany, 75 * zoom, 80 * zoom);
            g.drawString(employeeName, 75 * zoom, 97 * zoom);

            g.drawImage(encodeBarcode(barCode,300, 300), 40 * zoom, 112 * zoom, 152 * zoom, 30 * zoom, null);
//            g.drawString("DF123435657", 92 * zoom, 97 * zoom);
            g.dispose();

            //資産編号


            resultImage = bufferedImage;//rotate(bufferedImage, 360);
            // encode: com.sun.image.codec.jpeg
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File("D:\\test.jpg")));
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(resultImage);
            param.setQuality(1.0f, false);
            encoder.setJPEGEncodeParam(param);
            try {
                encoder.encode(resultImage);
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        //
//    print(resultImage);

    }

    /**
     * 生成條形碼
     * @param contents 條形碼内容
     * @param width 條形碼寬度
     * @param height 條形碼高度
     * @return
     */
    public static BufferedImage encodeBarcode(String contents, int width, int height){
        int codeWidth = 3 + // start guard
                (7 * 6) + // left bars
                5 + // middle guard
                (7 * 6) + // right bars
                3; // end guard
        codeWidth = Math.max(codeWidth, width);
        BufferedImage barcode = null;
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.CODE_128, codeWidth, height, null);
            barcode= MatrixToImageWriter.toBufferedImage(bitMatrix);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return barcode;

    }

    /**
     * 解析讀取條形碼
     * @param barcodePath 條形碼檔案路徑
     * @return
     */
    public static String decodeBarcode(String barcodePath){
        BufferedImage image;
        Result result = null;
        try {
            image = ImageIO.read(new File(barcodePath));
            if (image != null) {
                LuminanceSource source = new BufferedImageLuminanceSource(image);
                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
                result = new MultiFormatReader().decode(bitmap, null);
            }
            return result.getText();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
           
Java 利用Graphics類繪制票據