|
|
@@ -5,6 +5,8 @@ import cn.hutool.core.io.IORuntimeException;
|
|
|
import cn.hutool.core.io.IoUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
|
+import cn.hutool.poi.exceptions.POIException;
|
|
|
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
|
|
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
@@ -14,20 +16,25 @@ import java.awt.Font;
|
|
|
import java.io.Closeable;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
import java.io.OutputStream;
|
|
|
|
|
|
/**
|
|
|
* Word生成器
|
|
|
- *
|
|
|
+ *
|
|
|
* @author looly
|
|
|
* @since 4.4.1
|
|
|
*/
|
|
|
public class Word07Writer implements Closeable {
|
|
|
|
|
|
private XWPFDocument doc;
|
|
|
- /** 目标文件 */
|
|
|
+ /**
|
|
|
+ * 目标文件
|
|
|
+ */
|
|
|
protected File destFile;
|
|
|
- /** 是否被关闭 */
|
|
|
+ /**
|
|
|
+ * 是否被关闭
|
|
|
+ */
|
|
|
protected boolean isClosed;
|
|
|
|
|
|
// -------------------------------------------------------------------------- Constructor start
|
|
|
@@ -37,7 +44,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 构造
|
|
|
- *
|
|
|
+ *
|
|
|
* @param destFile 写出的文件
|
|
|
*/
|
|
|
public Word07Writer(File destFile) {
|
|
|
@@ -46,7 +53,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 构造
|
|
|
- *
|
|
|
+ *
|
|
|
* @param doc {@link XWPFDocument}
|
|
|
*/
|
|
|
public Word07Writer(XWPFDocument doc) {
|
|
|
@@ -55,8 +62,8 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 构造
|
|
|
- *
|
|
|
- * @param doc {@link XWPFDocument}
|
|
|
+ *
|
|
|
+ * @param doc {@link XWPFDocument}
|
|
|
* @param destFile 写出的文件
|
|
|
*/
|
|
|
public Word07Writer(XWPFDocument doc, File destFile) {
|
|
|
@@ -68,7 +75,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 获取{@link XWPFDocument}
|
|
|
- *
|
|
|
+ *
|
|
|
* @return {@link XWPFDocument}
|
|
|
*/
|
|
|
public XWPFDocument getDoc() {
|
|
|
@@ -77,7 +84,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 设置写出的目标文件
|
|
|
- *
|
|
|
+ *
|
|
|
* @param destFile 目标文件
|
|
|
* @return this
|
|
|
*/
|
|
|
@@ -88,8 +95,8 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 增加一个段落
|
|
|
- *
|
|
|
- * @param font 字体信息{@link Font}
|
|
|
+ *
|
|
|
+ * @param font 字体信息{@link Font}
|
|
|
* @param texts 段落中的文本,支持多个文本作为一个段落
|
|
|
* @return this
|
|
|
*/
|
|
|
@@ -99,9 +106,9 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 增加一个段落
|
|
|
- *
|
|
|
+ *
|
|
|
* @param align 段落对齐方式{@link ParagraphAlignment}
|
|
|
- * @param font 字体信息{@link Font}
|
|
|
+ * @param font 字体信息{@link Font}
|
|
|
* @param texts 段落中的文本,支持多个文本作为一个段落
|
|
|
* @return this
|
|
|
*/
|
|
|
@@ -128,7 +135,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 增加表格数据
|
|
|
- *
|
|
|
+ *
|
|
|
* @param data 表格数据,多行数据。元素表示一行数据,当为集合或者数组时,为一行;当为Map或者Bean时key表示标题,values为数据
|
|
|
* @return this
|
|
|
* @since 4.5.16
|
|
|
@@ -139,10 +146,57 @@ public class Word07Writer implements Closeable {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 增加图片,单独成段落
|
|
|
+ *
|
|
|
+ * @param picFile 图片文件
|
|
|
+ * @param width 宽度
|
|
|
+ * @param height 高度
|
|
|
+ * @return this
|
|
|
+ * @since 5.1.6
|
|
|
+ */
|
|
|
+ public Word07Writer addPicture(File picFile, int width, int height) {
|
|
|
+ final String fileName = picFile.getName();
|
|
|
+ final String extName = FileUtil.extName(fileName).toUpperCase();
|
|
|
+ PicType picType;
|
|
|
+ try {
|
|
|
+ picType = PicType.valueOf(extName);
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ // 默认值
|
|
|
+ picType = PicType.JPEG;
|
|
|
+ }
|
|
|
+ return addPicture(FileUtil.getInputStream(picFile), picType, fileName, width, height);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 增加图片,单独成段落
|
|
|
+ *
|
|
|
+ * @param in 图片流
|
|
|
+ * @param picType 图片类型,见Document.PICTURE_TYPE_XXX
|
|
|
+ * @param fileName 文件名
|
|
|
+ * @param width 宽度
|
|
|
+ * @param height 高度
|
|
|
+ * @return this
|
|
|
+ * @since 5.1.6
|
|
|
+ */
|
|
|
+ public Word07Writer addPicture(InputStream in, PicType picType, String fileName, int width, int height) {
|
|
|
+ final XWPFParagraph paragraph = doc.createParagraph();
|
|
|
+ final XWPFRun run = paragraph.createRun();
|
|
|
+ try {
|
|
|
+ run.addPicture(in, picType.getValue(), fileName, width, height);
|
|
|
+ } catch (InvalidFormatException e) {
|
|
|
+ throw new POIException(e);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new IORuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 将Excel Workbook刷出到预定义的文件<br>
|
|
|
* 如果用户未自定义输出的文件,将抛出{@link NullPointerException}<br>
|
|
|
* 预定义文件可以通过{@link #setDestFile(File)} 方法预定义,或者通过构造定义
|
|
|
- *
|
|
|
+ *
|
|
|
* @return this
|
|
|
* @throws IORuntimeException IO异常
|
|
|
*/
|
|
|
@@ -153,7 +207,7 @@ public class Word07Writer implements Closeable {
|
|
|
/**
|
|
|
* 将Excel Workbook刷出到文件<br>
|
|
|
* 如果用户未自定义输出的文件,将抛出{@link NullPointerException}
|
|
|
- *
|
|
|
+ *
|
|
|
* @param destFile 写出到的文件
|
|
|
* @return this
|
|
|
* @throws IORuntimeException IO异常
|
|
|
@@ -165,7 +219,7 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 将Word Workbook刷出到输出流
|
|
|
- *
|
|
|
+ *
|
|
|
* @param out 输出流
|
|
|
* @return this
|
|
|
* @throws IORuntimeException IO异常
|
|
|
@@ -176,8 +230,8 @@ public class Word07Writer implements Closeable {
|
|
|
|
|
|
/**
|
|
|
* 将Word Document刷出到输出流
|
|
|
- *
|
|
|
- * @param out 输出流
|
|
|
+ *
|
|
|
+ * @param out 输出流
|
|
|
* @param isCloseOut 是否关闭输出流
|
|
|
* @return this
|
|
|
* @throws IORuntimeException IO异常
|