java 中FreeMaker的使用(excel、word),涉及解压缩

java 中FreeMaker的使用(excel、word),涉及解压缩

最近在项目中,涉及到很多(word、excel)导入、导出的功能,word 版的搞得好久 涉及到单选框 、 附件、文本、图片。记录下来希望对有这方面需求的同学有所帮助:

word 导出篇

最终效果(写入后单选框可点击,附件点击可解压)
在这里插入图片描述
先来关键代码
1:maven依赖

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

2:配置类

 

import freemarker.template.TemplateException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import java.io.IOException;
import java.util.Properties;

/**
 * @author 一阵小风儿-来无影去无踪
 * @history 修订历史(历次修订内容、修订人、修订时间等)
 **/
@Configuration
public class FreeMakerConfigure {
    @Bean
    public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
        FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
        factory.setTemplateLoaderPath("classpath:/templates/");
        factory.setDefaultEncoding("UTF-8");
        factory.setPreferFileSystemAccess(true);
        FreeMarkerConfigurer result = new FreeMarkerConfigurer();
        freemarker.template.Configuration configuration = factory.createConfiguration();
        configuration.setClassicCompatible(true);
        result.setConfiguration(configuration);
        Properties settings = new Properties();
        settings.put("template_update_delay", "0");
        settings.put("default_encoding", "UTF-8");
        settings.put("number_format", "0.######");
        settings.put("classic_compatible", true);
        settings.put("template_exception_handler", "ignore");
        result.setFreemarkerSettings(settings);
        return result;
    }

}

3:模板的生成
这个我也是参考链接: sun_flower火柴人.(站在别人的肩膀 我能看的更高。。。。。。舒服。。。。。一时,后来我发现对于单选框,附件还是要自己搞能搜的资料真的很少,可是模板的样式真的很赞 不愿意用poi 编写样式,于是我继续钻。。。。。)
Alt

