转:Java生成带有二维码图片的word文档

(一)功能描述:在智能终端的系统中,对所有学员的信息要生成带有二维码图片的报到证与准考证的word文档

(二)实现过程:

1.创建报到证与准考证的word模板,在模板中填充相应的变量。

2.该模板中存在图片,所以在制作模板中应先在相应的位置放一张图片,调整好大小,起到站位的作用

1.创建报到证与准考证的word模板,在模板中填充相应的变量。

2.在该模板中存在图片,所以在制作模板中应先在相应的位置放一张图片,调整好大小,起到

3.将创建好的模板另存为.xml格式的文件

3.此时的.xml格式的文件在图片的位置就会出现base64位图片代码,将此代码删掉,换成相应的变量,保存

4.在项目中创建template.ftl,将xml中的代码粘贴过去。

4.在该功能中需要用到freemarker-2.3.13.jar架包

5.编写后台代码。

6.模板样式如下图所示:

word模板样式

(三)后台主要代码实现过程:

1.查询出报到证与准考证上所要展示的信息,将查询的图片调用工具类HandlImage里面的getImageStr方法,将图片转为base64码的代码,将查询到的数据放到list中,下面是部分代码:

List list=this.documentService.printProofByMid();//获取报到证与准考证的信息放到list中
 for(int i=0;i<list.size();i++){//通过遍历list,获取list中图片的路径
    User u=(User) list.get(i);
    User uu=new User();
   filePath=request.getRealPath("image2/" + u.getBak1() + "_" + u.getName() + ".png");//获取图片的路径
    uu.setName(u.getName());
    ..........//其他属性同样
    uu.setImage(HandlImage.getImageStr(filePath));//调用HandlImage中的getImageStr方法,将图片转为base64码
    addList.add(uu);//将对象添加到addList中
  }
Map<String,Object> map=new HashMap<String,Object>();
  if( addList.size()>0){ //对addList进行非空的判断
  map.put("TED", addList); //将addList放到map中
   DocExportUtils.downLoadDoc(request,map);//调用DocExportUtils下的downLoadDoc方法,生成word文档
  }

