Commit b975c2a8 by songxiang

新加的文件不提示 ,坑

parent 8030520d
......@@ -382,12 +382,12 @@
<version>2.0</version>
</dependency>
<!-- util sdk -->
<!-- lombok -->
<dependency>
<groupId>com.dcg.sdk</groupId>
<artifactId>util-sdk</artifactId>
<version>1.0.0</version>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
package com.pcloud.common.utils.word;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.List;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.Units;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.WordConstant;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
import com.pcloud.common.utils.FileUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.UUIDUitl;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.word.dto.ParagraphDTO;
import com.pcloud.common.utils.word.dto.RunDTO;
import com.pcloud.common.utils.word.dto.RunImageDTO;
import com.pcloud.common.utils.word.dto.RunTableDTO;
import com.pcloud.common.utils.word.dto.RunTextDTO;
import com.pcloud.common.utils.word.dto.WordDTO;
import com.pcloud.common.utils.word.enums.ParagraphType;
/**
* 重新定义word工具类
*
* @author:songx
* @date:2019/5/27,10:06
*/
public class WordNewUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(WordNewUtils.class);
// public static void main(String[] args) {
// List<ParagraphDTO> paragraphDTOS = new ArrayList<>();
// // 页眉
// paragraphDTOS.add(getHeader1());
// paragraphDTOS.add(getHeader2());
// // 标题
// paragraphDTOS.add(getParagraph1());
// // 内容
// paragraphDTOS.add(getParagraph2());
// paragraphDTOS.add(getParagraph3());
// paragraphDTOS.add(getParagraph4());
// paragraphDTOS.add(getParagraph4());
// // 页脚
// paragraphDTOS.add(getFooter1());
// try {
// System.out.println(create(paragraphDTOS));
// } catch (Exception e) {
// LOGGER.error(e.getMessage(), e);
// }
// System.out.println("Game over!");
// }
//
// private static ParagraphDTO getHeader1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("?????的个人专属错题本 共40道错题", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getHeader2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("来源《书名书名书名书名书名书名书名书书名书名书名书书名书名书名书》", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getParagraph1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("个人专属错题本", 18, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("完成下面错题练习,扫描二维码核对答案,并记录练习结果:", 11, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph3() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\02.jpg", 80, 80, null, listAfterTexts3(11, "微软雅黑"));
// return ParagraphDTO.newParagraph(ParagraphType.image, TextAlignment.TOP, runImageDTO, 1);
// }
//
// private static ParagraphDTO getParagraph4() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\2.jpg", 200, 500);
// return ParagraphDTO.newParagraph(ParagraphType.image, runImageDTO, 3);
// }
//
// private static ParagraphDTO getFooter1() {
// RunTextDTO runTextDTO = RunTextDTO.newText("反复练习,攻克错题", 11, "微软雅黑");
// return ParagraphDTO.newFooter(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO);
// }
//
// /**
// * 组装图片后面的文字
// *
// * @param fontSize
// * @param fontFamily
// * @return
// */
// private static List<RunTextDTO> listAfterTexts3(int fontSize, String fontFamily) {
// List<RunTextDTO> afterRuns = Lists.newArrayList();
// afterRuns.add(RunTextDTO.newText(" 答对", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 10 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,答错", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 11 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,日期", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" " + LocalDateUtils.getDateNow() + " ", fontSize, fontFamily,
// UnderlinePatterns.SINGLE));
// return afterRuns;
// }
/**
* 创建WORD
*
* @param wordDTO
* @return
* @throws Exception
*/
public static String create(WordDTO wordDTO) throws FileException {
LOGGER.info("【WORD】创建WORD文档,<START>");
if (wordDTO == null || ListUtils.isEmpty(wordDTO.getParagraphs())) {
return null;
}
String wordTemplate = null;
String outPath = null;
CustomXWPFDocument document = null;
FileOutputStream fos = null;
try {
wordTemplate = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
FileUtils.downloadFileFromUrl(WordConstant.TEMPLATE_URL, wordTemplate);
OPCPackage pack = POIXMLDocument.openPackage(wordTemplate);
document = new CustomXWPFDocument(pack);
// 添加内容到文档中
addParagraphs(wordDTO, document);
// 生成目标word
outPath = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
fos = new FileOutputStream(outPath);
document.write(fos);
fos.flush();
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_CONTENT_ERROR, e.getMessage());
} finally {
close(document, fos);
FileUtils.deleteFile(wordTemplate);
}
LOGGER.info("【WORD】创建WORD文档,<END>.[outPath]=" + outPath);
return outPath;
}
/**
* 添加内容到WORD中
*
* @param wordDTO
* @param document
* @throws BizException
*/
private static void addParagraphs(WordDTO wordDTO, CustomXWPFDocument document) {
List<ParagraphDTO> paragraphDTOS = wordDTO.getParagraphs();
for (ParagraphDTO paragraphDTO : paragraphDTOS) {
ParagraphType paragraphType = paragraphDTO.getParagraphType();
if (ParagraphType.table.equals(paragraphType)) {
addTable(paragraphDTO, document);
} else if (ParagraphType.image.equals(paragraphType)) {
addImage(wordDTO, paragraphDTO, document);
} else if (ParagraphType.text.equals(paragraphType)) {
addText(wordDTO, paragraphDTO, document);
}
}
}
/**
* 获取段落
*
* @param paragraphDTO
* @param document
* @return
*/
private static XWPFParagraph getParagraph(ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
if (paragraphDTO.isHeader()) {
XWPFHeader xwpfHeader = document.createHeader(HeaderFooterType.DEFAULT);
return xwpfHeader.createParagraph();
} else if (paragraphDTO.isFooter()) {
XWPFFooter xwpfFooter = document.createFooter(HeaderFooterType.DEFAULT);
return xwpfFooter.createParagraph();
} else {
return document.createParagraph();
}
}
/**
* 添加文本块
*
* @param wordDTO
* @param paragraphDTO
* @throws BizException
*/
private static void addText(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document)
throws BizException {
XWPFParagraph paragraph = getParagraph(paragraphDTO, document);
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 设置段落块样式
if (paragraphDTO.getRun() != null) {
setTextStyle(wordDTO, (RunTextDTO) paragraphDTO.getRun(), paragraph);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
setTextStyle(wordDTO, (RunTextDTO) runDTO, paragraph);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 添加空行
*
* @param afterEmpty
* @param document
* @throws BizException
*/
private static void addEmptyText(int afterEmpty, CustomXWPFDocument document) throws BizException {
for (int i = 0; i < afterEmpty; i++) {
setTextStyle(null, RunTextDTO.newEmpty(), document.createParagraph());
}
}
/**
* 设置段落样式
*
* @param paragraphDTO
* @param paragraph
*/
private static void setParagraphStyle(ParagraphDTO paragraphDTO, XWPFParagraph paragraph) {
// 与前一行的间距
if (paragraphDTO.getSpacingBefore() > 0) {
paragraph.setSpacingBeforeLines(paragraphDTO.getSpacingBefore());
}
// 与下一行的间距
if (paragraphDTO.getSpacingAfter() > 0) {
paragraph.setSpacingAfterLines(paragraphDTO.getSpacingAfter());
}
// 对齐
if (paragraphDTO.getParagraphAlignment() != null) {
paragraph.setFontAlignment(paragraphDTO.getParagraphAlignment().getValue());
}
// 水平居中
if (paragraphDTO.getTextAlignment() != null) {
paragraph.setVerticalAlignment(paragraphDTO.getTextAlignment());
}
}
/**
* 设置文本样式
*
* @param wordDTO
* @param runTextDTO
* @param paragraph
*/
private static void setTextStyle(WordDTO wordDTO, RunTextDTO runTextDTO, XWPFParagraph paragraph) {
XWPFRun xwpfRun = paragraph.createRun();
xwpfRun.setText(runTextDTO.getText());
// 是否加粗
xwpfRun.setBold(runTextDTO.isBold());
// 字体大小
if (runTextDTO.getFontSize() > 0) {
xwpfRun.setFontSize(runTextDTO.getFontSize());
} else if (wordDTO != null && wordDTO.getFontSize() > 0) {
xwpfRun.setFontSize(wordDTO.getFontSize());
}
// 字体
if (runTextDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(runTextDTO.getFontFamily());
} else if (wordDTO != null && wordDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(wordDTO.getFontFamily());
}
// 下划线
if (runTextDTO.getUnderlinePatterns() != null) {
xwpfRun.setUnderline(runTextDTO.getUnderlinePatterns());
}
}
/**
* 添加表格
*
* @param paragraphDTO
* @throws BizException
*/
private static void addTable(ParagraphDTO paragraphDTO, CustomXWPFDocument document) throws BizException {
XWPFParagraph paragraph = document.createParagraph();
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 创建表格
if (paragraphDTO.getRun() != null) {
createTable((RunTableDTO) paragraphDTO.getRun(), document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createTable((RunTableDTO) runDTO, document);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 创建表格
*
* @param runTableDTO
* @param document
*/
private static void createTable(RunTableDTO runTableDTO, CustomXWPFDocument document) {
String[][] contents = runTableDTO.getContents();
if (contents == null || contents.length < 1) {
return;
}
int rowNum = contents.length; // 总行数
int colNum = runTableDTO.getColumnWidths().length; // 总列数
if (colNum < 1) {
throw new FileException(FileException.FILE_CONTENT_ERROR, "表格列数与内容列数不一致");
}
// 创建表格
XWPFTable ComTable = document.createTable();
// 列宽自动分割
CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
comTableWidth.setType(STTblWidth.DXA);
comTableWidth.setW(BigInteger.valueOf(9072));
// 设置行和列
for (int i = 0; i < rowNum; i++) {
String[] cols = contents[i];
// 创建行
XWPFTableRow comTableRow = i == 0 ? ComTable.getRow(0) : ComTable.createRow();
for (int j = 0; j < colNum; j++) {
String text = (j >= cols.length || StringUtil.isEmpty(cols[j])) ? "" : cols[j];
// 填充单元格内容
XWPFTableCell cell = null;
if (i == 0) {
cell = j == 0 ? comTableRow.getCell(0) : comTableRow.addNewTableCell();
} else {
cell = comTableRow.getCell(j);
}
cell.setText(text);
cell.setVerticalAlignment(runTableDTO.getVertAlign());
}
// 行高
if (runTableDTO.getHeight() > 0) {
comTableRow.setHeight(runTableDTO.getHeight());
}
}
}
/**
* 添加图片和文本
*
* @param paragraphDTO
* @param document
*/
private static void addImage(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
XWPFParagraph paragraph = null;
if (paragraphDTO.isHeader()) {
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
paragraph = header.createParagraph();
addImageHeader(wordDTO, paragraphDTO, paragraph, header);
} else {
paragraph = document.createParagraph();
addImageContent(wordDTO, paragraphDTO, paragraph, document);
}
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 页眉中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param header
*/
private static void addImageHeader(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageHeader(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, header);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageHeader(wordDTO, (RunImageDTO) runDTO, paragraph, header);
}
}
}
/**
* 内容中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param document
*/
private static void addImageContent(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageContent(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageContent(wordDTO, (RunImageDTO) runDTO, paragraph, document);
}
}
}
/**
* 创建图片和文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param document
*/
private static void createImageContent(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
try {
// 图片
String relationId = addPictureContent(runImageDTO, document);
if (!StringUtil.isEmpty(relationId)) {
int id = document.getAllPictures().size() - 1;
document.createPicture(paragraph, relationId, id, runImageDTO.getWidth(), runImageDTO.getHeight());
}
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
}
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 创建图片
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void createImageHeader(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
// 图片
addPictureHeader(runImageDTO, paragraph, header);
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 图片前置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageBefore(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> beforeTexts = runImageDTO.getBeforeTexts();
if (!ListUtils.isEmpty(beforeTexts)) {
for (RunTextDTO runTextDTO : beforeTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 图片后置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageAfter(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> afterTexts = runImageDTO.getAfterTexts();
if (!ListUtils.isEmpty(afterTexts)) {
for (RunTextDTO runTextDTO : afterTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 添加页眉图片
*
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void addPictureHeader(RunImageDTO runImageDTO, XWPFParagraph paragraph, XWPFHeader header) {
InputStream is = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
is = new ByteArrayInputStream(FileUtils.downloadByteFromUrl(imageUrl));
} else {
is = new ByteArrayInputStream(FileUtils.file2byte(imageUrl));
}
} else if (runImageDTO.getImageByte() != null) {
is = new ByteArrayInputStream(runImageDTO.getImageByte());
}
XWPFRun run = paragraph.createRun();
try {
XWPFPicture picture = run
.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "123", Units.toEMU(runImageDTO.getWidth()),
Units.toEMU(runImageDTO.getHeight()));
//这段必须有,不然打开的logo图片不显示
String blipID = "";
for (XWPFPictureData picturedata : header.getAllPackagePictures()) {
blipID = header.getRelationId(picturedata);
}
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID);
run.addTab();
} catch (Exception e) {
LOGGER.error("【WORD】WORD页眉图片生成失败:" + e.getMessage(), e);
} finally {
try {
if (is != null) {
is.close();
is = null;
}
} catch (Exception e) {
}
}
}
/**
* 添加图片数据
*
* @param runImageDTO
* @param document
* @return
* @throws InvalidFormatException
*/
private static String addPictureContent(RunImageDTO runImageDTO, CustomXWPFDocument document)
throws InvalidFormatException {
String relationId = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
relationId = document.addPictureData(FileUtils.downloadByteFromUrl(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
} else {
relationId = document.addPictureData(FileUtils.file2byte(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
}
} else if (runImageDTO.getImageByte() != null) {
relationId = document.addPictureData(runImageDTO.getImageByte(), XWPFDocument.PICTURE_TYPE_JPEG);
}
return relationId;
}
/**
* 根据图片类型获取对应的图片类型代码
*
* @param picType
* @return
*/
public static int getPictureType(String picType) {
int res = CustomXWPFDocument.PICTURE_TYPE_PICT;
if (picType != null) {
if (picType.equalsIgnoreCase("png")) {
res = CustomXWPFDocument.PICTURE_TYPE_PNG;
} else if (picType.equalsIgnoreCase("dib")) {
res = CustomXWPFDocument.PICTURE_TYPE_DIB;
} else if (picType.equalsIgnoreCase("emf")) {
res = CustomXWPFDocument.PICTURE_TYPE_EMF;
} else if (picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")) {
res = CustomXWPFDocument.PICTURE_TYPE_JPEG;
} else if (picType.equalsIgnoreCase("wmf")) {
res = CustomXWPFDocument.PICTURE_TYPE_WMF;
}
}
return res;
}
/**
* 结束关闭文件流
*
* @param document
* @param os
*/
public static void close(CustomXWPFDocument document, OutputStream os) {
try {
if (document != null) {
document.close();
document = null;
}
if (os != null) {
os.close();
os = null;
}
} catch (Exception e) {
LOGGER.error("【WORD】WORD文件流关闭失败:" + e.getMessage(), e);
}
}
}
package com.pcloud.common.utils.word.dto;
import java.util.List;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TextAlignment;
import com.pcloud.common.utils.word.enums.ParagraphType;
import lombok.Getter;
import lombok.Setter;
/**
* word中的段落
*
* @author:songx
* @date:2019/5/27,19:00
*/
@Getter
@Setter
public class ParagraphDTO {
/**
* 段落类型
*/
private ParagraphType paragraphType;
/**
* 是否页眉
*/
private boolean header;
/**
* 是否页脚
*/
private boolean footer;
/**
* 段落前间距,与前一个段落之间的间距
*/
private int spacingBefore;
/**
* 段落后间距,与后一个段落之间的间距
*/
private int spacingAfter;
/**
* 段落纵向对齐
*/
private ParagraphAlignment paragraphAlignment;
/**
* 段落水平对齐
*/
private TextAlignment textAlignment;
/**
* 段落后空多少行
*/
private int afterEmpty;
/**
* 段落中的块,与run只能同时存在一个,runs优先级高
*/
private List<RunDTO> runs;
/**
* 段落中的块,与runs只能同时存在一个,runs优先级高
*/
private RunDTO run;
public static ParagraphDTO newInstance() {
return new ParagraphDTO();
}
/**
* 段落
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, RunDTO run) {
return newParagraph(paragraphType, null, null, run, 0);
}
/**
* 段落
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, RunDTO run, int afterEmpty) {
return newParagraph(paragraphType, null, null, run, afterEmpty);
}
/**
* 段落
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, TextAlignment textAlignment, RunDTO run,
int afterEmpty) {
return newParagraph(paragraphType, null, textAlignment, run, afterEmpty);
}
/**
* 段落
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, ParagraphAlignment paragraphAlignment,
RunDTO run, int afterEmpty) {
return newParagraph(paragraphType, paragraphAlignment, null, run, afterEmpty);
}
/**
* 段落
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, ParagraphAlignment paragraphAlignment,
TextAlignment textAlignment, RunDTO run, int afterEmpty) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setRun(run);
paragraphDTO.setParagraphType(paragraphType);
paragraphDTO.setParagraphAlignment(paragraphAlignment);
paragraphDTO.setTextAlignment(textAlignment);
paragraphDTO.setAfterEmpty(afterEmpty);
return paragraphDTO;
}
/**
* 段落
*
* @param paragraphType
* @param runs
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, List<RunDTO> runs) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setRuns(runs);
paragraphDTO.setParagraphType(paragraphType);
return paragraphDTO;
}
/**
* 段落
*
* @param paragraphType
* @param runs
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, List<RunDTO> runs, int afterEmpty) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setRuns(runs);
paragraphDTO.setParagraphType(paragraphType);
paragraphDTO.setAfterEmpty(afterEmpty);
return paragraphDTO;
}
/**
* 段落
*
* @param paragraphType
* @param runs
* @return
*/
public static ParagraphDTO newParagraph(ParagraphType paragraphType, ParagraphAlignment paragraphAlignment,
List<RunDTO> runs, int afterEmpty) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setRuns(runs);
paragraphDTO.setParagraphType(paragraphType);
paragraphDTO.setParagraphAlignment(paragraphAlignment);
paragraphDTO.setAfterEmpty(afterEmpty);
return paragraphDTO;
}
/**
* 页眉
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newHeader(ParagraphType paragraphType, RunDTO run) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setHeader(true);
paragraphDTO.setRun(run);
paragraphDTO.setParagraphType(paragraphType);
return paragraphDTO;
}
/**
* 页眉
*
* @param paragraphType
* @param runs
* @return
*/
public static ParagraphDTO newHeader(ParagraphType paragraphType, List<RunDTO> runs) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setHeader(true);
paragraphDTO.setRuns(runs);
paragraphDTO.setParagraphType(paragraphType);
return paragraphDTO;
}
/**
* 页脚
*
* @param paragraphType
* @param run
* @return
*/
public static ParagraphDTO newFooter(ParagraphType paragraphType, ParagraphAlignment alignment, RunDTO run) {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setFooter(true);
paragraphDTO.setRun(run);
paragraphDTO.setParagraphType(paragraphType);
paragraphDTO.setParagraphAlignment(alignment);
return paragraphDTO;
}
/**
* 空行
*
* @return
*/
public static ParagraphDTO newEmpty() {
ParagraphDTO paragraphDTO = ParagraphDTO.newInstance();
paragraphDTO.setRun(RunTextDTO.newEmpty());
paragraphDTO.setParagraphType(ParagraphType.text);
return paragraphDTO;
}
}
package com.pcloud.common.utils.word.dto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* 段落中的块
*
* @author:songx
* @date:2019/5/27,19:03
*/
@Getter
@Setter
@ToString(callSuper = true)
public class RunDTO {
}
package com.pcloud.common.utils.word.dto;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* @author:songx
* @date:2017年12月7日,下午9:01:00
*/
@Getter
@Setter
@ToString(callSuper = true)
public class RunImageDTO extends RunDTO {
/**
* 图片地址,本地路径或者网络路径
*/
private String imageUrl;
/**
* 图片byte数组
*/
private byte[] imageByte;
/**
* 长度
*/
private int height;
/**
* 宽度
*/
private int width;
/**
* 前文本
*/
private List<RunTextDTO> beforeTexts;
/**
* 后文本
*/
private List<RunTextDTO> afterTexts;
/**
* 默认左对齐
*
* @param imageUrl
* @param height
* @param width
*/
public static RunImageDTO newImage(String imageUrl, int height, int width) {
return newImage(imageUrl, height, width, null, null);
}
/**
* 默认左对齐
*
* @param imageUrl
* @param height
* @param width
* @param beforeTexts
* @param afterTexts
*/
public static RunImageDTO newImage(String imageUrl, int height, int width, List<RunTextDTO> beforeTexts,
List<RunTextDTO> afterTexts) {
RunImageDTO runImageDTO = new RunImageDTO();
runImageDTO.setImageUrl(imageUrl);
runImageDTO.setHeight(height);
runImageDTO.setWidth(width);
runImageDTO.setBeforeTexts(beforeTexts);
runImageDTO.setAfterTexts(afterTexts);
return runImageDTO;
}
}
package com.pcloud.common.utils.word.dto;
import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign;
import lombok.Getter;
import lombok.Setter;
/**
* @author:songx
* @date:2017年12月7日,下午4:02:41
*/
@Getter
@Setter
public class RunTableDTO extends RunDTO {
/**
* 列宽,默认100
*/
private float[] columnWidths;
/**
* 列的内容
*/
private String[][] contents;
/**
* 设置单元格高度,仅当表格的时候使用
*/
private float minimumHeight;
/**
* 高度
*/
private int height;
/**
* 表格对齐
*/
private XWPFVertAlign vertAlign;
/**
* 2007版word
*
* @param contents
* @param height
* @param vertAlign
*/
public RunTableDTO(String[][] contents, int height, XWPFVertAlign vertAlign) {
this.contents = contents;
this.height = height;
this.vertAlign = vertAlign;
}
}
package com.pcloud.common.utils.word.dto;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import lombok.Getter;
import lombok.Setter;
/**
* @author:songx
* @date:2017年12月7日,下午2:36:08
*/
@Getter
@Setter
public class RunTextDTO extends RunDTO {
/**
* 行文本
*/
private String text;
/**
* 字体样式
*/
private String font;
/**
* 字体大小
*/
private int fontSize;
/**
* 是否加粗
*/
private boolean bold;
/**
* 字体
*/
private String fontFamily;
/**
* 下划线
*/
private UnderlinePatterns underlinePatterns;
/**
* 文本
*
* @param text
*/
public static RunTextDTO newText(String text) {
return newText(text, 0, null, null);
}
/**
* 文本
*
* @param text
* @param fontSize
*/
public static RunTextDTO newText(String text, int fontSize) {
return newText(text, fontSize, null, null);
}
/**
* 文本
*
* @param text
* @param fontFamily
* @param fontSize
*/
public static RunTextDTO newText(String text, int fontSize, String fontFamily) {
return newText(text, fontSize, fontFamily, null);
}
/**
* 文本
*
* @param text
* @param underlinePatterns
*/
public static RunTextDTO newText(String text, UnderlinePatterns underlinePatterns) {
return newText(text, 0, null, underlinePatterns);
}
/**
* 文本
*
* @param text
* @param fontFamily
* @param fontSize
* @param underlinePatterns
*/
public static RunTextDTO newText(String text, int fontSize, String fontFamily,
UnderlinePatterns underlinePatterns) {
RunTextDTO runTextDTO = new RunTextDTO();
runTextDTO.setText(text);
runTextDTO.setFontFamily(fontFamily);
runTextDTO.setFontSize(fontSize);
runTextDTO.setUnderlinePatterns(underlinePatterns);
return runTextDTO;
}
/**
* 文本
*
* @param text
*/
public static RunTextDTO newBold(String text) {
return newBold(text, 0, null);
}
/**
* 文本
*
* @param text
* @param fontSize
*/
public static RunTextDTO newBold(String text, int fontSize) {
return newBold(text, fontSize, null);
}
/**
* 文本
*
* @param text
* @param fontFamily
* @param fontSize
*/
public static RunTextDTO newBold(String text, int fontSize, String fontFamily) {
RunTextDTO runTextDTO = new RunTextDTO();
runTextDTO.setText(text);
runTextDTO.setFontFamily(fontFamily);
runTextDTO.setFontSize(fontSize);
runTextDTO.setBold(true);
return runTextDTO;
}
/**
* 空行使用
*/
public static RunTextDTO newEmpty() {
RunTextDTO runTextDTO = new RunTextDTO();
runTextDTO.setText("");
return runTextDTO;
}
}
package com.pcloud.common.utils.word.dto;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* @author:songx
* @date:2017年12月7日,下午4:02:59
*/
@Getter
@Setter
@ToString(callSuper = true)
public class WordDTO {
/**
* 字体大小
*/
private int fontSize;
/**
* 字体
*/
private String fontFamily;
/**
* 段落
*/
private List<ParagraphDTO> paragraphs;
public WordDTO(int fontSize, String fontFamily, List<ParagraphDTO> paragraphs) {
this.fontSize = fontSize;
this.fontFamily = fontFamily;
this.paragraphs = paragraphs;
}
}
package com.pcloud.common.utils.word.enums;
/**
* @author:songx
* @date:2019/5/27,19:16
*/
public enum ParagraphType {
/**
* 文本
*/
text(1),
/**
* 图片
*/
image(2),
/**
* 表格
*/
table(3);
/**
* 值
*/
public final int value;
/**
* 构造
*
* @param value
*/
private ParagraphType(int value) {
this.value = value;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment