freemarker模板操作excel或word

这篇具有很好参考价值的文章主要介绍了freemarker模板操作excel或word。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

freemarker模板操作excel或word,java进阶综合提升,java
freemarker模板操作excel或word,java进阶综合提升,java

<Worksheet ss:Name="Sheet1">
	<Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="2" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
		<Row ss:Height="40">
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">A</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">B</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">C</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">D</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">E</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">F</Data>
			</Cell>
			<Cell ss:StyleID="s50">
				<Data ss:Type="String">G</Data>
			</Cell>
		</Row>
		<#list list as test>
		<Row>
			<Cell>
				<Data ss:Type="String">${(test.a)!}</Data>
			</Cell>
			<Cell>
				<Data ss:Type="String">${test.b}</Data>
			</Cell>
			<Cell>
				<Data ss:Type="String">${test.c}</Data>
			</Cell>
			<Cell>
				<Data ss:Type="String">${test.d}</Data>
			</Cell>
			<Cell>
				<#if test.e??><Data ss:Type="String">${test.e?string("yyyy-MM-dd")}</Data></#if>
			</Cell>
		    <Cell>
		        <#if test.certType??>
		            <#switch test.certType> 
		                <#case "A"> 
		                    <Data ss:Type="String">■身份证 </Data>
		                <#break> 
		                <#case "B"> 
		                    <Data ss:Type="String">■外籍护照</Data>
		                <#break> 
		                <#case "C"> 
		                    <Data ss:Type="String"> ■港澳居民来往内地通行证</Data>
		                <#break> 
		                <#default> 
		            </#switch>
		            <#else>
		                <Data ss:Type="String">□身份证 □外籍护照 □港澳居民来往内地通行证</Data>
		        </#if>
		    </Cell>
		    <Cell>
				<Data ss:Type="String">${test_index+1}</Data>
			</Cell>
		</Row>
	    </#list>
	</Table>
</Worksheet>
</Workbook>
/**
* 解析模板生成Excel
* @param templateDir  模板目录
* @param templateName 模板名称
* @param excelPath 生成的Excel文件路径
* @param data 数据参数
* @throws IOException
* @throws TemplateException
*/
public static void parse(String templateDir, String templateName, String excelPath, Map<String,Object> data) throws IOException, TemplateException {
   //初始化工作
   Configuration cfg = new Configuration();
   //设置默认编码格式为UTF-8
   cfg.setDefaultEncoding("UTF-8");
   //全局数字格式
   //cfg.setNumberFormat("0.00");
   //设置模板文件位置
   //cfg.setDirectoryForTemplateLoading(new File(templateDir));//目录设置方式
   cfg.setTemplateLoader(new ClassTemplateLoader(EmlsrApplication.class.getClass(),"/"));
   cfg.setObjectWrapper(new DefaultObjectWrapper());
   //加载模板
   Template template = cfg.getTemplate(templateName,"utf-8");
   //OutputStreamWriter writer = null;
   Writer writer = null;
   try{
       //填充数据至Excel
       //response.setContentType("application/msword; charset=UTF-8");// application/x-download
       //response.setHeader("Content-Disposition", "attachment; "
       //+ encodeFileName(request, fileName+".doc"));
       //OutputStream outputStream = response.getOutputStream();
       //Writer out=new OutputStreamWriter(outputStream);
       writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(excelPath),"UTF-8"));
       template.process(data, writer);//下载流换成template.process(data, out);
       writer.flush();
   }finally{
       if (writer!=null) {
           writer.close();
       }
   }
}

//excel->xml->ftl
@Test
public void xls001() throws IOException {
    List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();
    for(int i = 0 ; i < 2;i ++){
    	Map<String, Object> user = new HashMap<>();
    	user.put("a","小名1");
    	user.put("b","小红2");
    	user.put("c","小白3");
    	user.put("d","小万4");
    	user.put("e",new Date());
    	user.put("certType","A");
        userList.add(user);
    }
    Map<String,Object> data = new HashMap<String, Object>();
    data.put("list", userList);
    try {
    	parse("", "excel.ftl",
                "E:\\testExcel.xls", data);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TemplateException e) {
        e.printStackTrace();
    }
}

freemarker模板操作excel或word,java进阶综合提升,java

