代码拉取完成,页面将自动刷新
同步操作将从 麦尼Money/docx-op 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Stop talking, show me code.
src/test/java/DocxTest.java
public class DocxTest {
/**
* 创建word
*/
@Test
public void createDocx() {
// 创建word画家
DocxPainter docxPainter = new DocxPainter();
// 准备图片
DocxImage docxImage = this.prepareImage();
// 准备表格
DocxTable docxTable = this.prepareTable(docxPainter);
// 画word
docxPainter
// 添加目录
.addToc(DocxFactory.createParagraph(new DocxText("目录", DocxStyleEnum.DEFAULT_TOC_TITLE.getDocxStyle())))
// 开启新一页
.add(DocxFactory.newPage())
// 添加标题
.add(DocxFactory.createHeading("Heading1", new DocxText("1、一级标题1")))
// 添加正文
.add(DocxFactory.createParagraph(new DocxText("这是正文")))
// 添加图片
.add(DocxFactory.createParagraph(docxImage, docxPainter.getWpk()))
// 开启新一页
.add(DocxFactory.newPage())
// 添加标题
.add(DocxFactory.createHeading("Heading1", new DocxText("2、一级标题2")))
// 添加2级标题
.add(DocxFactory.createHeading("Heading2", new DocxText("2-1、二级标题1")))
// 添加表格
.add(DocxFactory.createTable(docxTable, docxPainter.getWpk()))
// 保存
.save(new File("docx/1.docx"));
}
/**
* 通过模板创建word
* 支持使用word 的代码域(邮件合并)标记占位符
*/
@Test
public void createDocxByTemplate() {
Map<DataFieldName, String> ctx = new HashMap<>();
ctx.put(new DataFieldName("title"), "大家好");
// 通过传入已有的word文件,从文末继续画word
DocxPainter docxPainter = new DocxPainter(new File("docx/template.docx"));
docxPainter
// 执行模板渲染
.processTemplate(ctx)
// 开启新一页
.add(DocxFactory.newPage())
// 添加标题
.add(DocxFactory.createHeading("Heading1", new DocxText("1、一级标题1")))
// 添加正文
.add(DocxFactory.createParagraph(new DocxText("这是正文")))
// 保存
.save(new File("docx/template-result.docx"));
}
/**
* 定点续写
*/
@Test
public void positionWriteDocx() {
new DocxPainter(new File("docx/position-write.docx"))
.add(DocxFactory.createParagraph(new DocxText("随便写两句吧")))
.save(new File("docx/position-write-result.docx"));
}
/**
* 准备图片
*
* @return {@link DocxImage}
*/
private DocxImage prepareImage() {
try {
byte[] bytes = DocxFactory.readImage(Files.newInputStream(Paths.get("docx/money.jpg")), true);
DocxImage docxImage = new DocxImage(bytes);
docxImage.setWidth(1000L);
return docxImage;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 准备表
*
* @param docxPainter 多克斯画家
* @return {@link DocxTable}
*/
private DocxTable prepareTable(DocxPainter docxPainter) {
// 搞张图片
DocxImage docxImage = this.prepareImage();
// 行(注意:行里的列数要保持一致,样式是 行->列->内容 传递的)
List<DocxRow> rows = new ArrayList<>();
DocxRow headRow = new DocxRow(new ArrayList<DocxCell>() {{
// 直接使用字符串和 new DocxText()是一样的
add(new DocxCell("th1"));
add(new DocxCell("th2"));
add(new DocxCell("th3"));
// 给Row设置不一样的样式来表示表头
}}, DocxStyle.builder().cellColor("C0C0C0").align(JcEnumeration.CENTER).build());
DocxRow row1 = new DocxRow(new ArrayList<DocxCell>() {{
add(new DocxCell(new DocxText("td1")));
add(new DocxCell(new DocxText("td2")));
// 图片单元格
add(new DocxCell(docxImage));
}});
DocxRow row2 = new DocxRow(new ArrayList<DocxCell>() {{
add(new DocxCell(new DocxText("td1")));
// 复杂单元格
List<P> pList = new ArrayList<>();
pList.add(DocxFactory.createParagraph(new DocxText("这是一张图片")));
pList.add(DocxFactory.createParagraph(docxImage, docxPainter.getWpk()));
// 横向合并单元格
add(new DocxCell(pList, DocxStyle.builder().hMerge(TbMergeEnum.RESTART).align(JcEnumeration.CENTER).build()));
add(new DocxCell(new DocxText(""), DocxStyle.builder().hMerge(TbMergeEnum.CONTINUE).build()));
}});
rows.add(headRow);
rows.add(row1);
rows.add(row2);
return new DocxTable(rows);
}
}
createDocx
createDocxByTemplate
positionWriteDocx
初始化
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。