Word文件加密处理

  • Word文件的加密处理
    • 具体实现

Word文件的加密处理

最近完成了一个使用freemark生成文档的需求。本次实现使用的是freemark模板技术。

具体实现

首先使用wps或者word编辑模板内容,然后把编辑好的模板文件另存为xml(可以把文件后缀名改成ftl也可以不做修改)

  1. 编辑生成文档工具类

package cn.linkey.rulelib.ProcessChg.template;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.codec.binary.Base64;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;public class DocUtil {public Configuration configure=null;public DocUtil(){configure=new Configuration();configure.setClassicCompatible(true);configure.setDefaultEncoding("utf-8");}/*** 根据Doc模板生成word文件* @param dataMap 需要填入模板的数据* @param downloadType 文件名称* @param savePath 保存路径*/public void createDoc(Map<String,Object> dataMap,String downloadType,String savePath){try {//加载需要装填的模板Template template=null;//设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。//加载模板文件,放在testDoc下configure.setClassForTemplateLoading(this.getClass(), "/cn/linkey/rulelib/ProcessChg/template");//设置对象包装器
//            configure.setObjectWrapper(new DefaultObjectWrapper());//设置异常处理器configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);//定义Template对象,注意模板类型名字与downloadType要一致template=configure.getTemplate(downloadType+".ftl");File outFile=new File(savePath);Writer out=null;out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));template.process(dataMap, out);out.close();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}}public String getImageStr(String imgFile){InputStream in=null;byte[] data=null;File buffile = new File(imgFile);if (buffile.isFile()&&buffile.exists()) {try {in=new FileInputStream(imgFile);data=new byte[in.available()];in.read(data);in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return new String(Base64.encodeBase64(data));}return "";}
}
  1. 通过使用DocUtil中的createDoc方法就能实现生成文档的功能,但是生成的文档是可以编辑修改的,用户要求需要生成不能修改的文档。这是处理的方式有两种:
    a. 重新使用word或者wps编辑文档,并且进行加密处理后另存为xml文件,使用这样的方式重新生成的文档就是加密类型的了;
    b.直接在已有的xml文件上进行修改,加上加密处理。

由于模板文件过于复杂且使用了freemark标签处理过,重新制作模板工作量过大所以采用了第二种方式,在已有的模板上进行修改。

  1. 打开xml后直接一脸懵逼,全是xml标签,各个标签的具体含义是什么也不清楚,百度上没找不到答案,完全无从下手的。
  2. 最后采用制作两个空文档,一个加密一个不加密,然后对比着两个文档的xml发现的密码的设置xml,具体如下。
<w:settings xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"xmlns:v="urn:schemas-microsoft-com:vml"xmlns:w10="urn:schemas-microsoft-com:office:word"xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main"><w:documentProtection w:edit="readOnly" w:formatting="1" w:enforcement="1" w:cryptProviderType="rsaFull" w:cryptAlgorithmClass="hash" w:cryptAlgorithmType="typeAny" w:cryptAlgorithmSid="4" w:cryptSpinCount="50000" w:hash="gj5vzdTdA9MYp0Ty6TbYBFWkveg=" w:salt="g9mmpbq6JkWtZGFh0Kk8Tg=="/><w:proofState w:spelling="clean" w:grammar="clean"/><w:documentProtection w:edit="readOnly" w:formatting="1" w:enforcement="1"/>

标签“w:documentProtection ”设置只读和解锁密码。默默的把这一行给之前的文档加上。嘿嘿重新生成的文档就变成加密类型的了。

Freemark生成Word文件的加密处理相关推荐

  1. JSP生成word文件

    1.jsp生成word文件,直接改动jsp格式: <%@ page contentType="application/vnd.ms-word;charset=GB2312"% ...

  2. Java技术:SpringBoot集成FreeMarker生成word文件

                    今天给大家分享SpringBoot集成FreeMarker模板引擎生成word文件的用法,感兴趣的可以学一下,完整源码地址在文章末尾处,欢迎互相沟通交流! 一.什么是F ...

  3. php如何生成本地文档,php如何生成word文件

    php生成word文件的方法: 需求: 甲方爸爸说"我有一个word文件,里面是关于用户信息的表格,你帮我把系统里面所有用户数据都按照这个文件导出来给我": 我当时就不乐意了,啪的 ...

  4. Java使用iText生成word文件的完美解决方案(亲测可行)

    JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ...

  5. Java使用iText生成word文件的解决方案

    JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案 一种是pio但是他的excel处理很程序 wor ...

  6. java itext word_Java使用iText生成word文件的解决方案 | 学步园

    转自[http://www.31km.cn/post/450.html] JAVA生成WORD文件的方法目前有以下种: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操 ...

  7. PHP导出word【 直接生成word文件 】

     使用composer安装PHPword: composer require phpoffice/phpword  直接生成word文件: public function makePhpWord(){ ...

  8. Python 自动化教程(5) : 自动生成Word文件

    系列教程: Python 自动化教程(1) 概述,第一篇 Excel自动化 Python 自动化教程(2) : Excel自动化:使用pandas库 Python 自动化教程(3) : 自动生成PPT ...

  9. 艺赛旗(PRA)根据制式模板批量生成 word 文件

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 请看程序运行过程: 操作 word 其实是一件很痛苦的 ...

最新文章

  1. 树莓派python实例_树莓派3 搭建 django 服务器的实例
  2. Apache Shiro和Spring Security的详细对比
  3. Codeforces Round #498 (Div. 3)【完结】
  4. boost::graph模块实现内部属性图的测试程序
  5. 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测
  6. jpa 查询集合_避免懒惰的JPA集合
  7. java 检索ldap,从LDAP(Java)检索信息
  8. ise仿真添加信号_「干货」推荐一款FPGA仿真调试鸟枪换炮的工具
  9. QT+OpenGL中glTexImage2D不生效问题
  10. 别怕,“卷积”其实很简单
  11. 模式识别(五)聚类的几种算法
  12. 司守奎《数学建模算法与应用》 第二版
  13. 个人设想中的TCAX GUI生成的带python脚本代码的ASS字幕文件
  14. 作为研发面试官,亲自教你面试技巧
  15. SYD8811/SYD8810 一拖一离线批量烧录板(FD1201)使用说明
  16. 去哪查阅ISO国际标准?
  17. Android蓝牙打印小票,仿美团外卖小票打印
  18. python sort函数
  19. IntelliJ Idea入门教程:如何新建项目
  20. swustoj木材加工(0436)

热门文章

  1. 路由器DMZ简单解说
  2. javaspringboot面试题,java面试问职业规划
  3. 会声会影2023最新中文旗舰版新功能介绍
  4. 颜水成 等 | 《深度长尾学习》综述
  5. mysql里面除号写法_Mysql之常见函数
  6. SAP ABAP 检查物料账期函数
  7. 大数据时代从繁乱冗杂中精准提取核心文本信息 × Python Tkinter 生成词云图
  8. MOS管GS两端并联阻容的作用分析
  9. 【烈日炎炎战后端】Git(0.1万字)
  10. 强人工智能和弱人工智能的区别,你知道吗?