4:模板位置
moban
5:我的模板导出是直接在批量导出的功能中 、可自行忽略压缩输出

    @Override
    public void getDownLoadInfo(List<String> ids, HttpServletResponse response) throws Exception {
        if (!CollectionUtils.isEmpty(ids)) {
            //response 输出流
            ServletOutputStream out = null;
            //压缩输出流
            ZipOutputStream zipOutputStream = null;
            InputStream input = null;
            try {
                String title = "测试.zip";
                response.setContentType("application/octet-stream;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title, "UTF-8"));
                out = response.getOutputStream();
                zipOutputStream = new ZipOutputStream(out);
                Map<String, Object> map = new LinkedHashMap<>();
                List<Object> recordDtos = new ArrayList<>();
                for (Object record : recordDtos) {
                    String  dir="每个具体文件路径";
                    ExportMyWord emw = new ExportMyWord();
                    map.put("字段A", "A值");
                    map.put("字段B", "B值");
                    map.put("字段C", "C值");
                    String fileName = File.separator + dir + File.separator +  "测试.doc";
                    emw.createWord(map, "demo.ftl", fileName);
                    try {
                        File file = new File(fileName);
                        input = new FileInputStream(file);
                        ZipEntry z = new ZipEntry(fileName);
                        zipOutputStream.putNextEntry(z);

                        byte[] bytes = new byte[1024 * 50];
                        int len = -1;
                        //解释这个fis.read(bytes)的意思:从读取流"读取数组长度"的数据(打印len可知),并放入数组
                        while ((len = input.read(bytes, 0, 1024)) != -1) {
                            //虽然数组长度的*5,但是这里我们设置了1024所以每次输出1024
                            //因为每次得到的是新的数组,所以每次都是新数组的"0-len"
                            zipOutputStream.write(bytes, 0, len);
                        }
                        List<Object> enclosureTS =new ArrayList<>();
                        for (Object complaintEnclosure : enclosureTS) {
                          //附件压缩到指定包结构中
                        }
                    } finally {
                        if (input != null) {
                            input.close();
                        }
                        FileUtil.clearFiles(fileName);
                        FileUtil.clearFiles(File.separator + dir);
                    }
                }
                zipOutputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //注意关闭顺序,否则可能文件错误
                if (zipOutputStream != null) {
                    zipOutputStream.closeEntry();
                    zipOutputStream.finish();
                    zipOutputStream.close();
                }
                if (input != null) {
                    input.close();
                }
                if (out != null) {
                    out.close();
                }

            }
        }

    }


上面的基本可以满足 文本 图片的需要,下面是我自己的100%原创 基本想法(尝试了很多)
由于单选框和附件是属于ole 对象 操作的后的数据都是加密后的类似这样的数据
183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0oDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP//…
不同与图片的base64 可以编码写入、解码解析。加密方式没有找到网上资料ooxml很少。
6:单选框的写入,最后使用了笨方法,害。。

    <#if whetherSolve == "0">
        <pkg:part pkg:name="/word/media/image1.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAAz0DAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BQAAAAsCAAAAAAUAAAAMAiQA2AAFAAAAAQL///8ABQAAAC4BAAAAAAUAAAACAQEAAAAcAAAA+wLr /wAAAAAAALwCAAAAhgBAACLLzszlAH3gdeg613VAAAAAsDovAZc02HVAfeB1AAAAAAQAAAAtAQEA BQAAAAkCAAAAABcAAAAyCgcAGAAIAAQAGAAHANUAHADIq7K/veK+9hYAAAAWAAAAFgAAABYAAAAE AAAALQEBAAQAAAAtAQAACQAAAB0GIQDwABMAEwAIAAEASQAAAEAJxgCIAAAAAAATABMACAABACgA AAATAAAAEwAAAAEAAQAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//4AD//+AA/gfg APgB4ADwAOAA4ABgAOAAYADAACAAwAAgAMAAIADAACAAwAAgAMAAIADgAGAA4ABgAPAA4AD4AeAA /gfgAP//4ABZAgAAQAmGAO4AAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQAYAAAAAAB0BAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4+Pj4+Pj4+Pj 4+Pj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoP///+Pj4+Pj4/// /+Pj4+Pj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoGlpaf// /+Pj4wAAAAAAAAAAAAAAAAAAAAAAAKCgoGlpaf///wAA AAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAAAAAKCgoGlpaWlpaf///wAA AAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlp af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCg oGlpaWlpaf///wAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAA AAAAAKCgoGlpaf///wAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAA AAAAAAAAAKCgoKCgoGlpaf///2lpaf///wAAAAAAAAAA AAAAAAAAAAAAAAAAAKCgoKCgoGlpaWlpaf///2lpaWlpaaCgoKCgoAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoGlpaWlpaWlpaWlpaWlpaWlpaaCgoKCgoAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAQAAAAnAf//AwAAAAAA</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image2.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0oDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AADYei8BlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAAFwAAADIKBwAYAAgABAAYAAcA1QAc ALK/t9a94r72FgAAABYAAAAWAAAAFgAAAAQAAAAtAQEABAAAAC0BAAAJAAAAHQYhAPAAEwATAAgA AQBJAAAAQAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQABAAAAAABMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA4ADgAGAA4ABgAMAAIADAACAAwAAgAMAA IADAACAAwAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///gAFkCAABACYYA7gAAAAAAEwATAAgAAQAo AAAAEwAAABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA4+Pj4+Pj4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCg4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCgoKCgaWlp4+PjAAAAAAAAAAAA AAAAAAAAAAAAoKCgaWlp4+PjAAAAAAAA AAAAAAAAAAAAoKCgaWlpaWlp4+Pj4+Pj AAAAAAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp aWlpAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCg oKCgoKCgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image3.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA1YDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AADY2C8BlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAADgAAADIKBwAYAAIABAAYAAcA1QAc AM60FgAAAAQAAAAtAQEAEQAAADIKBwAuAAQABAAYAAcA1QAcAL3ivvYWAAAAFgAAAAQAAAAtAQEA BAAAAC0BAAAJAAAAHQYhAPAAEwATAAgAAQBJAAAAQAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAAT AAAAAQABAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA 4ADgAGAA4ABgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///g AFkCAABACYYA7gAAAAAAEwATAAgAAQAoAAAAEwAAABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCg4+Pj4+Pj4+Pj 4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCg aWlp4+PjAAAAAAAAAAAAAAAAAAAAAAAA oKCgoKCgaWlpaWlpAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCgoKCgaWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlpaWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
    <#elseif whetherSolve == "1">
        <pkg:part pkg:name="/word/media/image1.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0oDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AABQ3A8BlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAAFwAAADIKBwAYAAgABAAYAAcA1QAc AMirsr+94r72FgAAABYAAAAWAAAAFgAAAAQAAAAtAQEABAAAAC0BAAAJAAAAHQYhAPAAEwATAAgA AQBJAAAAQAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQABAAAAAABMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA4ADgAGAA4ABgAMAAIADAACAAwAAgAMAA IADAACAAwAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///gAFkCAABACYYA7gAAAAAAEwATAAgAAQAo AAAAEwAAABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA4+Pj4+Pj4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCg4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCgoKCgaWlp4+PjAAAAAAAAAAAA AAAAAAAAAAAAoKCgaWlp4+PjAAAAAAAA AAAAAAAAAAAAoKCgaWlpaWlp4+Pj4+Pj AAAAAAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp aWlpAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCg oKCgoKCgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image2.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAAz0DAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BQAAAAsCAAAAAAUAAAAMAiQA2AAFAAAAAQL///8ABQAAAC4BAAAAAAUAAAACAQEAAAAcAAAA+wLr /wAAAAAAALwCAAAAhgBAACLLzszlAH3gdeg613VAAAAAMD4PAZc02HVAfeB1AAAAAAQAAAAtAQEA BQAAAAkCAAAAABcAAAAyCgcAGAAIAAQAGAAHANUAHACyv7fWveK+9hYAAAAWAAAAFgAAABYAAAAE AAAALQEBAAQAAAAtAQAACQAAAB0GIQDwABMAEwAIAAEASQAAAEAJxgCIAAAAAAATABMACAABACgA AAATAAAAEwAAAAEAAQAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//4AD//+AA/gfg APgB4ADwAOAA4ABgAOAAYADAACAAwAAgAMAAIADAACAAwAAgAMAAIADgAGAA4ABgAPAA4AD4AeAA /gfgAP//4ABZAgAAQAmGAO4AAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQAYAAAAAAB0BAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4+Pj4+Pj4+Pj 4+Pj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoP///+Pj4+Pj4/// /+Pj4+Pj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoGlpaf// /+Pj4wAAAAAAAAAAAAAAAAAAAAAAAKCgoGlpaf///wAA AAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAAAAAKCgoGlpaWlpaf///wAA AAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlp af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCg oGlpaWlpaf///wAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAA AAAAAKCgoGlpaf///wAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAA AAAAAAAAAKCgoKCgoGlpaf///2lpaf///wAAAAAAAAAA AAAAAAAAAAAAAAAAAKCgoKCgoGlpaWlpaf///2lpaWlpaaCgoKCgoAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoGlpaWlpaWlpaWlpaWlpaWlpaaCgoKCgoAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAQAAAAnAf//AwAAAAAA</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image3.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0cDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AABQGw8BlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAAFAAAADIKBwAYAAYABAAYAAcA1QAc AM60veK+9hYAAAAWAAAAFgAAAAQAAAAtAQEABAAAAC0BAAAJAAAAHQYhAPAAEwATAAgAAQBJAAAA QAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQABAAAAAABMAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA4ADgAGAA4ABgAMAAIADAACAAwAAgAMAAIADAACAA wAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///gAFkCAABACYYA7gAAAAAAEwATAAgAAQAoAAAAEwAA ABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 4+Pj4+Pj4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA oKCg4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAA oKCgoKCgaWlp4+PjAAAAAAAAAAAAAAAAAAAA AAAAoKCgaWlp4+PjAAAAAAAAAAAAAAAA AAAAoKCgaWlpaWlp4+Pj4+PjAAAAAAAA AAAAAAAAoKCgaWlp4+PjAAAA AAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp aWlpAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlpaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgoKCg oKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
    <#else>
        <pkg:part pkg:name="/word/media/image1.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0oDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AADQF28AlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAAFwAAADIKBwAYAAgABAAYAAcA1QAc AMirsr+94r72FgAAABYAAAAWAAAAFgAAAAQAAAAtAQEABAAAAC0BAAAJAAAAHQYhAPAAEwATAAgA AQBJAAAAQAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQABAAAAAABMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA4ADgAGAA4ABgAMAAIADAACAAwAAgAMAA IADAACAAwAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///gAFkCAABACYYA7gAAAAAAEwATAAgAAQAo AAAAEwAAABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA4+Pj4+Pj4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCg4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCgoKCgaWlp4+PjAAAAAAAAAAAA AAAAAAAAAAAAoKCgaWlp4+PjAAAAAAAA AAAAAAAAAAAAoKCgaWlpaWlp4+Pj4+Pj AAAAAAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp aWlpAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCg oKCgoKCgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image2.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAA0oDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BAAAAC0BAAAJAAAAHQYhAPAAJADDAAAAFQAFAAAACwIAAAAABQAAAAwCJADYAAUAAAABAv///wAF AAAALgEAAAAABQAAAAIBAQAAABwAAAD7Auv/AAAAAAAAvAIAAACGAEAAIsvOzOUAfeB16DrXdUAA AADw2G8AlzTYdUB94HUAAAAABAAAAC0BAQAFAAAACQIAAAAAFwAAADIKBwAYAAgABAAYAAcA1QAc ALK/t9a94r72FgAAABYAAAAWAAAAFgAAAAQAAAAtAQEABAAAAC0BAAAJAAAAHQYhAPAAEwATAAgA AQBJAAAAQAnGAIgAAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQABAAAAAABMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAD///8A///gAP//4AD+B+AA+AHgAPAA4ADgAGAA4ABgAMAAIADAACAAwAAgAMAA IADAACAAwAAgAOAAYADgAGAA8ADgAPgB4AD+B+AA///gAFkCAABACYYA7gAAAAAAEwATAAgAAQAo AAAAEwAAABMAAAABABgAAAAAAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA4+Pj4+Pj4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCg4+Pj4+Pj4+Pj4+PjAAAAAAAAAAAAAAAAAAAA AAAAAAAAoKCgoKCgaWlp4+PjAAAAAAAAAAAA AAAAAAAAAAAAoKCgaWlp4+PjAAAAAAAA AAAAAAAAAAAAoKCgaWlpaWlp4+Pj4+Pj AAAAAAAAAAAAAAAAoKCgaWlp4+Pj AAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAoKCgaWlpaWlp 4+Pj4+PjAAAAAAAAAAAAAAAAAAAAoKCgaWlp 4+PjAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlp aWlpAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgoKCgaWlpaWlp aWlpaWlpaWlpaWlpoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCg oKCgoKCgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACcB//8DAAAAAAA=</pkg:binaryData>
        </pkg:part>
        <pkg:part pkg:name="/word/media/image3.wmf" pkg:contentType="image/x-wmf">
            <pkg:binaryData>183GmgAAAAAAANgAJACQAAAAAAB9VwEACQAAAzoDAAACAFkCAAAAAAQAAAADAQgABQAAAAsCAAAA AAUAAAAMAiQA2AADAAAAHgAHAAAA/AIAAP///wAAAAQAAAAtAQAACQAAAB0GIQDwACQA2AAAAAAA BQAAAAsCAAAAAAUAAAAMAiQA2AAFAAAAAQL///8ABQAAAC4BAAAAAAUAAAACAQEAAAAcAAAA+wLr /wAAAAAAALwCAAAAhgBAACLLzszlAH3gdeg613VAAAAAyHpvAJc02HVAfeB1AAAAAAQAAAAtAQEA BQAAAAkCAAAAABQAAAAyCgcAGAAGAAQAGAAHANUAHADOtL3ivvYWAAAAFgAAABYAAAAEAAAALQEB AAQAAAAtAQAACQAAAB0GIQDwABMAEwAIAAEASQAAAEAJxgCIAAAAAAATABMACAABACgAAAATAAAA EwAAAAEAAQAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//4AD//+AA/gfgAPgB4ADw AOAA4ABgAOAAYADAACAAwAAgAMAAIADAACAAwAAgAMAAIADgAGAA4ABgAPAA4AD4AeAA/gfgAP// 4ABZAgAAQAmGAO4AAAAAABMAEwAIAAEAKAAAABMAAAATAAAAAQAYAAAAAAB0BAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4/// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoP///+Pj4+Pj4+Pj 4+Pj4wAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoGlpaf// /+Pj4wAAAAAAAAAAAAAAAAAAAAAAAKCgoGlpaf///wAAAAAAAAAA AAAAAP///+Pj4wAAAAAAAAAAAAAAAAAAAKCgoGlpaWlpaf///wAAAAAAAAAA AAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf///wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAKCgoGlpaWlp af///wAAAAAAAAAAAAAAAAAAAAAAAP///+Pj4+Pj4wAAAAAAAAAAAAAAAAAAAKCg oGlpaf///wAAAAAAAAAAAAAAAP///+Pj4wAAAAAAAAAAAAAAAAAAAAAA AKCgoKCgoGlpaf///2lpaf///wAAAAAAAAAAAAAAAAAA AAAAAAAAAKCgoKCgoGlpaWlpaf///2lpaWlpaaCgoKCgoAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAKCgoKCgoGlpaWlpaWlpaWlpaWlpaWlpaaCgoKCgoAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAQAAAAnAf//AwAAAAAA</pkg:binaryData>
        </pkg:part>
    </#if>

像你看到一样,我观察单选框是全部解决时 pkg 的数据,未解决时的数据,以及部分解决的数据,毫无规律可言,还只是一个选中效果的不同 ,只能以力破题。。。。
我就判断后直接三个作为整体展示 就解决了写入的问题。。。害
7:解析单选框(模板导出的word 底层是xml 无法用正常的poi 解析。。。。用xml 解析还行)

    @Override
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> getInfoInit(MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();
        logger.info("file name is " + filename);
        String fileType = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase(Locale.US);
        String uuid = UUID.randomUUID().toString();
        //判断文件是不是zip类型
        if (fileType.equals("zip")) {
            String desPath = File.separator + uuid.replaceAll("", "");
            String savePath = File.separator;

            FileUtil fileUtil = new FileUtil();
            FileUtil.unZip(file, desPath, savePath);
            new Thread(() -> {
                List<File> fileList = new ArrayList<>();
                fileList = fileUtil.getSubFiles(desPath, fileList);
             
                for (File oneFile : fileList) {
                    if (oneFile.getPath().contains(".doc")) {
                        String[] split = oneFile.getPath().split(".doc");
                        File wordFile = new File(split[0] + ".xml");
                        try {
                            FileUtils.copyFile(oneFile, wordFile);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        // 初始化xml解析工厂
                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        try {
                            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
                        } catch (ParserConfigurationException e) {
                            e.printStackTrace();
                        }
                        try {
                            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
                        } catch (ParserConfigurationException e) {
                            e.printStackTrace();
                        }
                        // 创建DocumentBuilder
                        DocumentBuilder builder = null;
                        try {
                            builder = factory.newDocumentBuilder();
                        } catch (ParserConfigurationException e) {
                            e.printStackTrace();
                        }
                        // 创建解析xml的Document
                        Document doc = null;
                        try {
                            if (builder != null) {
                                doc = builder.parse(wordFile);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        // 递归解析Element
                        assert doc != null;
                        Element element = doc.getDocumentElement();
                        Node childNode = element.getElementsByTagName("w:document").item(0);
                        Element body = gg((Element) childNode, "w:body", 0);
                        Element tbl = gg(body, "w:tbl", 0);
                        Element tr = gg(tbl, "w:tr", 1);
                        Element tc = gg(tr, "w:tc", 0);
                        Element wp = gg(tc, "w:p", 0);
                        Element wr = gg(wp, "w:r", 0);
                        Element wt = gg(wr, "w:t", 0);

                        Element ATr = gg(tbl, "w:tr", 9);
                        String ATextContent = replaceBlank(ATr.getTextContent());

                        Element BTr = gg(tbl, "w:tr", 11);
                        String BTextContent = replaceBlank(BTr.getTextContent());

                        Element solveProcessTr = gg(tbl, "w:tr", 7);
                        Element solveProcesstc = gg(solveProcessTr, "w:tc", 1);
                        Element solveProcesswp = gg(solveProcesstc, "w:p", 0);

                        Map<String, String> ids = new HashMap<>();
                        Element allSolveProcesswr = gg(solveProcesswp, "w:r", 0);
                        Element allSolveProcessObject = gg(allSolveProcesswr, "w:object", 0);
                        Element allSolveProcessShape = gg(allSolveProcessObject, "v:shape", 0);
                        Element allSolveProcessImage = gg(allSolveProcessShape, "v:imagedata", 0);
                        ids.put("全部解决", allSolveProcessImage.getAttributes().getNamedItem("r:id").getTextContent());

                        Element partSolveProcesswp = gg(solveProcesstc, "w:p", 1);
                        Element partSolveProcesswr = gg(partSolveProcesswp, "w:r", 0);
                        Element partSolveProcessObject = gg(partSolveProcesswr, "w:object", 0);
                        Element partSolveProcessShape = gg(partSolveProcessObject, "v:shape", 0);
                        Element partSolveProcessImage = gg(partSolveProcessShape, "v:imagedata", 0);
                        ids.put("部分解决", partSolveProcessImage.getAttributes().getNamedItem("r:id").getTextContent());

                        Element noSolveProcesswp = gg(solveProcesstc, "w:p", 2);
                        Element noSolveProcesswr = gg(noSolveProcesswp, "w:r", 0);
                        Element noSolveProcessObject = gg(noSolveProcesswr, "w:object", 0);
                        Element noSolveProcessShape = gg(noSolveProcessObject, "v:shape", 0);
                        Element noSolveProcessImage = gg(noSolveProcessShape, "v:imagedata", 0);
                        ids.put("未解决", noSolveProcessImage.getAttributes().getNamedItem("r:id").getTextContent());

                        NodeList relationship = element.getElementsByTagName("Relationship");
                        for (int i = 0; i < relationship.getLength(); i++) {
                            Node childNode1 = element.getElementsByTagName("Relationship").item(i);
                            Node target = childNode1.getAttributes().getNamedItem("Target");
                            if (target.toString().contains("media/image")) {

                                String id = childNode1.getAttributes().getNamedItem("Id").getTextContent();
                                if (ids.get("全部解决").equals(id)) {
                                    ids.put("全部解决", target.getTextContent());
                                }
                                if (ids.get("部分解决").equals(id)) {
                                    ids.put("部分解决", target.getTextContent());
                                }
                                if (ids.get("未解决").equals(id)) {
                                    ids.put("未解决", target.getTextContent());
                                }
                            }
                        }

                        NodeList elementsByTagName = element.getElementsByTagName("pkg:part");
                        String whetherSolve = null;
                        for (int i = 0; i < elementsByTagName.getLength(); i++) {
                            Node childNode1 = element.getElementsByTagName("pkg:part").item(i);
                            Element document22 = gg((Element) childNode1, "pkg:binaryData", 0);
                            String textContent = childNode1.getAttributes().getNamedItem("pkg:name").getTextContent();
                            if (textContent.contains("media/image")) {
                                if (document22.getTextContent().contains(CHECK_FLAG)) {
                                    if (textContent.contains(ids.get("全部解决"))) {
                                        whetherSolve = "0";
                                    }
                                    if (textContent.contains(ids.get("部分解决"))) {

                                        whetherSolve = "1";
                                    }
                                    if (textContent.contains(ids.get("未解决"))) {
                                        whetherSolve = "2";
                                    }

                                }
                            }
                        }
                    FileUtil.deleteFile(wordFile);
                        FileUtil.deleteFile(oneFile);
                    } else {
                      //解析附件
                        FileUtil.clearFiles(desPath);
                        FileUtil.deleteFile(oneFile);
                    }
                }
                //最后要删除文件
                FileUtil.clearFiles(desPath);
            }).start();
        }
        return null;
    }
    private static String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
    private static Element gg(Element element, String tagName, int num) {
        Node item = element.getElementsByTagName(tagName).item(num);
        return (Element) item;
    }

写不下了。。。。 书接下文: word中附件的写入与读取.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值