2.下面的方法就是生成word文档的方法,下面是此方法的全部代码:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class DocExportUtils {
 private Configuration configuration = null;
 public DocExportUtils() {
  configuration = new Configuration();
  configuration.setDefaultEncoding("utf-8");
 }
 public static void downLoadDoc(HttpServletRequest request,Map map){
  Configuration configuration = new Configuration();
  configuration.setDefaultEncoding("utf-8");
  configuration.setClassForTemplateLoading(DocExportUtils.class, "/com/ecoinfo/terminal/template");//红色部分存放freemarker模板的路径
  Template t=null;
  try {
   t = configuration.getTemplate("template.ftl");// //template.ftl为要装载的模板
  } catch (IOException e) {
   e.printStackTrace();
  }
  String name=(String)map.get("title");  //生成word文档的名称
  File outFile = new File(request.getRealPath("Word/" + name + ".doc"));// 输出文档路径
  Writer out = null;
  try {
    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
  } catch (FileNotFoundException e1) {
   e1.printStackTrace();
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
     try {
   t.process(map, out);
  } catch (TemplateException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

(四)在生成word中使用到的工具方法:

描述:在模板中存在图片,所以要将图片转为base64码的图片,只要将图片所存放的路径传到getImageStr中,通过下面方法就可以生成base64码的图片代码,下面就是转为base64码的工具方法的全部代码:

/**
 * 处理图片
 * HandlImage类,用来将图片转为base64码
 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import com.ecoinfo.commons.security.BASE64Encoder;
public class HandlImage{

 public static String getImageStr(String filepath){//filepath图片所存放的路径

  InputStream in =null;
  try {
   in=new FileInputStream(filepath);
  } catch (FileNotFoundException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
 if(!"".equals(in)&&in!=null){
  byte[]data=null;
   try{
   data=new byte[in.available()];
   in.read(data);
   in.close();
   }catch(IOException e){
    e.printStackTrace();}
   BASE64Encoder encoder=new BASE64Encoder();
   return encoder.encode(data);
 }else{
  return null;
 }
}

(五)注意事项:

1.在模板中,对于图片的list的循环,要将循环图片的位置的代码替换为变量的形式,否则,在word文档中出现的图片都是第一张图片,具体修改如下所示:

修改图片具体方法

2.在freemarker中有些特殊的字符是需要转义一下才可以实现,在下面列出需要转义字符的方法代码:

<#if ted.Name??>${((ted.Name?replace("&","&amp;"))?replace("<","&lt;"))?replace(">","&gt;")}</#if>

时间: 2024-12-25 14:41:38

转:Java生成带有二维码图片的word文档的相关文章

用CIFilter生成QRCode二维码图片

CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码. CIFilterEffect.h + CIFilterEffect.m // // CIFilterEffect.h // CIFilter // // Created by L.S. on 14-5-9. // Copyright (c) 2014年 L.S. All rights reserved. // #import <Foundation/Foundation.h> @interface CIFilterEffect :

Java使用ZXing生成/解析二维码图片

ZXing是一种开源的多格式1D/2D条形码图像处理库,在Java中的实现.重点是在手机上使用内置摄像头来扫描和解码设备上的条码,而不与服务器通信.然而,该项目也可以用于对桌面和服务器上的条形码进行编码和解码.目前支持这些格式: UPC-A and UPC-E EAN-8 and EAN-13 Code 39 Code 93 Code 128 ITF Codabar RSS-14 (all variants) RSS Expanded (most variants) QR Code Data M

Java生成微信二维码及logo二维码

依赖jar包 QrCode.jar:https://pan.baidu.com/s/1c1PYV0s 加入本地 maven: mvn install:install-file -Dfile=QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar 实例源码 import com.swetake.util.Qrcode; import javax.imageio.ImageIO; import jav

几行代码搞定java生成解析二维码功能

最近公司要求扫描二维码和生成二维码的功能.而群里部分网友也提到了.我这里就写了一个demo,和大家分享.代码很简介,希望大家能够喜欢. 网友表示在网上搜索了很多,发现不是代码不全,就是jar不匹配. 我这里共享了一个zxing的2.2版本的例子,也提供了下载地址.实现代码如下: package com.herman.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep

微信支付-无法识别qrcode生成的二维码图片

1.开始使用 table方式,但是还是无法识别二维码  http://www.cnblogs.com/staticed/p/8549316.html var code_url = data.code_url; $("#wechatQrcode").qrcode({ render: "table", //table方式 width: 200, //宽度 height:200, //高度 text: code_url //任意内容 }); 2.后来采用canvas方式,

Java生成条码二维码

一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https://github.com/zxing/zxing 二.barcode4j 关键代码: DataMatrixBean bean = new DataMatrixBean(); final int dpi = 800; String format = "image/png"; ByteArr

JAVA生成二维码图片代码

首先需要导入 QRCode.jar 包 下载地址看这里   http://pan.baidu.com/s/1o6qRFqM import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncoding

java--实现将文字生成二维码图片,并在中间附上logo,下方附上文字

前段时间因为工作需要,要实现将一段文字或者url生成二维码,然后中间附上logo,下方正中间附上文字的功能. 上网找了几篇教程学习了下,由于没有保存借鉴的博文链接,所以就没po上参考文章的链接啦,感谢几位博主的分享~ 大概的实现效果如下图所示: 实现步骤: (1)导入java_ZXing_jar包,点此下载jar包 (2)编写画二维码代码 1 package QRCode; 2 3 import com.google.zxing.common.BitMatrix; 4 import javax.

QrenCode : 命令行下生成二维码图片

对于二维码大家应该并不陌生,英文名为 2-dimensional bar code 或 QR Code,是一种用图形记载信息的技术,最常见的是应用在手机应用上.用户通过手机摄像头扫描二维码或输入二维码下面的号码.关键字即可实现快速手机上网,快速便捷地浏览网页.下载图文.音乐.视频等等. 在 Ubuntu / Linux 上,有一个名为 QrenCode 的命令行工具可以很容易帮我们生成二维码. # 安装: sudo apt-get install qrencode # 使用: qrencode