//doc\docx->xml
@Test
public void word() {
    	try {
    	Map<String,Object> data=new HashMap<String, Object>();
        List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();
        for(int i = 0 ; i < 2;i ++){
        	Map<String, Object> user = new HashMap<>();
        	user.put("user_name","小名"+i);
        	user.put("phone","1598623487"+i);
        	user.put("res",i);
        	user.put("id_card","421587922159");
        	
        	Zxing zxing = new  Zxing();
 		    zxing.orCode("www.baidu.com","c:\\qt\\"+i+".jpg");
			user.put("mx",Base64.getEncoder().encodeToString(IOUtils.toByteArray(new FileInputStream("c:\\qt\\"+i+".jpg"))));
           
			userList.add(user);
        }
    	data.put("userList",userList);
		data.put("job","工种");
		data.put("gradeId",2);
		data.put("hg", 20);
		data.put("zgbm","主管部门");
 		data.put("className", "一年级");
		data.put("pxpt", "河南职业培训学校线上平台");
		data.put("major","童年");
 		data.put("classnum","001");
 		data.put("date", new SimpleDateFormat("yyyy/MM/dd").format(new Date()));
		data.put("duration", 45);
		data.put("isbatch", 21);
		parse("", "证明.xml",
                "E:\\证明.doc", data);
    	} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
	    }
}

二维码生成文章来源地址https://www.toymoban.com/news/detail-801349.html

public class Zxing {
	public static void main(String[] args) {
		Zxing zxing = new Zxing();
		zxing.orCode("http://www.baidu.com","c:\\rztj.jpg");
//		zxing.orCode("http://www.zidukeji.com/kstj.html?uid="+1+"&cid="+1+"&eid="+1+"","c:\\evm\\kstj.jpg");
//      http://127.0.0.1:8090/app/pc/sysUser/tj?uid=4410&cid=849&eid=401        

//		File logoFile = new File("E:/QQ.jpg"); // logo
//		File QrCodeFile = new File("E://" + UUID.randomUUID() + ".png");
//		String url = "https://www.baidu.com/?tn=96228755_hao_pg";
//		ZXingCode.drawLogoQRCode(logoFile, QrCodeFile, url);

	}

	public boolean orCode(String content, String path) {
		/*
		 * 图片的宽度和高度
		 */
		int width = 500;
		int height = 500;
		// 图片的格式
		String format = "png";

		// 定义二维码的参数
		HashMap<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
		// 定义字符集编码格式
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
		// 纠错的等级 L > M > Q > H 纠错的能力越高可存储的越少,一般使用M
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
		// 设置图片边距
		hints.put(EncodeHintType.MARGIN,2);

		try {
			// 最终生成 参数列表 (1.内容 2.格式 3.宽度 4.高度 5.二维码参数)
			BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
			// 写入到本地
			Path file = new File(path).toPath();
			MatrixToImageWriter.writeToPath(bitMatrix, format, file);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}

	}

	private static final int QRCOLOR = 0xFF000000; // 默认是黑色
	private static final int BGWHITE = 0xFFFFFFFF; // 背景颜色
	private static final int WIDTH = 400; // 二维码宽
	private static final int HEIGHT = 400; // 二维码高

