精华内容
下载资源
问答
  • 根据word模板生成新的word文件
  • 完整项目,直接可以导入到myeclipse中运行,代码有详细注释,在readme.txt文件里面有注意事项。
  • 文档已集成进去 直接运行即可 自测可用
  • Java通过word模板配置书签生成word,这个是公司内部代码直接可以运行
  • Java根据word 模板生成自定义内容的word 文件案列使用的工具文件
  • 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701
  • 完整项目,直接可以导入到myeclipse中运行,代码有详细注释,在readme.txt文件里面有注意事项。
  • java根据word模板动态赋值某些字段,然后生成pdf,参考文档:http://deepoove.com/poi-tl/#_why_poi_tl

    java根据word模板动态赋值某些字段,然后生成pdf,参考文档:http://deepoove.com/poi-tl/#_why_poi_tl

    展开全文
  • java 使用poi根据模版导出word文件 将文件中的标签替换成文字或者文件 文件中标签用{xxxx}生成新文件
  • java生成word模板详解

    2019-04-23 01:24:02
    NULL 博文链接:https://411373793.iteye.com/blog/2182596
  • 对企业合同word模版,可通过java 程序实现生成word文件,然后再通过word转成pdf实现。本实例的方案,可实现模版到word文件的转换。附件有代码和效果图。
  • Java通过FreeMarker.jar模板生成word文档 原理:通过word的另存为xml文件,将xml文件转成freemarker模板文件,然后通过freemarker.jar将数据填充至模板,然后生成doc文件
  • 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 ...
  • template文件夹下放入xml模板, 运行Test.java文件, 可以生成word文档
  • 根据word模板导出word、PDF文档,功能全,内容多,介绍详细。主要实现根据word模板及模板中的坐标($[标明.字段名])的形式进行查询出所对应的数据,然后分别生成PDF 和 WORD功能。 本功能是将各个模板的数据均查询...
  • java poi 通过模板生成word文档

    热门讨论 2014-07-22 17:10:34
    java使用poi,根据模板生成word文档.
  • 网络上的根据模板填充Word我都看过一些, 它们的功能在数据换行的时候用的是run对象的.addCarriageReturn()方法,或者是直接用\n实现换行。这些都不符合我的需求, 因为我要的是分段,而不是换行。换行的word导致另一...
  • 在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多 由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来 在咨询了之前做政务系统的同学后,他们都一致推荐我使用...

    在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多

    由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来

    在咨询了之前做政务系统的同学后,他们都一致推荐我使用aspose框架来实现,因为它的效率高并且简单方便使用

    在看了下aspose的官网和对demo简单体验了之后感觉确实很方便,为了后面项目中万一又遇到有需要的场景可以信手拈来,这里我简单在此处记录一下

    下载地址

    https://downloads.aspose.com/words/java

    选择版本:Aspose.Words for Java 19.1

    (之所以选择那个版本,是因为网上有很多这个版本的pj教程,太新的担心pj不了,当然不pj也可以用但是有水印)

    如果直接下载jar的话也可通过aspose官方的maven仓库地址进行下载:

    https://repository.aspose.com/repo/com/aspose/aspose-words/19.1/aspose-words-19.1-jdk16.jar

    pj教程:

    https://www.jianshu.com/p/be0cbdc389cc

    也可以直接下载已破解好的jar,如果自己能找到的话

    使用示例

    这里演示一个目前我的项目中可能需要满足的一个需求,通过一个word模板生成pdf,动态填充word中的内容,同时支持生成多个pdf但要求pdf合并到一个pdf中

    添加maven依赖

    将下载好的jar放到项目中,然后添加依赖

            <!--aspose-words依赖,直接依赖本地项目中的jar-->
            <dependency>
                <groupId>com.aspose</groupId>
                <artifactId>aspose-words</artifactId>
                <version>aspose-words-19.1-jdk16.jar</version>
                <scope>system</scope>
                <systemPath>${pom.basedir}/libs/aspose-words-19.1-jdk16-crack.jar</systemPath>
            </dependency>
    

    如果用本地jar打包时记得添加资源配置:

        <build>
            <resources>
                <resource>
                    <directory>libs</directory>
                    <targetPath>BOOT-INF/lib/</targetPath>
                    <includes>
                        <include>**/*.jar</include>
                    </includes>
                </resource>
            </resources>
        </build>
    

    word模板准备

    我们的最终目的是生成pdf,但为了方便还是先通过word模板生成word之后再输出为pdf。

    为了排版方便建议还是使用word中的表格来进行排版,对于可变的地方可以添加【文字型窗体域】便于后面程序的文字进行填充
    word模板编辑
    在word模板准备好了之后就可以直接开始写代码了

    测试代码

    import com.aspose.words.*;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.format.DateTimeFormatter;
    import java.util.ArrayList;
    import java.util.Date;
    
    /**
     * @author puhaiyang
     * @date 2020/10/11 12:12
     * 测试aspose生成pdf工具类
     */
    public class AsposeWordsUtils {
        /**
         * Word转PDF操作
         *
         * @param doc        源文件
         * @param targetFile 目标文件
         */
        public static void doc2pdf(Document doc, String targetFile) {
            try {
                long old = System.currentTimeMillis();
                //新建一个空白pdf文档
                File file = new File(targetFile);
                FileOutputStream os = new FileOutputStream(file);
                //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
                doc.save(os, SaveFormat.PDF);
                os.close();
                long now = System.currentTimeMillis();
                //转化用时
                System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private static class UserInfo {
            public UserInfo(String userNumber, String userName, String depaName, String desc, Date pubDate) {
                this.userNumber = userNumber;
                this.userName = userName;
                this.depaName = depaName;
                this.desc = desc;
                this.pubDate = pubDate;
            }
    
            private String userNumber;
            private String userName;
            private String depaName;
            private String desc;
            private Date pubDate;
    
            public String getUserNumber() {
                return userNumber;
            }
    
            public void setUserNumber(String userNumber) {
                this.userNumber = userNumber;
            }
    
            public String getUserName() {
                return userName;
            }
    
            public void setUserName(String userName) {
                this.userName = userName;
            }
    
            public String getDepaName() {
                return depaName;
            }
    
            public void setDepaName(String depaName) {
                this.depaName = depaName;
            }
    
            public String getDesc() {
                return desc;
            }
    
            public void setDesc(String desc) {
                this.desc = desc;
            }
    
            public Date getPubDate() {
                return pubDate;
            }
    
            public void setPubDate(Date pubDate) {
                this.pubDate = pubDate;
            }
        }
    
        public static void main(String[] args) throws Exception {
            ArrayList<UserInfo> userInfoList = getUserInfoList();
            //模板word
            String template = "C:/Users/ping/Desktop/temp/aspose/test/forTest.docx";
    
            Document firstDocument = null;
            for (UserInfo userInfo : userInfoList) {
                //目标word
                Document document = new Document(template);
                Range range = document.getRange();
                range.replace("ygbh", userInfo.getUserNumber(), new FindReplaceOptions());
                range.replace("ygxm", userInfo.getUserName(), new FindReplaceOptions());
                range.replace("szbm", userInfo.getDepaName(), new FindReplaceOptions());
                range.replace("zygx", userInfo.getDesc(), new FindReplaceOptions());
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                LocalDateTime localDateTime = LocalDateTime.ofInstant(userInfo.getPubDate().toInstant(), ZoneId.systemDefault());
                range.replace("bfrq", formatter.format(localDateTime), new FindReplaceOptions());
                if (firstDocument == null) {
                    firstDocument = document;
                } else {
                    //添加文档
                    firstDocument.appendDocument(document, ImportFormatMode.KEEP_DIFFERENT_STYLES);
                }
            }
            doc2pdf(firstDocument, "C:/Users/ping/Desktop/temp/aspose/test/descForTest.pdf");
        }
    
        private static ArrayList<UserInfo> getUserInfoList() {
            ArrayList<UserInfo> userInfoList = new ArrayList<UserInfo>();
            userInfoList.add(new UserInfo("666001", "海洋哥",
                    "滑水部-酱油项目组-基础架构组",
                    "研究如何滑水及如何深入打酱油,对如何平滑滑水取得了重要贡献", new Date()));
            userInfoList.add(new UserInfo("666002", "帅哥",
                    "核心项目事业部-超级潜水部-默默潜水研究组-项目三组",
                    "对如何潜水取得了重要贡献", new Date()));
            return userInfoList;
        }
    }
    

    整体来看代码还是很少的,写完后直接运行跑一下

    输出结果

    输出文件
    输出文件
    生成的pdf文件预览
    生成的pdf文件预览
    效果还是可以的,文字该换行显示的还是换行显示了,效果不错代码执行效率也很快,非常简单。

    以后再遇到要求项目中实现动态生成PDF简直就是分分钟的事呀!nice~

    linux下导出pdf乱码解决办法

    如果在windows下导出pdf一切正常,但在linux下导出pdf中文乱码了,则需要通过添加字体文件并在aspose的代码中指定所在的字体文件

    //指定字体目录
    FontSettings.getDefaultInstance().setFontsFolder("/opt/user/otherfonts/", false);
    //执行保存
    doc.save(pdfPath);
    

    具体办法是先找到字体对应的字体文件,在windows不报错的话就从windows上先找下, windows的字体文件都在这个目录下

    C:\Windows\Fonts\

    方式一,直接部署方式

    找到对应的字体然后拷贝到linux某个目中即可

    方式二,docker部署方式

    但是如果是docker的话,则可以通过volume映射字体目录或通过Dockerfile直接将字体打在docker镜像中,如果打在镜像中的话会导致镜像文件很大

    方式三,通过k8s方式

    如果是通过kubernetes来部署的项目可以通过pvc来搞定,但如果没得对应的文件服务器,则可以用过init-containers配合emptyDir类型的volumes来解决,参考地址:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

    {
        "template": {
            "spec": {
                "containers": [
                    {
                        "image": "xxxxxxxxxxxxxxxxxxxx",
                        "volumeMounts": [
                            {
                                "mountPath": "/opt/user/otherfonts",
                                "name": "font-depend"
                            }
                        ]
                    }
                ],
                "initContainers": [
                    {
                        "command": [
                            "sh",
                            "-c",
                            "set -ex;mkdir -p /vmfontsdepend/fonts;cp -r /otherfonts/* /vmfontsdepend/fonts;"
                        ],
                        "image": "ccr.ccs.tencentyun.com/haiyang/font-depend-image:1.0.0",
                        "imagePullPolicy": "IfNotPresent",
                        "name": "init-font-depends",
                        "volumeMounts": [
                            {
                                "mountPath": "/vmfontsdepend/fonts",
                                "name": "font-depend"
                            }
                        ]
                    }
                ],
                "volumes": [
                    {
                        "emptyDir": {},
                        "name": "font-depend"
                    }
                ]
            }
        }
    }
    

    其中ccr.ccs.tencentyun.com/haiyang/font-depend-image:1.0.0的Dockerfile为:

    FROM alpine:3.8
    LABEL maintainer="puhaiyang"
    ADD fonts/* /otherfonts/
    

    fonts目录下为需要导入的字体文件


    参考资料

    查找并替换docx的中文字(模板生成)

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/quickstart/FindAndReplace.java

    多个docx文档合并为一个(文档合并)

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/quickstart/AppendDocuments.java

    docx转为pdf

    https://github.com/aspose-words/Aspose.Words-for-Java/blob/master/Examples/src/main/java/com/aspose/words/examples/loading_saving/ConvertToPDF.java

    展开全文
  • 1.根据word模板添加书签,例如在标题后需要输入内容的部分定义标签名title,然后保存模板到指定文件目录下。 2.java代码 此处用到Spire.Doc.jar,这个在官网Spire.Doc.jar进行下载支持maven和jar包两种格式 public ...

    1.根据word模板添加书签,例如在标题后需要输入内容的部分定义标签名title,然后保存模板到指定文件目录下。
    在这里插入图片描述
    2.java代码 此处用到Spire.Doc.jar,这个在官网Spire.Doc.jar进行下载支持maven和jar包两种格式
    public static void main(String[]args) throws IOException {
    //加载包含书签的Word文档
    Document doc = new Document();
    doc.loadFromFile(“E:\file\notice.docx”);
    //获取书签
    BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(doc);
    bookmarksNavigator.moveToBookmark(“title”);
    //用新的内容替换原书签内容
    bookmarksNavigator.replaceBookmarkContent(“这是标题”,true);
    bookmarksNavigator.moveToBookmark(“content”);
    String text=“这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是”;
    //用新的内容替换原书签内容
    bookmarksNavigator.replaceBookmarkContent(text,true);
    bookmarksNavigator.moveToBookmark(“date”);
    //用新的内容替换原书签内容
    bookmarksNavigator.replaceBookmarkContent(“这是日期”,true);
    bookmarksNavigator.moveToBookmark(“issuer”);
    //用新的内容替换原书签内容
    bookmarksNavigator.replaceBookmarkContent(“这是发布者”,true);
    doc.saveToFile(“E:\file\outputword.docx”, FileFormat.Docx);//输出word
    doc.saveToFile(“E:\file\output2pdf.pdf”, FileFormat.PDF);//输出pdf格式有页数限制,仅支持3页
    doc.dispose();
    }

    在这里插入图片描述

    展开全文
  • Java Poi流根据Word模板插入相应的文本、表格和图片,并生成新的Word报告。文档提供相应的jar包和Word模板文件,表格支持动态添加数据,插入图片支持多种格式!
  • 使用java poi动态编辑生成word文件,生成报表信息。支持插入循环list数据和单个数据得工具类,和测试模板,直接导入就能使用
  • java根据word模板生成word文件

    千次阅读 2020-07-30 10:30:45
    1、首先新建一个word模板, 2、另存为xml格式, 3、将xml文件的扩展名直接改成ftl, 4、导入freemaker.jar 2、使用软件打开ftl文件,找到w:binData快速定位图片位置,写上${imgStr}(名字随意,和java代码中的对应...

    本文使用的feemarker实现的功能
    1、首先新建一个word模板,
    2、另存为xml格式,
    3、将xml文件的扩展名直接改成ftl,
    4、导入freemaker.jar
    在这里插入图片描述
    2、使用软件打开ftl文件,找到w:binData快速定位图片位置,写上${imgStr}(名字随意,和java代码中的对应上即可),然后保存。
    3、因涉及到list的问题,找到需要设计list的行,找到w:tr,<#list></#list>将w:tr包裹。
    在这里插入图片描述
    在这里插入图片描述
    3、新建java类

    @Component
    public class ExamTemplate {
    	
    	public String saveExamTable(Welder welder,ExamRegis examRegis,List<WorkExperience> wExperiences,List<WeldQua> weldQuas,
    			List<Train> trains,List<ExamProject> examProjects,String templateUrl,Inframework inframework,HttpServletRequest req)throws Exception {
    		Map<String, Object> dataMap=new HashMap<String, Object>();
    		
    			dataMap.put("depName", inframework.getInframeworkName());
    			dataMap.put("code", inframework.getCode());
    			dataMap.put("address", inframework.getAddress());
    			dataMap.put("linker", inframework.getLinker());
    			String regisNum=examRegis.getRegisNum();
    			dataMap.put("regisNum", regisNum);
    			//dataMap.put("startTime", new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse("2018-09-19")));
    			dataMap.put("idNumber", welder.getIdNumber());
    			dataMap.put("name",welder.getName());
    			int sexInt=welder.getSex();
    			if(sexInt==1) {
    				dataMap.put("sex", "男");
    			}else {
    				dataMap.put("sex", "女");
    			}
    			//dataMap.put("fukuan", "test");
    			dataMap.put("imgStr",getImageStr(welder,templateUrl));
    			 
    			dataMap.put("theoryNum",examRegis.getTheoryNum());
    			//dataMap.put("workExperience", "叁仟肆佰万");
    			//List<WeldQua> weldQuas=new ArrayList<WeldQua>();
    			
    			dataMap.put("wExperiences", wExperiences);
    			
    			dataMap.put("weldQuas", weldQuas);
    			
    			dataMap.put("trains", trains);
    			
    			dataMap.put("examProjects", examProjects);
    			Configuration configuration=new Configuration();
    			configuration.setDefaultEncoding("utf-8");
    			configuration.setDirectoryForTemplateLoading(new File(templateUrl));
    			Calendar calendar=Calendar.getInstance();
    			int monthInt=calendar.get(Calendar.MONTH)+1;
    			int year=calendar.get(Calendar.YEAR);
    			String newName=UUID.randomUUID().toString();
    			File outFile=new File(templateUrl+year+"/"+monthInt+"/"+newName+".doc");
    			Template template=configuration.getTemplate("报名表.ftl","utf-8");
    			Writer out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"),1024);
    			template.process(dataMap,out);
    			out.flush();
    			out.close();
    			String url=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/WeldCloud/upload/"+year+"/"+monthInt+"/"+newName+".doc";
    			return url;
    	}
    	public String getImageStr(Welder welder,String templateUrl) throws Exception{
    		String[] path=welder.getPhotoUrl().split("/");
    		String imgFile="";
    		if(path.length==8) {
    			imgFile=templateUrl+path[5]+"/"+path[6]+"/"+path[7];
    		}
    		InputStream in=null;
    		byte[] data=null;
    		in=new FileInputStream(imgFile);
    		data=new byte[in.available()];
    		in.read(data);
    		in.close();
    		BASE64Encoder encoder=new BASE64Encoder();
    		return encoder.encode(data);
    	}
    
    展开全文
  • 合同/word模板生成

    2017-09-22 11:22:46
    很多地方都会用到Java生成合同,这里提供一个word合同的生成模板,已经封装好了可以直接使用的,pdf雷同,都是一样的,如果需要水印(章子)的话,直接在word中吧章子P上去就好了
  • java 使用word模板生成word

    万次阅读 2018-05-28 17:15:19
    二:新建一个word文档 三:存放地址 四:代码 public class DocUtil { private static Logger log =Logger. getLogger (DocUtil. class ) ; public static void main (String[] args) { Map map= new ...
  • Java操作word模板读写

    2016-08-03 16:06:02
    Java读写 简单易懂,有完整的资历
  • java通过模板生成 word

    2019-08-05 01:12:49
    NULL 博文链接:https://huohu2005.iteye.com/blog/2040139
  • java动态生成word模版

    2018-01-15 17:00:01
    利用java实现简单动态生成word模版 项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。 FreeMarker是一个用Java语言编写的模板引擎,它基于模板生成文本输出,至于想详细了解 ...
  • template文件夹下放入xml模板,运行Test.java文件,可以生成word文档
  • Java根据ftl模板生成多表格复杂性word文档,工程可直接导入eclipse中执行的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,556
精华内容 7,822
关键字:

java通过word模板生成

java 订阅