word导入导出-Apache POI 和 Poi-tl

word 文件读取

使用Apache POI Word 进行读取文件

使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本

Apache POI Word 说明文档:Apache POI Word 说明文档

maven 解决依赖冲突教程:https://www.cnblogs.com/shangxiaofei/p/17662176.html

1:导包

xml 复制代码
 <!--poi-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version>
        </dependency>

        <!--读取doc文件-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>5.2.2</version>

        </dependency>

2:读取doc和docx文件的工具类

java 复制代码
package com.wkl.testdemo.word;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

/**
 * 读取word工具类
 */
public class ReadWordUtil {
    public static String readWord(InputStream inputStream, String suffix) throws Exception{
        String buffer = "";
        try {
            if ("doc".equals(suffix)) {
                HWPFDocument document = new HWPFDocument(inputStream);
                WordExtractor extractor = new WordExtractor(document);
                buffer = extractor.getText();
                String[] paragraphText = extractor.getParagraphText();
                //解析段落
                for (String s : paragraphText) {
                    System.out.println(s);
                }
                extractor.close();
                document.close();
            } else if ("docx".equals(suffix)) {
                XWPFDocument doc = new XWPFDocument(inputStream);
                XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
                buffer = extractor.getText();
                //解析段落
                List<XWPFParagraph> paragraphs = doc.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs) {
                    String text1 = paragraph.getText();
                    System.out.println(text1);
                }
                extractor.close();
                doc.close();
            }
            return buffer;
        } catch (Exception e) {
            throw e;
        }
    }
    public static void main(String[] args) throws Exception {
        String pathdocx = "C:\\Users\\wenge\\Desktop\\新建 DOCX 文档.docx";
        readWord(new FileInputStream(new File(pathdocx)),"docx");
        String pathdoc = "C:\\Users\\wenge\\Desktop\\新建 DOC 文档.doc";
        readWord(new FileInputStream(new File(pathdoc)),"doc");
    }
}

导出word文档-Poi-tl

1:Poi-tl介绍

poi-tl是一个基于Apache POI的Java库,用于操作Microsoft Office文档,包括Word文档(.docx)、Excel电子表格(.xlsx)和PowerPoint演示文稿(.pptx)。它提供了一组简单易用的API,使开发人员能够轻松地创建、读取和修改Office文档。

poi-tl的主要特点如下:

  • 简单易用:poi-tl提供了一组简单易用的API,使开发人员能够快速上手并进行Office文档的操作。它提供了丰富的方法和属性,以满足不同的需求。

  • 支持多种文档格式:poi-tl支持多种常见的Office文档格式,包括Word文档(.docx)、Excel电子表格(.xlsx)和PowerPoint演示文稿(.pptx)。开发人员可以使用poi-tl来创建、读取和修改这些文档。

  • 功能丰富:poi-tl提供了许多有用的功能,如创建和修改文档的样式、添加和删除文本、插入和删除图片、创建和修改表格、添加和删除行列等。它还支持合并单元格、设置字体样式和颜色、设置边框和背景颜色等高级功能。

  • 支持模板引擎:poi-tl支持使用模板引擎来生成Office文档。开发人员可以使用模板引擎来定义文档的结构和样式,并使用poi-tl来填充数据。这样可以实现文档的动态生成,使开发人员能够更灵活地生成各种类型的文档。

  • 支持国际化:poi-tl支持国际化,可以根据不同的语言和地区生成相应的文档。开发人员可以使用poi-tl提供的API来设置文档的语言、日期格式、货币格式等,以满足不同国家和地区的需求。

  • 开源免费:poi-tl是一个开源的Java库,使用Apache License 2.0许可证。这意味着开发人员可以免费使用和修改poi-tl,并将其用于商业和非商业项目。

综上所述,poi-tl是一个功能强大且易于使用的Java库,用于操作Microsoft Office文档。它提供了丰富的API和功能,使开发人员能够轻松地创建、读取和修改Office文档。无论是生成报告、导出数据还是进行数据分析,poi-tl都是一个理想的选择

2:Poi-tl和其他模板引擎对比

其中:

poi-tl官网地址:https://deepoove.com/poi-tl/

Apache POI Word 说明文档:Apache POI Word 说明文档

3:Poi-tl 功能列表

4:导包

看poi-tl 官网,有版本建议

xml 复制代码
        <!--poi word-->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.0</version>
        </dependency>
        <!--poi-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version>
        </dependency>

        <!--读取doc文件-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>5.2.2</version>
        </dependency>

5:导出文件测试-helloworld

1:生成一个模板.docx

2:程序测试

java 复制代码
package com.wkl.testdemo.word;

