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();
        }
    }
相关推荐
侠客行03173 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪3 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚5 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎5 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码6 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚6 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂6 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
fuquxiaoguang6 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
琹箐6 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
__WanG6 小时前
JavaTuples 库分析
java