-
photoshop校徽如何制作.docx
2020-08-21 23:07:29下面是小编整理的photoshop校徽如何制作的方法希望能给大家解答 photoshop校徽制作的方法 首先打开photoshop cs6新建文件 名称改为校徽 后面的宽度高度分辨率之类的我是随便改的因为这样用起来比较方便然后点击确定 -
UltraISO软件制作镜像文件.docx
2020-04-24 23:19:09介绍了如何用UltraISO软件制作镜像文件,安装操作系统,步骤详细,新手可参考,老手略过,不喜勿喷! -
如何制作Java可执行程序以及安装程序.docx
2020-09-20 15:33:11如何制作 Java 可执行程序以及安装程序 首先我们介绍一下生成 运行 Java程序的三种方式 ----- Java 生成的 jar 包执行方式一般有三种 1 直接用系统 j2se binnary 执行由于 jar 包也可以用 winrar 打开造成 冲突你... -
vivado2017.4制作zynq相关启动文件.docx
2019-10-18 15:55:34文档详细描述了如何一步一步制作zynq启动所需要的四个文件BOOT.bin,u-boot.elf,uImage,devicetree.dtb,文档配图不多,但是都是干货,验证过的,如有问题留言交流 -
Flash《水中倒影》的制作方法.docx
2020-11-07 08:59:07具有水中倒影效果的动画 是每个动画爱好者的心愿 制作 方法有很多种今天本教程是教大家如何利用 FLASH MX来制作动感的水中倒影动画 好我们开始 打开FIashMX,按Ctrl+N新建一个文档 文件/导入导入一张汽车图片如图 K?... -
PhotoShop设计制作精美的苹果Logo壁纸的教程.docx
2020-11-03 21:31:02PhOtoShOP设计制作精美的苹果LOgo壁纸的教程 最终效果 在这篇photoshop教程你会学到如何使用 photoshop创作一个时尚的 苹果LoGo桌面壁纸 1首先运行Photoshop创建一个新的图片文件 图片的尺寸你可 以随意这个编写 PS... -
关于如何使用freemarker制作word模板并填充数据导出,spire文件类型转换
2021-01-21 22:19:52关于如何使用freemarker制作word模板并填充数据,然后使用spire导出自己想要的格式(svg、pdf、word) 首先你需要一份word文档(.docx),然后将需要替换的地方用${xxx}进行替换。例如下面这样 第二步,将自己...关于如何使用freemarker制作word模板并填充数据,然后使用spire导出自己想要的格式(svg、pdf、word)
-
首先你需要一份word文档(.docx),然后将需要替换的地方用${xxx}进行替换。例如下面这样
-
第二步,将自己做的模板另存为.xml。
-
用编译器打开(建议使用vscode)。打开之后是这种样式,很乱。建议将全文复制,到 https://tool.oschina.net/codeformat/xml 这个网址进行格式化
-
如果出现如下图这种情况,去掉上面的一整个<w:tr>即可
-
如果你有循环,(比如表格)你需要freemarker的一些循环语法,
上图中,<#list xskcList as t1> 就是将xskcList这个集合进行循环,变量是t1,里面的map集合可用${t1.xxx}取出(记住,所有的集合都应该是List<Map<String,Object>>这种类型) -
修改好了之后,再直接将文件后缀改成.ftl
-
好了,至此我们的模板创建成功,开始准备数据
-
这里我们制作一个以xsxm为数据的例子,其他都是一样的。(注意如果一个值为空,也必须注入一个向map集合中注入这个key-value。不然会报错)
Map<String,Object> xsJbxx = new HashMap<String, Object>();
if(StrUtil.isNotBlank(curriculum.getXm())) {
xsJbxx.put(“xsxm”,curriculum.getXm());
}else {
xsJbxx.put(“xsxm”," ");
}OutputStreamWriter write = null; Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); // 设置编码 configuration.setClassForTemplateLoading(this.getClass(), "/"); //将你的模板放在resources目录下,这样就是读取到了你的模板 Template temp = configuration.getTemplate("ytjzwcjd.ftl"); ByteArrayOutputStream bs = new ByteArrayOutputStream(); write = new OutputStreamWriter(bs); //这个xsJbxx就是我们的map.写入OutputStreamWriter temp.process(xsJbxx, write); write.close();
10 模板对应的位置
11.Document doc = new Document(); ByteArrayInputStream buffer = new ByteArrayInputStream(bs.toByteArray()); doc.loadFromStream(buffer, FileFormat.Word_Xml); //转换成svg,会在d盘下生成1一个1.svg文件 doc.saveToSVG("D:\\1.svg"); //转换成pdf doc.saveToFile("D:\\1.svg", FileFormat.PDF); //如果你想生成一个io流 spire也是支持的。 ByteArrayOutputStream byteos = new ByteArrayOutputStream(); doc.saveToStream(byteos, FileFormat.PDF);
总结:我们使用freemarker,spire,将制作的模板生成文件,目前来看比较兼容,在模板里加入二维码,水印也是可以的。好了,这篇文章就说到这里,有问题可以私信我奥。
下期见!
-
-
如何将Word文件批量转换成PDF
2019-07-04 11:48:29Doc和Docx格式的Word文件几乎天天和我们的工作打交道,但是为了避免随意被修改文档的内容,我们经常需要把word文件转换成pdf格式文件来存储。当然,制作pdf电子书啊什么的也很常见啦。Word转换成PDF格式最常见的办法...上次分享了“如何在线免费将MP4转换成MP3格式音乐”,这次分享个办公相关吧。Doc和Docx格式的Word文件几乎天天和我们的工作打交道,但是为了避免随意被修改文档的内容,我们经常需要把word文件转换成pdf格式文件来存储。当然,制作pdf电子书啊什么的也很常见啦。Word转换成PDF格式最常见的办法,就是直接保存,或者虚拟打印机的方式,打开word文件,打印,选择虚拟打印机然后生成PDF文件。但是这种方法效率比较低,每次只能转换一个文件。当遇到想要大批量、快速的转换word成PDF文件呢?
这次介绍这个东东:批量Word转PDF转换器。放个图先:
这个软件用的不是虚拟打印技术,可以批量的一次性转换很多个word文件到PDF格式,不仅支持新版本Office的DOCX格式,而且还支持老版本OFFICE的DOC格式以及TXT,RTF等格式。而且还能在转换后设置禁止PDF文件内容拷贝啊,禁止打印什么权限类的设定。
我用的过程中,直接把文件拖到列表里,然后转换就ok了,非常简单。
其实这个工具比较吸引我的是它的自动合并功能。以前生成一堆PDF文件后,要想合并成一个PDF文件再发给客户,还必须要使用PDF合并软件。这个自动合并功能太好用了,添加完PDF文件后,勾选“转换后按列表顺序合并成一个PDF文件”,再开始转换,你会发现转换完后程序自动就把文件合并成一个PDF文件了,简直不要太方便。。。
值得一用哈。
下载地址:https://www.pdfgongju.com/piliangwordzhuanpdfzhuanhuanqi.html
-
java程序打包帮助文档.docx
2020-09-13 14:23:02PAGE / NUMPAGES java 程序打包帮助文档 常常在网上看到有人询问如何把 java 程序编译成 .exe 文件通常回答只有两种一种是制作一个可执行的 JAR 文件包然后就可以像.chm 文档一样双击运行了而另一种是使用 JET 来... -
unity3d入门中文版教材.docx
2020-07-14 21:41:47Unity3D 基本操作 用 Unity3D 创建简单漫游 1 基本设置 1 修改视角控制键为右键 10 如何取消浏览窗口上的右键菜单 11 植物效果设置 11 水面效果的设置 15 烘培光影贴图的处理 17 如何制作连续加载的场景漫游 错误... -
几个FLASH的简单例子.docx
2020-07-09 14:34:22补充几个FLASH的简单例子 课题Flash动画制作之一 绘制七巧板 教学目标熟悉Flash软件的操作界面 运用Flash软件绘制七巧板 教学重点绘制七巧板 教学难点如何选用合适的工具正确绘制七巧板 教学方法讲授法演示法 教学... -
windows10 yolov3训练自己的数据.docx
2020-08-03 15:54:20window 10下如何使用yolov3训练自己的数据,不需要像网上所说要先生成.json文件,直接可以用txt文件。然后详细描述了制作的数据集格式和存储位置配置,同时包含整个项目所需的各种资源下载链接。 -
JAVA使用POI-TL通过Word模板生成Word文件
2018-08-15 16:04:24技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单....这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/...技术背景
很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单.docx等文件供用户下载打印等。
用Java操作word文档,毫无疑问,当下最流行apache poi,对于poi如何操作word文档,这里不作过多介绍。
这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。
官方网站
Maven
<dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.3.1</version> </dependency>
实战内容
以下源码已经上传再我的开源项目里面的spring-cloud-study-poi
https://github.com/moshowgame/spring-cloud-study说先是新建模板word文档(。docx格式,2007/2013/2016新格式的)
运行效果核心实现代码
@RestController public class PoiController { @GetMapping("/generateWord") public ApiReturnObject generateWord(String data){ //图片路径,请注意你是linux还是windows String wordPath="C:\\Users\\Administrator\\Desktop\\"; String modelName="人物模板.docx"; String outputName="hanyunxi.docx"; Map<String, Object> datas = new HashMap<String, Object>() { { //本地图片 put("name","鞠婧祎"); put("team","前SNH48"); put("gender","女"); put("birthday","19940618"); put("remark","鞠婧祎,1994年6月18日出生于四川遂宁,毕业于四川音乐学院附属中学,中国女演员、歌手,原SNH48 TEAM NII成员[1]。2013年9月5日,升格为SNH48 TEAM NII二期生正式成员;11月2日,以《剧场女神》公演正式出道。2014年6月7日,拍摄个人首支MV《足球派对》;7月26日,参加SNH48“一心向前”演唱会暨SNH48第一届总选举,演唱《流着泪微笑》并获SNH48总选举第四名。2015年1月15日,发行出道两周年EP《青春的约定》。2016年12月10日,获“星光大赏”年度新锐电视剧女演员。2017年1月1日,参加安徽卫视《国剧盛典》;3月27日,获第24届东方风云榜音乐盛典“年度飞跃歌手”奖[2];5月4日,获团中央“五四优秀青年”称号;5月25日,发行第二张个人EP《等不到你》;[3]7月29日,参加“我心翱翔”第四届总选举发布演唱会,获得SNH48第四届总选举第1名;[4]12月15日,SNH48官方宣布,鞠婧祎正式从SNH48 Group单飞、成立个人工作室。2018年3月26日,获第25届《东方风云榜》音乐盛典年度跨界艺人奖。7月28日,参加湖南卫视综艺节目《快乐大本营》。"); put("active",new NumbericRenderData(new ArrayList<TextRenderData>(){{ add(new TextRenderData("FF00FF", "2013年 以《剧场女神》公演正式出道")); add(new TextRenderData("FF00FF", "2014年 拍摄个人首支MV《足球派对》")); add(new TextRenderData("FF00FF", "2015年 发行出道两周年EP《青春的约定》")); add(new TextRenderData("FF00FF", "2016年 主演玄幻剧《九州天空城》")); }})); put("tables", new TableRenderData(new ArrayList<RenderData>(){{ add(new TextRenderData("d0d0d0", "节目")); add(new TextRenderData("d0d0d0", "次数")); }},new ArrayList<Object>(){{ add("《SNH星剧院公演》;999"); add("《敢ZUO敢为女声秀》;4"); add("《快乐大本营》;2"); }}, "no datas", 10600)); // //网路图片 put("picture", new PictureRenderData(200, 250, ".png", BytePictureUtils.getUrlByteArray("https://pic.baike.soso.com/ugc/baikepic2/18293/cut-20170602162513-2088410512.jpg/300"))); } }; XWPFTemplate template = XWPFTemplate.compile(wordPath+modelName) .render(datas); FileOutputStream out; try { out = new FileOutputStream(wordPath+outputName); template.write(out); out.flush(); out.close(); template.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ApiReturnUtil.success(data); } }
支持的模板标签
- 文本模板{{var}}
put("author", new TextRenderData("000000", "Sayi卅一")); put("introduce", "http://www.deepoove.com");
- 图片模板{{@var}}
// 本地图片 put("localPicture", new PictureRenderData(120, 120, "./sayi.png")); // 本地图片byte数据 byte[] localByteArray = BytePictureUtils.getLocalByteArray(new File("./logo.png")); put("localBytePicture", new PictureRenderData(100, 120, ".png", localByteArray)); // 网络图片 put("urlPicture", new PictureRenderData(100, 100, ".png", BytePictureUtils.getUrlByteArray("https://avatars3.githubusercontent.com/u/1394854"))); // java 图片 put("bufferImagePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getBufferByteArray(bufferImage)));
- 表格模板{{#var}}
put("changeLog", new TableRenderData(new ArrayList<RenderData>(){{ add(new TextRenderData("d0d0d0", "")); add(new TextRenderData("d0d0d0", "introduce")); }},new ArrayList<Object>(){{ add("1;add new # gramer"); add("2;support insert table"); add("3;support more style"); }}, "no datas", 10600));
- 列表模板{{*var}}
put("feature", new NumbericRenderData(new ArrayList<TextRenderData>() { { add(new TextRenderData("Plug-in grammar")); add(new TextRenderData("Supports word text, header...")); add(new TextRenderData("Not just templates, but also style templates")); } }));
- 文档模板{{+var}}
List<SegmentData> segments = new ArrayList<SegmentData>(); SegmentData s1 = new SegmentData(); s1.setTitle("经常抱怨的自己"); s1.setContent("每个人生活得都不容易,经常向别人抱怨的人,说白了就是把对方当做“垃圾场”,你一股脑地将自己的埋怨与不满倒给别人,自己倒是爽了,你有考虑过对方的感受吗?对方的脸上可能一笑了之,但是心里可能有一万只草泥马奔腾而过。"); segments.add(s1); SegmentData s2 = new SegmentData(); s2.setTitle("拖拖拉拉的自己"); s2.setContent("能够今天做完的事情,不要拖到明天,你的事情没有任何人有义务去帮你做;不要做“宅男”、不要当“宅女”,放假的日子约上三五好友出去转转;经常动手做家务,既能分担伴侣的负担,又有一个干净舒适的环境何乐而不为呢?"); segments.add(s2); put("docx_word", new DocxRenderData(new File("~/segment.docx"), segments));
可能的报错
如果出现这个错误,要判断文件后缀名是doc,还是docx。
对POI来说,如果是doc,使用HSSFWorkbook;如果是docx,使用XSSFWorkbook。
而POI-TL封装的是docx的版本,现在是主流格式,所以推荐用这个,当然,输出文件随意,你输出文件名弄成doc也ok(格式)org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF) at org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:184) at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:241) at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:98) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:116) at com.deepoove.poi.NiceXWPFDocument.<init>(NiceXWPFDocument.java:85) at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:129) at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:110) at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:78) at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:74) at com.softdev.system.demo.controller.PoiController.generateWord(PoiController.java:51)
-
软件系统结构与开发环境实验报告-绘制UML图以及java编程-范本65.docx
2020-05-12 20:44:02实验二 绘制UML图以及java编程 实验目的 学习如何在Rational Rose上制作UML图 熟悉java开发环境及编程 实验内容 1Rational Rose绘制UML图 1Rational Rose的安装 A.解压缩 Rational rose2003.iso文件 B.安装解压缩后... -
软件系统结构与开发环境实验报告-绘制UML图以及java编程-范本18.docx
2020-05-12 20:42:50实验二 绘制UML图以及java编程 实验目的 学习如何在Rational Rose上制作UML图 熟悉java开发环境及编程 实验内容 1Rational Rose绘制UML图 1Rational Rose的安装 A.解压缩 Rational rose2003.iso文件 B.安装解压缩后... -
软件系统结构与开发环境实验报告-绘制UML图以及java编程-范本92.docx
2020-05-12 20:44:33实验二 绘制UML图及java编程 实验目的 学习如何在Rational Rose上制作UML图 熟悉java开发环境及编程 实验内容 1Rational Rose绘制UML图 1Rational Rose的安装 A.解压缩 Rational rose2003.iso文件 B.安装解压缩后的.... -
[李涛] 大众摄影数字课堂 集全12集及素材.docx
2019-08-16 16:30:04本期,让我们一同走进Cinemagraph,并揭开其拍摄和后期制作的面纱。 第十期 Lab Photoshop中的Lab颜色模式,在很多人看来非常的神秘,而通过其产生的丰富而玄幻的色彩效果又让人无比着迷。想了解Lab模式的前世... -
关于如何使用freemarker导出word(.doc)
2020-07-09 21:49:27首先你需要新建一个.docx文件,然后将需要替换的地方用${xxxxxx}代替,如下: 完成填充之后将此文档的后缀改成.ftl 至此我们的word模板已经做好了,将他静静的躺在那里,待会我们会用到它。 java代码中,将...## 2020上半年也已经过去,自己也从大三的学生走上实习的岗位,最近业务上需要导出word,自己也弄了两天,在这里记录一下自己的成长
-
制作模板
首先你需要新建一个.docx文件,然后将需要替换的地方用${xxxxxx}代替,如下:
-
完成填充之后将此文档的后缀改成.ftl
-
至此我们的word模板已经做好了,将他静静的躺在那里,待会我们会用到它。
-
java代码中,将需要替换的内容以map的形式存进去
Map<String, Object> map = new HashMap<String, Object>(); //课程名称 map.put("kcmc",""); map.put("kclx", "课程类型"); //一级学科 map.put("yjxk","一级学科"); map.put("ejxk", "二级学科");
-
利用模板输出新的doc
configuration.setClassForTemplateLoading(this.getClass(), "/template"); //此为代码中的相对路径 Template t=null; try { //test.ftl为要装载的模板 t = configuration.getTemplate("fctestpaper.ftl"); } catch (IOException e) { e.printStackTrace(); } //输出文档路径及名称 File outFile = new File("E:/outFile.doc"); //想要输出的路径 Writer out = null; FileOutputStream fos=null; try { fos = new FileOutputStream(outFile); OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8"); //这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。 //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); out = new BufferedWriter(oWriter); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(map, out); //重要 out.close(); fos.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //System.out.println("---------------------------"); }
导入项目
-
-
如何用R来定制个性化PPT
2018-05-17 13:56:00它可以格式化R的输出:如可编辑的矢量图,复杂的表格报告...本文演示的是如何用它来制作PPT文档。 入门 创建一个pptx对象 通过pptx函数创建的一个R对象可以表示一个PPT文档。它包含两个参数:标题和模板文件... -
HTML笔记
2020-02-28 10:36:56文件扩展名 Word.docx Excel.xlsx PPT.pptx ...由各种标签组成,用来制作网页,让浏览器该如何显示页面 2.作用 制作网页,控制网页和内容的显示 插入图片,音乐,视频,动画等多媒体 通过链接检索信息 使用... -
HTML5笔记+案例
2020-06-23 10:07:34由各种标签组成,用来制作网页,让浏览器该如何显示页面 2.作用 制作网页,控制网页和内容的显示 插入图片,音乐,视频,动画等多媒体 通过链接检索信息 使用表单获取用户的数据,实现交互 3.HTML版本 ... -
若干源程序资料12.rar
2012-06-11 22:11:262012-06-11 21:43 1,480,155 Direct3D加载3d文件.rar 2012-06-11 21:29 22,102 DSP编程一周通.rar 2012-06-11 21:04 837,926 fatfs-0.08b.zip 2012-06-11 21:11 48,640 FFT算法.doc 2012-06-11 21:28 10,891,658 GPS... -
新增各地控规文件 一:认识杭州从板块说起 1.房产板块划分图 2.杭州行政区域主城区 3.杭州其他区域行政划分 4.19大后杭州的重点建设区域划分和定位 5.两个主中心 6.七大城市副中心 7.2017年杭州各板块地王及楼面...