# document4j **Repository Path**: java-tools/document4j ## Basic Information - **Project Name**: document4j - **Description**: 一个简易的符合文档编写习惯的 Java 文档库,用于编写 Word、PDF、Markdown、HTML 文档 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-04-19 - **Last Updated**: 2025-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # document4j ## 简介 一个简易的符合文档编写习惯的 Java 文档库,用于操作 Word、PDF、Markdown、HTML 文档

## 使用教程 ### Word 文档 #### WordStyle word 样式接口,包含两个内部实现类字体样式 Font、段落样式 Paragraph - Font 字体样式 (部分) ```java // 加粗 WordStyle.Font bold = WordStyle.Font.BOLD; // 字体颜色 WordStyle.Font fontColor = WordStyle.Font.fontColor("C40315"); // 字体大小 WordStyle.Font fontSize = WordStyle.Font.fontSize(20); // 下划线 WordStyle.Font underLine = WordStyle.Font.UNDER_LINE; ``` - Paragraph 段落样式 ```java // 文本左对齐 WordStyle.Paragraph alignLeft = WordStyle.Paragraph.ALIGN_LEFT; // 文本居中对齐 WordStyle.Paragraph alignCenter = WordStyle.Paragraph.ALIGN_CENTER; // 文本右对齐 WordStyle.Paragraph alignRight = WordStyle.Paragraph.ALIGN_RIGHT; // 首行缩进字符个数 WordStyle.Paragraph firstLineIndent = WordStyle.Paragraph.firstLineIndent(2); // 一个段落中文本行间距倍数(字体大小为基数) WordStyle.Paragraph linedSpacing = WordStyle.Paragraph.lineSpacing(1); ``` #### WordBuilder ##### 创建 WordBuilder ```java // 创建一个 WordBuilder WordBuilder wordBuilder = WordBuilder.create(); // 通过已有文件创建 WordBuilder WordBuilder wordBuilder = WordBuilder.create("D://desktop/demo.docx"); ``` > WordBuilder 支持流式写法 ##### 构建 word 文档 ```java // 构建并写入文件 wordBuilder.asFile("D://desktop/demo.docx"); // 构建并获取子节数组 byte[] bytes = wordBuilder.asBytes(); // 构建并写入输出流 wordBuilder.asStream(OutputStream out); ``` ##### 写入段落(简单段落) ```java // 加粗 WordStyle.Font bold = WordStyle.Font.BOLD; // 字体颜色 WordStyle.Font fontColor = WordStyle.Font.fontColor("C40315"); // 字体大小 WordStyle.Font fontSize = WordStyle.Font.fontSize(20); // 文本居中 WordStyle.Paragraph alignCenter = WordStyle.Paragraph.ALIGN_CENTER; // 添加标题 wordBuilder.paragraph("标题", fontSize, bold, alignCenter); // 一个段落默认样式文本 wordBuilder.paragraph("默认样式的段落文本..."); // 字体加粗的段落文本 wordBuilder.paragraph("字体加粗的段落文本...", bold); // 设置字体颜色的段落文本 wordBuilder.paragraph("设置字体颜色的段落文本...", fontColor); ``` > wordBuilder.paragraph 方法每调用一次就是一个段落 ##### 写入段落(复杂段落) ```java WordBuilder.create() .startParagraph() .text("hello") .text("word", WordStyle.Font.BOLD) .endParagraph(); ``` > startParagraph 和 endParagraph 方法之间的整体构成一个段落 ##### 换页 ```java wordBuilder.newPage(); ``` ##### 空白行 ```java wordBuilder.blankRow(); ``` ##### 写入图片 ```java public WordBuilder picture(byte[] bytes, String filename, int width, int height); public WordBuilder picture(InputStream is, String filename, int width, int height) ``` ##### 写入表格 **二维数组类型数据** ```java public static void main(String[] args) { // 二维数组类型数据 Object[][] data = { {"表头一", "表头二", "表头三"}, {"一行一列", "一行二列", "一行三列"}, {"二行一列", "二行二列", "二行三列"} }; // 创建一个 WordBuilder WordBuilder.create() //写入表格,并设置单元格内文本字体样式 .table(data, WordStyle.Font.fontSize(16)) // 构建 word文档,并写入文件 .asFile("D://desktop/demo.docx"); } ``` **对象类型数据** 用户对象 ```java @Data public class User implements WriteTableable { @TableField("用户ID") private Long userId; @TableField("用户名") private String username; @TableField("性别") private Integer gender; } ``` 写入对象 ```java public static void main(String[] args) { List users = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setUserId((long) i); user.setUsername(UUID.randomUUID().toString()); user.setGender(i % 2); users.add(user); } // 创建一个 WordBuilder WordBuilder.create() //写入表格,并设置单元格内文本字体样式 .table(users, WordStyle.Font.fontSize(16)) // 构建 word文档,并写入文件 .asFile("d://desktop/demo.docx"); } ``` #### @TableField 用于设置表格表头名称,枚举值映射、值转换、是否排除属性写入表格、属性值写入表格顺序 ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface TableField { // 标题名称 String value() default ""; // 排序(升序) int order() default Integer.MAX_VALUE; // 是否排除该字段 boolean exclude() default false; // 格式:旧值->新值 String[] enums() default {}; // 属性值转换器 Class converter() default NoConverter.class; } ``` #### WordTableInterceptor 继承了 WriteTableable 接口,用于拦截表格并修改写入的属性、表头、表格样式、表格单元格样式、表格单元格值 ```java public interface WordTableInterceptor extends WriteTableable { /** * 拦截写入表格的属性集合 * * @param type * @param fields * @return */ default List interceptWordFields(Class type, List fields) { return fields; } /** * 拦截写入表格的表头 * * @param type * @param fields * @param headers * @return */ default void interceptWordHeaders(Class type, List fields, List headers) { } /** * 拦截表格,用于设置如表格样式等 * * @param table 表格 */ default void interceptWordTable(XWPFTable table) { } /** * 拦截表头单元格,用于设置如单元格样式、修改表头名称等 * * @param cell 单元格 * @param type 类型 */ default void interceptWordHeaderCell(XWPFTableCell cell, XWPFParagraph paragraph, Class type) { } /** * 拦截表格单元格 * * @param cell 单元格 * @param obj 当前写入单元格对象 * @param field 当前写入单元格属性 */ default void interceptWordContentCell(XWPFTableCell cell, Paragraph paragraph, Object obj, Field field) { //设置单元格颜色 cell.setColor("000000"); //获取单元格文本 paragraph.getText(); //修改单元格文本 paragraph.getRuns().get(0).setText(""); } } ```

### PDF 文档 请参考上述 word 文档

### MarkDown 文档 请参考上述 word 文档

### HTML 文档 请参考上述 word 文档