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 小时前
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
java
huangdong_8 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天8 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录9178 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录9179 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
一杯奶茶¥9 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码10 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|10 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
KANGBboy10 小时前
java知识五(继承)
java·开发语言
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试