import com.deepoove.poi.XWPFTemplate;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wangkanglu
 * @version 1.0
 * @description
 * @date 2023-12-20 15:53
 */
public class WriteWordUtil {

    public static void main(String[] args) {
        String path = "C:\\Users\\Desktop\\模板.docx";
        Map<String,String> data = new HashMap<>();
        data.put("title","标题1111");
        data.put("publishTime","2023-12-20 13:12:12");
        data.put("content","内容");
        try {
            toword(data,path,"C:\\Users\\Desktop\\模板1.docx");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 生成word工具类
     * @param datas 数据
     * @param filePath 模板地址
     * @param descpath 输出地址
     * @return 返回生成文件路径
     * @throws IOException
     */
    public static String toword(Map datas, String filePath, String descpath) throws IOException {
        String outPath = descpath;
        XWPFTemplate template = XWPFTemplate.compile(filePath)
                .render(datas);
        FileOutputStream out = new FileOutputStream(outPath);
        template.write(out);
        template.close();
        return descpath;
    }
}

3:结果:

6:复杂使用-增加文件批注

java 复制代码
package com.wkl.testdemo.word;

import java.io.IOException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.util.LocaleUtil;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Documents;
import com.deepoove.poi.data.Documents.DocumentBuilder;
import com.deepoove.poi.data.ParagraphRenderData;
import com.deepoove.poi.data.Paragraphs;
import com.deepoove.poi.data.Pictures;
import com.deepoove.poi.data.TableRenderData;
import com.deepoove.poi.data.Tables;
import com.deepoove.poi.data.Texts;
import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.plugin.comment.CommentRenderData;
import com.deepoove.poi.plugin.comment.CommentRenderPolicy;
import com.deepoove.poi.plugin.comment.Comments;
import com.deepoove.poi.plugin.comment.Comments.CommentBuilder;

public class CommentRenderPolicyTest {

    public static void main(String[] args) {
        try {
            testCommentExample();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

  

    public static void testCommentExample() throws IOException {
        // comment
        CommentRenderData comment0 = newCommentBuilder().addText(Texts.of("咏鹅").fontSize(20).bold().create())
                .comment(Documents.of()
                        .addParagraph(Paragraphs.of(Pictures.ofLocal("D:\\Pictures\\002KoyJzly1hix2zhdr2qj60sq0sq0uu02.jpg").create()).create())
                        .create())
                .create();
        CommentRenderData comment1 = newCommentBuilder().addText("骆宾王")
                .comment("骆宾王作为"初唐四杰"之一,对荡涤六朝文学颓波,革新初唐浮靡诗风。他一生著作颇丰,是一个才华横溢的诗人。")
                .create();
        CommentRenderData comment2 = newCommentBuilder().addText("曲项").comment("弯着脖子").create();
        CommentRenderData comment3 = newCommentBuilder().addText("拨").comment("划动").create();

        // document 
        DocumentBuilder documentBuilder = Documents.of()
                .addParagraph(Paragraphs.of().addComment(comment0).center().create());
        documentBuilder.addParagraph(Paragraphs.of().addComment(comment1).center().create());
        documentBuilder.addParagraph(Paragraphs.of("鹅,鹅,鹅,").addComment(comment2).addText("向天歌。").center().create());
        documentBuilder.addParagraph(Paragraphs.of("白毛浮绿水,红掌").addComment(comment3).addText("清波。").center().create());

        // render
        XWPFTemplate.create(documentBuilder.create(), Style.builder().buildFontFamily("微软雅黑").buildFontSize(14f).build())
                .writeToFile("C:\\Users\\Desktop\\增加批注.docx");
    }

    private static CommentBuilder newCommentBuilder() {
        return Comments.of().signature("Sayi", "s", LocaleUtil.getLocaleCalendar());
    }

}
相关推荐
Aloudata7 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
小钱c714 小时前
Mac下安装Apache JMeter并启动
jmeter·macos·apache
Jacob程序员18 小时前
java导出word文件(手绘)
java·开发语言·word
q24985969318 小时前
前端预览word、excel、ppt
前端·word·excel
flashman91118 小时前
python在word中插入图片
python·microsoft·自动化·word
hairenjing11231 天前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
初九之潜龙勿用2 天前
C#结合JS解决Word添加无效位图导致进程停滞的问题
javascript·ui·c#·word·asp.net
火星技术2 天前
Excel快速转换文档word工具
word·excel
FserSuN2 天前
Apache Calcite - 查询优化之自定义优化规则
apache·calcite
黑风风2 天前
Ubuntu 22 安装 Apache Doris 3.0.3 笔记
笔记·ubuntu·apache