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();
        }
    }
相关推荐
从琳开始98914 分钟前
从Socket到TCP回显服务器:Java网络编程完整指南
java·服务器·网络·tcp/ip·java-ee
养军博客15 分钟前
Spring Security 4.x / 5.x / 6.x 配置全对比:前后端不分离与前后端分离
java·后端·spring·springsecurity
wifi___16 分钟前
SpringBoot自动装配原理
java·spring boot·后端
SL_staff1 小时前
制造订单交付闭环实践:用跨部门计划模板解决缺料-停机-返工三角死循环
java·开源·产品
device_Any1 小时前
接口文档写着三个字段,接口返回了五个
android·java·linux
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 小视频模块实战:访客记录、FastDFS 存储与 SpringCache 缓存
java·缓存·交友
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(09)
java·数据库·mysql·面试·八股·大厂实习
吹什么轩2 小时前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
她的男孩2 小时前
租户 A 的验证码,却用了租户 B 的 AccessKey:Forge Admin 修跨租户短信串发
java·spring boot·saas
LabVIEW开发2 小时前
LabVIEW 局部变量与数据流:这道 CLAD 题为什么答案是 Undefined
java·开发语言·labview