java操作doc(二)——java利用Aspose.Words动态创建自定义doc文档

有关java动态操作word文档,上一篇写了如何使用模板动态设置对于内容以及相关单元格的动态合并问题,详细请参看如下文档:

java利用Aspose.Words操作Word动态模板文档并动态设置单元格合并

这篇文档说说,如何利用Aspose.Words动态创建自定义doc文档,和使用office工具编写doc文档是一个思路,详细请认真阅读。

一、创建案例以及文档创建授权

例如要创建如下案例的文档信息:

需要先获取相关授权信息,关键代码如下,详细请参考java操作doc(一)

java 复制代码
//获取Aspose授权
WordLib.setUnlimitedLicense();

二、doc文档动态自定义创建

java 复制代码
    @PostMapping("/test/{proNo}")
    @ApiOperation("测试使用Aspose创建自定义doc文档")
    public void testAsposeWordsCreateDoc(@PathVariable("proNo") String proNo,
                                         HttpServletResponse response){
        //获取Aspose授权
        WordLib.setUnlimitedLicense();
        try {
            //创建文档
            Document doc = new Document();
            DocumentBuilder docBuild = new DocumentBuilder(doc);
            //创建文档标题样式
            Font font = docBuild.getFont();
            font.setName("宋体");
            font.setSize(16);
            docBuild.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
            docBuild.writeln("Aspose动态创建自定义doc文档");
            //换行
            docBuild.insertBreak(BreakType.PARAGRAPH_BREAK);

            //创建正文信息
            docBuild.getFont().setSize(12);
            docBuild.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
            docBuild.writeln("编号:" + proNo);
            docBuild.getFont().clearFormatting();

            //设置表格填充颜色
            Color color = new Color(224, 223, 223);

            // 创建一个表格并设置整体样式
            docBuild.startTable();
            //创建新的一行
            docBuild.insertCell();
            docBuild.getCellFormat().setWidth(200);
            docBuild.getRowFormat().setHeight(50);
            docBuild.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
            docBuild.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
            //设置表格内容
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("Aspose项目");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("Aspose");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("操作人");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("key");
            //结束当前行
            docBuild.endRow();

            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("项目负责人");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("Aspose.Words");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("测试日期");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write(DateUtil.daFormat(new Date()));
            docBuild.endRow();

            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("测试等级");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("□ A   □ B   ☑ C");
            docBuild.insertCell();
            docBuild.write("阶段");
            docBuild.insertCell();
            docBuild.write("test阶段");
            docBuild.endRow();

            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("测试过程");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("使用Aspose创建自定义doc文档");
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.endRow();

            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("最终结果描述");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("全部合格,整体测试通过");
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.endRow();


            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(color);
            docBuild.write("经验教训");
            docBuild.insertCell();
            docBuild.getCellFormat().getShading().setBackgroundPatternColor(Color.white);
            docBuild.write("时间是检验真理的唯一标准");
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.FIRST);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.insertCell();
            docBuild.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS);
            docBuild.endRow();
            docBuild.endTable();

            // 保存文档
            doc.updateFields();
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            doc.save(outStream, SaveFormat.DOCX);
            // 建立一个文件的输出的输出流
            ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) outStream;
            byte[] aByte = byteArrayOutputStream.toByteArray();

            // 设置响应头信息
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + proNo+".docx" + "\"");
            String returnType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            response.setContentType(returnType);
            OutputStream responseOutputStream = response.getOutputStream();
            responseOutputStream.write(aByte);
            responseOutputStream.flush();

        } catch (Exception e) {
            System.out.println("使用Aspose动态创建自定义doc文档异常,编号:" + proNo);
            e.printStackTrace();
        }
    }
相关推荐
在京奋斗者1 小时前
spring boot自动装配原理
java·spring boot·spring
明天不下雨(牛客同名)4 小时前
为什么 ThreadLocalMap 的 key 是弱引用 value是强引用
java·jvm·算法
多多*4 小时前
Java设计模式 简单工厂模式 工厂方法模式 抽象工厂模式 模版工厂模式 模式对比
java·linux·运维·服务器·stm32·单片机·嵌入式硬件
胡图蛋.6 小时前
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
java·spring boot·后端
牛马baby6 小时前
Java高频面试之并发编程-01
java·开发语言·面试
小小大侠客6 小时前
将eclipse中的web项目导入idea
java·eclipse·intellij-idea
不再幻想,脚踏实地6 小时前
MySQL(一)
java·数据库·mysql
吃海鲜的骆驼6 小时前
SpringBoot详细教程(持续更新中...)
java·spring boot·后端
迷雾骑士7 小时前
SpringBoot中WebMvcConfigurer注册多个拦截器(addInterceptors)时的顺序问题(二)
java·spring boot·后端·interceptor
别来无恙✲7 小时前
Mybatis源码分析
java·源码分析