2019-09-10(ARTS第四周)

一个算法

待完成

一篇英文翻译

BPMN Workflow Engine :工作流引擎 是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。工作流引擎包括流程的节点管理、流向管理、流程样例管理等重要功能。
Model:Create BPMN workflow diagrams and DMN decision tables in an editor that both business users and developers love to use.
模型:在商业用户和开发人员都喜欢使用的编辑器中创建BPMN工作流程图和DMN决策表
Execute :Execute your workflows and decisions in powerful engines that are paired with essential applications for process automation projects.
执行:在强大的引擎中执行您的工作流程和决策,这些引擎与流程自动化项目的基本应用程序配对。

一个总结

WORD版本的报告导出
思路:
    抽象章节概念,每一段落都包含一个或多个章节;
    又因为段落也是随机配置的,故固定每一个章节的模板。每次新增新的章节,则做好该章节的模板(因为由不同的层级,建议做多个层级的模板),再根据段落章节的配置顺序及层级,合并不同章节模板。生成本次配置的报告模板

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
import org.apache.commons.io.IOUtils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class POIMergeDocUtil {
    public static void main(String[] args) throws Exception {

        String[] srcDocxs = {"e:\\temp\\temp.docx","e:\\temp\\test.docx"};
        String destDocx = "e:\\temp\\wzxz_new.docx";
        mergeDoc(srcDocxs, destDocx);
    }
    /**
     * 合并docx文件
     * @param srcDocxs 需要合并的目标docx文件
     * @param destDocx 合并后的docx输出文件
     */
    public static void mergeDoc(String[] srcDocxs,String destDocx){

        OutputStream dest = null;
        List opcpList = new ArrayList();
        int length = null == srcDocxs ? 0 : srcDocxs.length;
        /**
         * 循环获取每个docx文件的OPCPackage对象
         */
        for (int i = 0; i < length; i++) {
            String doc = srcDocxs[i];
            OPCPackage srcPackage =  null;
            try {
                srcPackage = OPCPackage.open(doc);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(null != srcPackage){
                opcpList.add(srcPackage);
            }
        }

        int opcpSize = opcpList.size();
        //获取的OPCPackage对象大于0时,执行合并操作
        if(opcpSize > 0){
            try {
                dest = new FileOutputStream(destDocx);
                XWPFDocument src1Document = new XWPFDocument(opcpList.get(0));
                CTBody src1Body = src1Document.getDocument().getBody();
                //OPCPackage大于1的部分执行合并操作
                if(opcpSize > 1){
                    for (int i = 1; i < opcpSize; i++) {
                        OPCPackage src2Package = opcpList.get(i);
                        XWPFDocument src2Document = new XWPFDocument(src2Package);
                        CTBody src2Body = src2Document.getDocument().getBody();
                        appendBody(src1Body, src2Body);
                    }
                }
                //将合并的文档写入目标文件中
                src1Document.write(dest);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //注释掉以下部分,去除影响目标文件srcDocxs。
                /*for (OPCPackage opcPackage : opcpList) {
                    if(null != opcPackage){
                        try {
                            opcPackage.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }*/
                //关闭流
                IOUtils.closeQuietly(dest);
            }
        }


    }

    /**
     * 合并文档内容
     * @param src 目标文档
     * @param append 要合并的文档
     * @throws Exception
     */
    private static void appendBody(CTBody src, CTBody append) throws Exception {
        XmlOptions optionsOuter = new XmlOptions();
        optionsOuter.setSaveOuter();
        String appendString = append.xmlText(optionsOuter);
        String srcString = src.xmlText();
        String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
        String mainPart = srcString.substring(srcString.indexOf(">") + 1,
                srcString.lastIndexOf("<"));
        String sufix = srcString.substring(srcString.lastIndexOf("<"));
        String addPart = appendString.substring(appendString.indexOf(">") + 1,
                appendString.lastIndexOf("<"));
        CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart
                + sufix);
        src.set(makeBody);
    }
}

合并docx模板文档的工具类

一篇文章

https://www.cnblogs.com/lexiaofei/p/7203790.html
对于oauth中access_token的传递接收的源码解读
默认会取http请求头header中的Authorization参数 且值必须是以bearer开头的。如果没有,则从请求参数中
取access_token得值。

你可能感兴趣的:(2019-09-10(ARTS第四周))