怎样使用C-Lodopa插件打印本地图片(Java)

        首先,是接到了一个在web端打印图片的需求。因为我前端使用Jsp,网上查到jsp页面不能够直接引用本地文件夹中的文件。所以只能另寻他法。

        从C-Lodopa客服发的官方样例38了解到,C-Lodopa可以直接打印base64编码的图片,所以后端如下



@RequestMapping("/readImg")
@ResponseBody
public String readImg(HttpServletRequest request,HttpServletResponse response) throws IOException,ParseException {
     
        String jpgPath = "输入你的图片路径";
        byte[] data = null;
       //读取图片
       BufferedInputStream in = new BufferedInputStream(new FileInputStream(jpgPath));
       //字节流转图片对象
       Image bi =ImageIO.read(in);
       //获取图像的高度,宽度
       int height=bi.getHeight(null);
       int width =bi.getWidth(null);
       //构建图片流
       BufferedImage tag = new BufferedImage(width / 4, height / 4, 
       BufferedImage.TYPE_INT_RGB);
       //绘制改变尺寸后的图  
       tag.getGraphics().drawImage(bi, 0, 0,width / 4, height / 4, null);

       //转字节流
       ByteArrayOutputStream out = new ByteArrayOutputStream();

       ImageIO.write(tag, "jpg",out);
        //InputStream is = new ByteArrayInputStream(out.toByteArray());
        data = out.toByteArray();
        // 对字节数组Base64编码
		BASE64Encoder encoder = new BASE64Encoder();
		String img = encoder.encode(data).replaceAll("\r\n|\r|\n", "");
       
		return img;
    }

前端代码如下:

function printDraw(){
        
        var LODOP;
        LODOP = getLodop();
        LODOP.SET_PRINT_PAGESIZE(1,0,0,"A1");
    
        $.ajax({
                type: 'post',
                async: false,
                data: {},
                url: "${pageContext.request.contextPath}/F09/readImg",//方法路径
                success: function (data1) {
                    debugger
                     if (data1 != null) {
                         var a = data1.replace(/\"/g, '');
                               
              
             LODOP.ADD_PRINT_IMAGE("5mm","5mm","190mm","350mm","data:image/jpg;base64,"+a);
                    }
                }
       })
        LODOP.PREVIEW();
   }

上过代码之后,说一下我在编写此段代码中遇到的坑。

首先是在后台转换base64编码后,打印图片会报错

 

查看前台的base64编码

发现前台读取后竟然多了很多“\t\n”,于是在后台代码中添加了

String img = encoder.encode(data).replaceAll("\r\n|\r|\n", "");

本来想这样肯定可以打出图片来,但是按过打印按钮以后,发现虽然插件没报错,但是打印出来的还是一张白纸。

经过一些图片的替换后,原来是图片尺寸过大,无法完全显示。之后又加上以下代码:

      //获取图像的高度,宽度
       int height=bi.getHeight(null);
       int width =bi.getWidth(null);
       //构建图片流
       BufferedImage tag = new BufferedImage(width / 4, height / 4, 
       BufferedImage.TYPE_INT_RGB);
       //绘制改变尺寸后的图  
       tag.getGraphics().drawImage(bi, 0, 0,width / 4, height / 4, null);

 

将图片缩小。

这回终于可以正常的打印图片了!
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值