精华内容
下载资源
问答
  • java文件自动生成模板

    2016-07-28 15:02:40
    java 项目,配置好了,直接运行,就可以了。运行AutoMain就可以了。代码很简单,自己看看,也可以修改
  • 1.codeFactory: Java代码生成,依赖rapid-generator.4.0.6.jar, 支持自定义模板生成代码, 弱业务下完全解放体力劳动. 2.ssm模板实现:pojo,dao,daoimpl,service,serviceimpl,controller,各mapper.xml 代码自动生成, 3....
  • java生成word模板.zip

    2020-10-30 14:50:22
    java动态生成word模板(文件中含完整项目及对应模板)。模板制作教程https://blog.csdn.net/super_DuoLa/article/details/109338707 核心代码详情https://blog.csdn.net/super_DuoLa/article/details/109384791 ...
  • Java动态生成模板

    2020-10-30 14:46:09
    一、制作模板https://blog.csdn.net/super_DuoLa/article/details/109338707 二、代码核心 1、将对象转成map格式,方便赋值 package test.util; import java.beans.PropertyDescriptor; import java.lang....

    逻辑

    (1)制作模板(手动)

    微软docx文件----转zip文件(手动改后缀名)---解压—找到对应的xml文件,删除变量间多余的字符---压缩文件---转为docx(手动改后缀名)

    (2)系统识别模板(替换模板中的变量为具体值)

    找到模板文件----转zip文件(系统实现)---解压—找到对应的xml文件,替换文件中变量的值---压缩文件---转为docx(系统实现)

    一、制作模板https://blog.csdn.net/super_DuoLa/article/details/109338707

    二、代码核心

    1、将对象转成map格式,方便赋值

    package test.util;
    
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.beanutils.PropertyUtils;
    import org.restlet.engine.util.DateUtils;
    
    import com.fasterxml.jackson.annotation.JsonIgnore;
    
    /**
     * 对象转换工具类
     * @author Administrator
     *
     */
    public class BeanUtils {
    	private static List<String> namelist = new ArrayList<String>();
    	public static void objtomap(Object obj,Map<String,Object> dataMap,int level){
    		int plevel=level+1; 
    		
    		//利用反射机制获取类中的属性:表示获取引用所指的对象的所有属性值
    		PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(obj); //获取EnterPriseInformation对象中的所有属性
    		//将对象中的每一个属性以数组形式获取到
    		
    		/*PropertyDescriptor类:(属性描述器)表示JavaBean类通过存储器导出一个属性。
    		  1. getPropertyType(),获得属性的Class对象;
    		  2. getReadMethod(),获得用于读取属性值的方法;
    		  */
    		for (int i = 0; i < origDescriptors.length; i++){
    			Method getMethod=origDescriptors[i].getReadMethod(); //获取属性方法getParking()
    			String name = origDescriptors[i].getName(); //属性名字parking
    			
    			/*@JsonIgnore注解作用:此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
    			此注解用于属性或者方法上(最好是属性上)
    			例:A.isAnnotationPresent(B.class);
    			大白话:B类型的注解是否在A类上。*/
    			
     			if(getMethod.isAnnotationPresent(JsonIgnore.class))
    				continue;
    			if (PropertyUtils.isReadable(obj,name) &&PropertyUtils.isWriteable(obj, name)) {//可读写
    	                try {
    						Object value = PropertyUtils.getSimpleProperty(obj, name); //根据对象和对象中的属性名获取属性值
    						if(namelist.size()<=level){
    							namelist.add(name);
    						}else{
    							namelist.set(level,name);
    						}
    						String sname="";
    						for(int j=0;j<level+1;j++){
    							if(j==0){
    								sname=namelist.get(j);
    							}else{
    								sname+="_"+namelist.get(j);
    							}
    						}
    						if(getMethod.isAnnotationPresent(WordField.class)){
    							WordField wordField=getMethod.getAnnotation(WordField.class);
    							String str=wordField.title();
    							int n=wordField.num();
    							List<String> list=new ArrayList<String>();
    							for(int x=0;x<n;x++){
    								list.add("");
    							}
    							if(value!=null){
    							String [] are=value.toString().split(",");
    							for(int m=0;m<are.length;m++){
    								list.set(Integer.parseInt(are[m]),"√");
    							}
    							}
    							dataMap.put(sname,list);
    						}else if(value==null){
    							dataMap.put(sname," ");
    						}else if("java.util.Date".equals(value.getClass().getName())){
    							Date date=(Date)value;
    							dataMap.put(sname,DateUtils.format(date,"yyyy-M-d").split("-"));
    						}else if("java.util.ArrayList".equals(value.getClass().getName())){
    							List<Object> list=(List<Object>)value;
    							for(int z=0;z<list.size();z++){
    								String tname=name+z;
    								if(namelist.size()<=level){    
    									namelist.add(tname);
    								}else{
    									namelist.set(level,tname);
    								}
    								objtomap(list.get(z),dataMap,plevel);
    							}
    						}else if(value.getClass().getName().indexOf("java")!=-1){
    							dataMap.put(sname,value); 
    						}else{
    						    objtomap(value,dataMap,plevel);
    						}
    					} catch (IllegalAccessException e) {
    						e.printStackTrace();
    					} catch (InvocationTargetException e) {
    						e.printStackTrace();
    					} catch (NoSuchMethodException e) {
    						e.printStackTrace();
    					}
    	          }
    		}
    	}
    }
    

    2、赋值到模板

    //执行模板
    	public String process(String rootPath,String fileName, Map<String, Object> dataMap) {
    		String tempPath="L:/"+fileName+".docx"; //模板位置及名称
    		String handlePath=rootPath+"/model/"+fileName+".zip"; //压缩文件位置及名称
    		String orclPath=rootPath+"/model/"+fileName+".docx";
    		String workPath=rootPath+"/model/work"; //压缩的根目录
    		String clearPath=rootPath+"/model/";
    		FileUtils.deleteDirectory(clearPath); //删除:执行操作之前先删除原有文件,避免缓存导致文件不是最新内容
            FileUtils.createDirectory(workPath); //新建
            String docxPath=workPath+"/"+fileName+".docx"; //此路径用于在指定文件夹中创建docx文件
            String zipPath=workPath+"/"+fileName+".zip";//此路径用于在指定文件夹中创建zip文件 
            FileUtils.copyFileCover(tempPath,docxPath,true);// 待复制的文件名      目标文件名   如果目标文件已存在,是否覆盖
    
            File file = new File(docxPath);   // 创建指向   当前程序执行的目录/文件  的对象
    		file.renameTo(new File(zipPath));//修改文件名or格式  docx--->zip
    		FileUtils.unZipFiles(zipPath,workPath); //解压zipPath文件到workPath
    		FileUtils.deleteFile(zipPath); //删除压缩文件
    		FreeMarkers.process(workPath+"/word/document.xml",dataMap); //赋值:路径--值
    		FileUtils.zipFiles(workPath,"",handlePath); // 压缩的根目录  根目录下的待压缩的文件名或文件夹名,其中*或""表示跟目录下的全部文件    目标zip文件
    		File file1 = new File(handlePath);  // 创建一个指向   当前程序执行的目录/文件  的对象
    		file1.renameTo(new File(orclPath)); //修改文件名or格式  zip--->docx
    		return orclPath; //返回操作完毕的文件
    	}

    3、下载文件

    //下载模板
    	public void download(String oraPath, HttpServletRequest request, HttpServletResponse response) {
    		File orclfile=new File(oraPath);
    		String fileName=orclfile.getName();
    		try {
    		response.reset();
    		response.setContentType("application/octet-stream; charset=utf-8");
            final String userAgent = request.getHeader("USER-AGENT");
               String finalFileName = null;
                if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
    				finalFileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
                }else{
                	finalFileName=Encodes.urlEncode(fileName);
                } 
            response.setHeader("Content-Disposition", "attachment; filename="+finalFileName);
            InputStream in = new FileInputStream(oraPath);
    			 OutputStream out;
    				out = response.getOutputStream();
    		        //写文件  
    		        int b;  
    		        while((b=in.read())!= -1)  
    		        {  
    		            out.write(b);  
    		        }  
    		        in.close();  
    		        out.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch(IOException e){
    			e.printStackTrace();
    		}
    	}

    4、执行方法

    @RequestMapping(value = "download")
    	public void download(Model model, HttpServletRequest request, HttpServletResponse response) throws IOException{
    		   String oraPath=null;	
    		   Deskmate deskmate=new Deskmate();  
    		   deskmate.setNum("13");
    		   deskmate.setSite("北京市朝阳区");
    		   
    		   Subject sub0=new Subject();
    		   sub0.setCurriculum("语文");
    		   sub0.setDuration("20");
    		   sub0.setSegments("66");
    		   
    		   Subject sub2=new Subject();
    		   sub2.setSegments("12");
    		   
    		   Subject sub3=new Subject();
    		   sub3.setCurriculum("数学");
    		   sub3.setDuration("88");
    		   
    		   
    
    	       List<Subject> subjects=new ArrayList<>();
    	       subjects.add(0, sub0);
    	       subjects.add(1, new Subject());
    	       subjects.add(2, sub2);
    	       subjects.add(3, sub3);
    		   
    		   
    	       User user=new User();     
    	       user.setAddress("北京市丰台区");
    	       user.setName("哇哈哈");
    	       user.setSex("1");
    	       user.setDeskmate(deskmate);
    	       user.setSubjects(subjects);
    	       
    	       
    	       Map<String,Object> dataMap=new HashMap<>();
    			BeanUtils.objtomap(user,dataMap,0); //将对象转成map格式
    			String  fileName="学生情况模板"; //文件名称
    			//获取Tomcat+项目名字 路径
    		 	String rootPath = new File(request.getSession().getServletContext().getRealPath("/")).getPath(); 
    			oraPath=userService.process(rootPath,fileName,dataMap); //操作模板
    			userService.download(oraPath, request, response); //下载文件
    	}
    	

    三、执行结果

    代码量比较大,不一一粘贴了,有需要可以下载完整版项目(含模板),有积分的可以捧个场,没有的可以私信我、留下邮箱,我邮箱发你(可能消息回复不那么及时,见谅哦)

    完整版项目及模板下载

     

    展开全文
  • 本篇文章主要介绍了java根据模板动态生成PDF实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • ssm框架的代码生成器,基于freemarker的模板模板可以按需自己修改。映射文件,映射器,service接口,service实现,controller控制器均可由本工具生成。如需生成页面文件(jsp,html等)需自己添加模板,对代码稍作...
  • java生成word模板详解

    2019-04-23 01:24:02
    NULL 博文链接:https://411373793.iteye.com/blog/2182596
  • JAVA根据PDF模板生成PDF文件(支持文本内容,图片,条形码,二维码), 用于JAVA Web 动态根据模板生成PDF并打印
  • java实现poi模板生成PPT文件代码:两个迭代版本。java实现poi模板生成PPT文件代码:两个迭代版本。
  • java 生成Excel,可根据模板格式生成 Excel打印专用 报表 这个是旧版本的 ,需要新版本的 可以联系我
  • java生成pdf字体和模板

    2017-07-24 22:31:46
    java生成pdf字体和模板
  • 背景:跟着我的步骤一步一步...需要用画笔去花模板,很繁琐! Apache PDFBox,生成、合并PDF文档; docx4j,生成docx、pptx、xlsx文档,支持转换为PDF格式。 本文使用最后一种,思路如下图: 步骤 1.首先将你要生成
  • Java根据pdf模板生成证书PDF源码+jar包+证书模板,包含有汉字、英文、数字、繁体字、生僻字都能正常显示。博客讲解地址:https://blog.csdn.net/ITBigGod 采用Itext-Asian-5.2.0.jar和Itextpdf-5.5.11.jar
  • 本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。下面跟着小编一起来看下吧
  • 使用jxls框架生成Excel,简单易懂。内含所使用的引用jar包版本。
  • java使用pdf模板套打二维码,文字,表格示例
  • Java根据word 模板生成自定义内容的word 文件案列使用的工具文件
  • java 通过模板生成 xml

    热门讨论 2014-03-28 11:34:44
    java 通过xml模板生成 xml文件
  • 用途:根据PDF模板生成PDF文件,将数据库查询的数据插入到模板指定未知,然后生成新的PDF文件 原理: 代码说明:exprotPDF_Main 为主文件。...支持各种java调用数据库数据,生成PDF文件。多个版本供参考。
  • 基于idea插件easycode编写java springboot mybatis代码生成模板,生成内容Controller,service,dao,mapper,生成接口是基于rest访问方式,add,update,delete,selectOne,selectAll
  • 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701
  • java普通项目,直接导入MyEclipse即可运行即可使用(已包含jar包,没有数据库),代码注释很清楚,网上很多都是maven项目,且bug很多,现已进行修复。main方法执行即可生成
  • Java POI根据模板生成Excel文件并写入磁盘,资源文件仅为实现的简单测试Demo,并没有进行代码优化,可以直接导入运行,资源文件仅供参考。
  • 搜索了好多篇例子,算是强拼硬凑成现在的...此包中包含可测试成功代码,关联模板、字体文件、jar等 希望能帮助到大家。 这篇文章的作者蛮厉害,有不少借鉴。 http://blog.csdn.net/layman1024/article/details/74628658
  • java 使用poi根据模版导出word文件 将文件中的标签替换成文字或者文件 文件中标签用{xxxx}生成新文件
  • template文件夹下放入xml模板, 运行Test.java文件, 可以生成word文档
  • 功能:通过可配置的Excle模板生成PDF文件,并通过浏览器输出到客户端。 实现思路:该功能通过三个步骤实现 第一:服务器端通过excle模板生成Excle文件(包含图片文件生成到excle文件中) 第二:通过jacob,将Excle文件...
  • java实现模板邮件发送

    2019-03-17 18:08:31
    本资源适合正在学习邮件的学员,要有一定java基础的学员学习。
  • java 生成pdf 签章

    2018-04-26 14:01:07
    java生成pdf并且进行签章,里面有三种技术,测试都可用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,136
精华内容 80,054
关键字:

java生成模板

java 订阅