Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
徐少华
midjourney-proxy
Commits
b975c2a8
Commit
b975c2a8
authored
Jun 03, 2019
by
songxiang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新加的文件不提示 ,坑
parent
8030520d
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1258 additions
and
4 deletions
+1258
-4
pom.xml
pcloud-common/pom.xml
+4
-4
WordNewUtils.java
.../main/java/com/pcloud/common/utils/word/WordNewUtils.java
+632
-0
ParagraphDTO.java
...n/java/com/pcloud/common/utils/word/dto/ParagraphDTO.java
+245
-0
RunDTO.java
...rc/main/java/com/pcloud/common/utils/word/dto/RunDTO.java
+18
-0
RunImageDTO.java
...in/java/com/pcloud/common/utils/word/dto/RunImageDTO.java
+79
-0
RunTableDTO.java
...in/java/com/pcloud/common/utils/word/dto/RunTableDTO.java
+54
-0
RunTextDTO.java
...ain/java/com/pcloud/common/utils/word/dto/RunTextDTO.java
+148
-0
WordDTO.java
...c/main/java/com/pcloud/common/utils/word/dto/WordDTO.java
+39
-0
ParagraphType.java
...ava/com/pcloud/common/utils/word/enums/ParagraphType.java
+39
-0
No files found.
pcloud-common/pom.xml
View file @
b975c2a8
...
...
@@ -382,12 +382,12 @@
<version>
2.0
</version>
</dependency>
<!--
util sd
k -->
<!--
lombo
k -->
<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>
pcloud-common/src/main/java/com/pcloud/common/utils/word/WordNewUtils.java
0 → 100644
View file @
b975c2a8
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
);
}
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/ParagraphDTO.java
0 → 100644
View file @
b975c2a8
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
;
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/RunDTO.java
0 → 100644
View file @
b975c2a8
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
{
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/RunImageDTO.java
0 → 100644
View file @
b975c2a8
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
;
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/RunTableDTO.java
0 → 100644
View file @
b975c2a8
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
;
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/RunTextDTO.java
0 → 100644
View file @
b975c2a8
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
;
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/dto/WordDTO.java
0 → 100644
View file @
b975c2a8
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
;
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/word/enums/ParagraphType.java
0 → 100644
View file @
b975c2a8
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
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment