java通过图片模版来对执业证和相关证件进行打印(指定位置输出文字)

       最近公司有个需求,需要对执业证和相关证件进行打印,在证件的指定位置输出文字信息,因为在做的时候发现这类资料非常少,然后只能自己研究,整理了一个可行的打印方案,已经在项目中测试通过,应该适合所有需要这类指定位置输出文字打印到证照上

打印方案思路: 使用空白图片模版使用java来定位需要的数据添加到模版图片中生成新图片返回web前端中,使用jquery打印插件jQuery.print.js来进行页面的局部图片打印

 

示例代码:

/**
     * 给jpg添加文字
     *
     * @param filePath    路径
     * @param imgDataList 添加内容
     * @param rotate      偏移量
     * @param x           偏移量x
     * @param y           偏移量y
     * @return
     */
    public static byte[] createStringMark(URL filePath, List<ImgData> imgDataList, int rotate, int x, int y) {
        ImageIcon imgIcon = new ImageIcon(filePath);
        Image theImg = imgIcon.getImage();
        int width = theImg.getWidth(null) == -1 ? 595 : theImg.getWidth(null);
        int height = theImg.getHeight(null) == -1 ? 841 : theImg.getHeight(null);
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        Graphics2D graphics = image.createGraphics();
        graphics.setColor(Color.black);
        graphics.setBackground(Color.black);
        graphics.drawImage(theImg, 0, 0, null);
        // 设置按照xy坐标旋转90度
        graphics.rotate(Math.toRadians(rotate), x, y);
        for (ImgData imgData : imgDataList) {
            // 字体设置,字体、字型、字号
            graphics.setFont(imgData.getFont());
            // 画文字
            graphics.drawString(imgData.getTextStr(), imgData.getX(), imgData.getY());
        }
        graphics.dispose();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            ImageIO.write(image, "jpg", outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return outputStream.toByteArray();
    }
package com.zjsft.openapi.web.form;

import lombok.Data;

import java.awt.*;

/**
 * @author hs
 * @Description: {封装jpg需要的参数}
 * @date 2019/8/2 13:40
 */
@Data
public class ImgData {
    /**
     * 图片中添加内容
     */
    private String textStr;
    /**
     * 字体设置,字体、字型、字号
     */
    private Font font;
    /**
     * 坐标
     */
    private Integer x;
    private Integer y;
}
/**
     * 执业证号第一步生成预览图返回图片url给页面
     *
     * @param orgBaseVo
     * @return
     */
    @ResponseBody
    @RequestMapping("/orgPrintJustNextStep")
    public ResultVO orgPrintJustNextStep(Param param) {
        List<ImgData> imgDataList = new ArrayList<>();
        ImgData imgData = new ImgData();
        imgData.setTextStr(param.getLicense());
        imgData.setFont(new Font("宋体", Font.BOLD, 24));
        imgData.setX(770);
        imgData.setY(-382);
        imgDataList.add(imgData);

        ImgData imgData1 = new ImgData();
        imgData1.setTextStr(param.cnName);
        imgData1.setFont(new Font("宋体", Font.BOLD, 24));
        imgData1.setX(300);
        imgData1.setY(-280);
        imgDataList.add(imgData1);

        ImgData imgData2 = new ImgData();
        imgData2.setTextStr(param.getCertificateOrg());
        imgData2.setFont(new Font("宋体", Font.BOLD, 24));
        imgData2.setX(730);
        imgData2.setY(-15);
        imgDataList.add(imgData2);

        ImgData imgData3 = new ImgData();
        imgData3.setTextStr(param.getPrintCertificateData());
        imgData3.setFont(new Font("宋体", Font.BOLD, 24));
        imgData3.setX(770);
        imgData3.setY(30);
        imgDataList.add(imgData3);

        ImgData imgData4 = new ImgData();
        imgData4.setTextStr(param.getPrintCertificateData());
        imgData4.setFont(new Font("宋体", Font.BOLD, 24));
        imgData4.setX(870);
        imgData4.setY(30);
        imgDataList.add(imgData4);

        ImgData imgData5 = new ImgData();
        imgData5.setTextStr(param.getPrintCertificateData());
        imgData5.setFont(new Font("宋体", Font.BOLD, 24));
        imgData5.setX(950);
        imgData5.setY(30);
        imgDataList.add(imgData5);
        try {
            URL url = new URL("https://127.0.0.1:8080/resource/test.jpg");
            byte[] bytes = ImageEditUtil.createStringMark(url, imgDataList, 90, 100, 100);
            return ImageEditUtil.upload(bytes);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return ResultVO.failure("服务器异常,请稍后再试");
    }

返回图片url到页面上就可以使用局部打印调用浏览器的打印功能来进行打印了

jQuery.print('返回图片div的id') 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值