	// 用于设置QR二维码参数
	private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
		private static final long serialVersionUID = 1L;
		{
			put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置QR二维码的纠错级别(H为最高级别)具体级别信息
			put(EncodeHintType.CHARACTER_SET, "utf-8");// 设置编码方式
		}
	};

	// 生成带logo的二维码图片
	public static void drawLogoQRCode(File logoFile, File codeFile, String qrUrl) {
		try {
			MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
			// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
			BitMatrix bm = multiFormatWriter.encode(qrUrl, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints);
			BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

			// 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色
			for (int x = 0; x < WIDTH; x++) {
				for (int y = 0; y < HEIGHT; y++) {
					image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGWHITE);
				}
			}

			int width = image.getWidth();
			int height = image.getHeight();
			if (Objects.nonNull(logoFile) && logoFile.exists()) {
				// 构建绘图对象
				Graphics2D g = image.createGraphics();
				// 读取Logo图片
				BufferedImage logo = ImageIO.read(logoFile);
				// 开始绘制logo图片
				g.drawImage(logo, width * 2 / 5, height * 2 / 5, width * 2 / 10, height * 2 / 10, null);
				g.dispose();
				logo.flush();
			}

			image.flush();

			ImageIO.write(image, "png", codeFile); // TODO
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

到了这里,关于freemarker模板操作excel或word的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot基础(78):Freemarker模板生成word文档

    利用Freemarker模板生成word文档。示例,将左侧的模板生成为右侧的文档并下载。 1.编辑一份addr.docx文档 2. 另存为addr.xml文档 3. 打开addr.xml文件,修改内容,由于table表格,需要遍历list集合,需要添加 将addr.xml后缀更改为addr.ftl文件,存放到resources/templates下 导入依赖 编写contr

    2024年02月11日
    浏览(37)
  • SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)

    一,什么是FreeMarker,FTL模板? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为

    2024年03月24日
    浏览(51)
  • 基于Java+freemarker实现动态赋值以及生成Word文档

    有一个需求就是给定一个正确格式的 Word 文档模板,要求通过动态赋值方式,写入数据并新生成 该模板格式的 Word 文档。这很明显使用 Java+freemarker 方式来实现颇为简单。 (1)准备好一个正确格式的 Word 文档(测试文档 - 原版.docx) (2)将其另存为xml文件(测试文档 - 原版

    2024年02月09日
    浏览(45)
  • 若依框架中使用FreeMarker使用word动态模板生成pdf给前端展示(模板中并没用使用到图片,所以没有图片的方法,只用了表格展示数据,模板里面只涉及到了循环判断和日期格式)

    首先使用word创建动态模板  下方两组信息是通过循环展示的,在生成模板时注意,如果不点击里面表格,选择居中表格打印出来可能还有偏差,两边距离页面拒了可能不一样 存储需要的模板时注意      存成这个格式,如果不是2003可能会有坑,找到你生成的.xml文件,把后缀改成ftl  

    2024年02月04日
    浏览(41)
  • JAVA利用Freemarker模版动态生成并导出word文档(全网最详细)

    公司的某个需求,需要根据接口的信息生成一份word接口文档信息并支持导出功能。以前没做过这种需求,于是搜罗各种资料,最终发现java利用freemarker模版可以实现这个功能。 1、需要的环境 2、创建模板 1)展示word文档如下所示: 2)将word文档动态的参数替换成占位符,如下

    2024年02月16日
    浏览(43)
  • Excel表格数据填充到word模板中

            这个需求源于要批量生成模板一样的word文档。当然可以直接使用word的邮件合并功能,点菜单就可以实现,示例代码如下:        要使用这些代码,需要引用2个库microsoft word,microsoft office,如果使用到客体界面的话,还要引用microsoft Forms。本代码可以同时利用两个

    2024年02月15日
    浏览(37)
  • Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

    docker pull onlyoffice/documentserver docker images 以下是将本机的9001端口映射到docker的80端口上,访问时通过服务器ip:9001访问,并且用 -v 将本机机==/data/aws_s3/file-storage==文件夹挂载到docker的 /var/www/onlyoffice/documentserver/web-apps/wsData文件下,后续直接通过http请求读取对应的文件夹 doc

    2024年02月07日
    浏览(42)
  • Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)

    选住 一级标题 ,之后进行“定义新的多级列表”    正常插入题注后就可以了。如果一级标题是 “汉字序号”,那么需要对题注进行修改: 从原来的 图 { STYLEREF 1 s }-{ SEQ 图 * ARABIC s 1 } 修改为 图 { Quote “二零二五年一月{ STYLEREF 1 s }日” @”d” }-{ SEQ 图 * ARABIC s 1 } 注

    2024年02月08日
    浏览(58)
  • freemarker学习+集成springboot+导出word

    目录 一 FreeMarker简介 二 集成springboot,实现案例导出 三 常见面试题总结 FreeMarker  是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 在本地磁盘随便准备一个文件,内容体如下

    2024年02月10日
    浏览(46)
  • 使用freemarker,数据导出word并下载

    1.1 项目背景 最近在开发一个项目,需要导出一些数据,然后写入到word文档中,然后再导出到本地,这个需求是比较常见的,但是我在网上找了很多资料,都没有找到一个比较好的解决方案,所以就自己写了一个,这里分享给大家,希望能帮助到大家。 项目中使用的技术栈:

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包