Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YeeAmosFireAutoSysRoot
Project
Project
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
station
YeeAmosFireAutoSysRoot
Commits
31d5ee39
Commit
31d5ee39
authored
Mar 25, 2024
by
litengwei
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop_dl_bugfix' into develop_dl_bugfix
parents
d948c7fd
cec8a2b8
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
752 deletions
+43
-752
FileUtils.java
...in/java/com/yeejoin/amos/fas/business/util/FileUtils.java
+19
-4
WordConverterUtils.java
...va/com/yeejoin/amos/fas/core/util/WordConverterUtils.java
+12
-8
WordToHtmlConverter.java
...va/org/apache/poi/hwpf/converter/WordToHtmlConverter.java
+0
-731
YeeAmosFireAutoSysStart.java
...c/main/java/com/yeejoin/amos/YeeAmosFireAutoSysStart.java
+12
-9
No files found.
YeeAmosFireAutoSysService/src/main/java/com/yeejoin/amos/fas/business/util/FileUtils.java
View file @
31d5ee39
package
com
.
yeejoin
.
amos
.
fas
.
business
.
util
;
import
org.apache.commons.io.FilenameUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
...
...
@@ -7,7 +9,6 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.BufferedInputStream
;
import
java.io.BufferedOutputStream
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
...
...
@@ -15,6 +16,9 @@ import java.io.InputStream;
import
java.io.OutputStream
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.nio.charset.StandardCharsets
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
java.util.List
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipOutputStream
;
...
...
@@ -44,8 +48,8 @@ public class FileUtils {
OutputStream
out
=
null
;
BufferedInputStream
br
=
null
;
try
{
String
fileName
=
new
String
(
zipname
.
getBytes
(
"UTF-8"
),
"iso-8859-1"
);
br
=
new
BufferedInputStream
(
new
FileInputStream
(
zippath
));
String
fileName
=
new
String
(
zipname
.
getBytes
(
StandardCharsets
.
UTF_8
),
StandardCharsets
.
ISO_8859_1
);
br
=
new
BufferedInputStream
(
Files
.
newInputStream
(
Paths
.
get
(
zippath
)
));
byte
[]
buf
=
new
byte
[
1024
];
int
len
=
0
;
response
.
reset
();
...
...
@@ -79,8 +83,19 @@ public class FileUtils {
* @return
*/
public
static
String
fileToZip
(
List
<
String
>
list
,
String
fileName
,
String
ipUrl
)
{
if
(
StringUtils
.
isBlank
(
fileName
))
{
throw
new
RuntimeException
(
"文件名不能为空"
);
}
fileName
=
FilenameUtils
.
normalize
(
fileName
);
// 临时目录
String
path
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
fileName
;
String
tmpdir
=
System
.
getProperty
(
"java.io.tmpdir"
);
if
(
StringUtils
.
isNotBlank
(
tmpdir
)
&&
!
tmpdir
.
endsWith
(
File
.
separator
))
{
tmpdir
+=
File
.
separator
;
}
else
if
(
StringUtils
.
isBlank
(
tmpdir
)){
tmpdir
=
""
;
}
String
path
=
FilenameUtils
.
normalize
(
tmpdir
+
fileName
);
File
zipFile
=
new
File
(
path
);
zipFile
.
deleteOnExit
();
try
{
...
...
YeeAmosFireAutoSysService/src/main/java/com/yeejoin/amos/fas/core/util/WordConverterUtils.java
View file @
31d5ee39
...
...
@@ -6,6 +6,7 @@ import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import
org.apache.poi.xwpf.converter.xhtml.XHTMLOptions
;
import
org.apache.poi.xwpf.usermodel.XWPFDocument
;
import
javax.xml.XMLConstants
;
import
javax.xml.parsers.DocumentBuilderFactory
;
import
javax.xml.transform.OutputKeys
;
import
javax.xml.transform.Transformer
;
...
...
@@ -16,7 +17,7 @@ import java.io.*;
/**
* 文档转换工具
*
*
* @date
* @author nihuanshan
*
...
...
@@ -26,11 +27,11 @@ public class WordConverterUtils {
/**
* 图片存储相对文档路径
*/
private
static
String
imgPath
=
"\\image\\"
;
private
static
String
imgPath
=
File
.
separator
+
"image"
+
File
.
separator
;
/**
* word文档转html文档
*
*
* @author: nihuanshan
* @date: 2018年12月6日 下午2:55:32
* @param srcFile 原文档
...
...
@@ -50,7 +51,7 @@ public class WordConverterUtils {
}
}
}
/**
* word转html字符串
* @param srcFile
...
...
@@ -69,7 +70,7 @@ public class WordConverterUtils {
/**
* .doc文档转换成html
*
*
* @author: nihuanshan
* @date: 2018年12月6日 下午2:53:43
* @param srcFile
...
...
@@ -108,6 +109,7 @@ public class WordConverterUtils {
DOMSource
domSource
=
new
DOMSource
(
htmlDocument
);
StreamResult
streamResult
=
new
StreamResult
(
targetFile
);
TransformerFactory
tf
=
TransformerFactory
.
newInstance
();
tf
.
setFeature
(
XMLConstants
.
FEATURE_SECURE_PROCESSING
,
true
);
Transformer
serializer
=
tf
.
newTransformer
();
serializer
.
setOutputProperty
(
OutputKeys
.
ENCODING
,
"utf-8"
);
serializer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
...
...
@@ -118,7 +120,7 @@ public class WordConverterUtils {
}
}
/**
* doc转htmlString
* @param srcFile
...
...
@@ -156,12 +158,14 @@ public class WordConverterUtils {
StringWriter
stringWriter
=
new
StringWriter
();
StreamResult
streamResult
=
new
StreamResult
(
stringWriter
);
TransformerFactory
tf
=
TransformerFactory
.
newInstance
();
tf
.
setFeature
(
XMLConstants
.
FEATURE_SECURE_PROCESSING
,
true
);
Transformer
serializer
=
tf
.
newTransformer
();
serializer
.
setOutputProperty
(
OutputKeys
.
ENCODING
,
"utf-8"
);
serializer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
serializer
.
setOutputProperty
(
OutputKeys
.
METHOD
,
"html"
);
serializer
.
transform
(
domSource
,
streamResult
);
return
stringWriter
.
toString
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -202,9 +206,9 @@ public class WordConverterUtils {
e
.
printStackTrace
();
}
}
/**
*docx转htmlString
*docx转htmlString
* @param srcFile
* @param readUrl
* @return
...
...
YeeAmosFireAutoSysService/src/main/java/org/apache/poi/hwpf/converter/WordToHtmlConverter.java
deleted
100644 → 0
View file @
d948c7fd
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package
org
.
apache
.
poi
.
hwpf
.
converter
;
import
org.apache.poi.hpsf.SummaryInformation
;
import
org.apache.poi.hwpf.HWPFDocument
;
import
org.apache.poi.hwpf.HWPFDocumentCore
;
import
org.apache.poi.hwpf.converter.FontReplacer.Triplet
;
import
org.apache.poi.hwpf.usermodel.*
;
import
org.apache.poi.util.Beta
;
import
org.apache.poi.util.POILogFactory
;
import
org.apache.poi.util.POILogger
;
import
org.apache.poi.util.XMLHelper
;
import
org.w3c.dom.Document
;
import
org.w3c.dom.Element
;
import
org.w3c.dom.Text
;
import
javax.xml.transform.OutputKeys
;
import
javax.xml.transform.Transformer
;
import
javax.xml.transform.TransformerFactory
;
import
javax.xml.transform.dom.DOMSource
;
import
javax.xml.transform.stream.StreamResult
;
import
java.io.File
;
import
java.util.List
;
import
java.util.Stack
;
import
static
org
.
apache
.
poi
.
hwpf
.
converter
.
AbstractWordUtils
.
TWIPS_PER_INCH
;
/**
* Converts Word files (95-2007) into HTML files.
* <p>
* This implementation doesn't create images or links to them. This can be
* changed by overriding {@link #processImage(Element, boolean, Picture)}
* method.
*
* @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
*/
@Beta
public
class
WordToHtmlConverter
extends
AbstractWordConverter
{
/**
* Holds properties values, applied to current <tt>p</tt> element. Those
* properties shall not be doubled in children <tt>span</tt> elements.
*/
private
static
class
BlockProperies
{
final
String
pFontName
;
final
int
pFontSize
;
public
BlockProperies
(
String
pFontName
,
int
pFontSize
)
{
this
.
pFontName
=
pFontName
;
this
.
pFontSize
=
pFontSize
;
}
}
private
static
final
POILogger
logger
=
POILogFactory
.
getLogger
(
WordToHtmlConverter
.
class
);
private
static
String
getSectionStyle
(
Section
section
)
{
float
leftMargin
=
section
.
getMarginLeft
()
/
TWIPS_PER_INCH
;
float
rightMargin
=
section
.
getMarginRight
()
/
TWIPS_PER_INCH
;
float
topMargin
=
section
.
getMarginTop
()
/
TWIPS_PER_INCH
;
float
bottomMargin
=
section
.
getMarginBottom
()
/
TWIPS_PER_INCH
;
String
style
=
"margin: "
+
topMargin
+
"in "
+
rightMargin
+
"in "
+
bottomMargin
+
"in "
+
leftMargin
+
"in;"
;
if
(
section
.
getNumColumns
()
>
1
)
{
style
+=
"column-count: "
+
(
section
.
getNumColumns
()
)
+
";"
;
if
(
section
.
isColumnsEvenlySpaced
()
)
{
float
distance
=
section
.
getDistanceBetweenColumns
()
/
TWIPS_PER_INCH
;
style
+=
"column-gap: "
+
distance
+
"in;"
;
}
else
{
style
+=
"column-gap: 0.25in;"
;
}
}
return
style
;
}
/**
* Java main() interface to interact with {@link WordToHtmlConverter}
*
* <p>
* Usage: WordToHtmlConverter infile outfile
* </p>
* Where infile is an input .doc file ( Word 95-2007) which will be rendered
* as HTML into outfile
*/
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(
args
.
length
<
2
)
{
System
.
err
.
println
(
"Usage: WordToHtmlConverter <inputFile.doc> <saveTo.html>"
);
return
;
}
System
.
out
.
println
(
"Converting "
+
args
[
0
]
);
System
.
out
.
println
(
"Saving output to "
+
args
[
1
]
);
Document
doc
=
WordToHtmlConverter
.
process
(
new
File
(
args
[
0
]
)
);
DOMSource
domSource
=
new
DOMSource
(
doc
);
StreamResult
streamResult
=
new
StreamResult
(
new
File
(
args
[
1
])
);
TransformerFactory
tf
=
TransformerFactory
.
newInstance
();
Transformer
serializer
=
tf
.
newTransformer
();
// TODO set encoding from a command argument
serializer
.
setOutputProperty
(
OutputKeys
.
ENCODING
,
"UTF-8"
);
serializer
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
);
serializer
.
setOutputProperty
(
OutputKeys
.
METHOD
,
"html"
);
serializer
.
transform
(
domSource
,
streamResult
);
}
static
Document
process
(
File
docFile
)
throws
Exception
{
final
HWPFDocumentCore
wordDocument
=
WordToHtmlUtils
.
loadDoc
(
docFile
);
WordToHtmlConverter
wordToHtmlConverter
=
new
WordToHtmlConverter
(
XMLHelper
.
getDocumentBuilderFactory
().
newDocumentBuilder
()
.
newDocument
()
);
wordToHtmlConverter
.
processDocument
(
wordDocument
);
return
wordToHtmlConverter
.
getDocument
();
}
private
final
Stack
<
BlockProperies
>
blocksProperies
=
new
Stack
<
BlockProperies
>();
private
final
HtmlDocumentFacade
htmlDocumentFacade
;
private
Element
notes
=
null
;
/**
* Creates new instance of {@link WordToHtmlConverter}. Can be used for
* output several {@link HWPFDocument}s into single HTML document.
*
* @param document
* XML DOM Document used as HTML document
*/
public
WordToHtmlConverter
(
Document
document
)
{
this
.
htmlDocumentFacade
=
new
HtmlDocumentFacade
(
document
);
}
public
WordToHtmlConverter
(
HtmlDocumentFacade
htmlDocumentFacade
)
{
this
.
htmlDocumentFacade
=
htmlDocumentFacade
;
}
@Override
protected
void
afterProcess
()
{
if
(
notes
!=
null
)
htmlDocumentFacade
.
getBody
().
appendChild
(
notes
);
htmlDocumentFacade
.
updateStylesheet
();
}
public
Document
getDocument
()
{
return
htmlDocumentFacade
.
getDocument
();
}
@Override
protected
void
outputCharacters
(
Element
pElement
,
CharacterRun
characterRun
,
String
text
)
{
Element
span
=
htmlDocumentFacade
.
document
.
createElement
(
"span"
);
pElement
.
appendChild
(
span
);
StringBuilder
style
=
new
StringBuilder
();
BlockProperies
blockProperies
=
this
.
blocksProperies
.
peek
();
Triplet
triplet
=
getCharacterRunTriplet
(
characterRun
);
if
(
WordToHtmlUtils
.
isNotEmpty
(
triplet
.
fontName
)
&&
!
WordToHtmlUtils
.
equals
(
triplet
.
fontName
,
blockProperies
.
pFontName
)
)
{
style
.
append
(
"font-family:"
+
triplet
.
fontName
+
";"
);
}
if
(
characterRun
.
getFontSize
()
/
2
!=
blockProperies
.
pFontSize
)
{
style
.
append
(
"font-size:"
+
characterRun
.
getFontSize
()
/
2
+
"pt;"
);
}
if
(
triplet
.
bold
)
{
style
.
append
(
"font-weight:bold;"
);
}
if
(
triplet
.
italic
)
{
style
.
append
(
"font-style:italic;"
);
}
WordToHtmlUtils
.
addCharactersProperties
(
characterRun
,
style
);
if
(
style
.
length
()
!=
0
)
htmlDocumentFacade
.
addStyleClass
(
span
,
"s"
,
style
.
toString
()
);
Text
textNode
=
htmlDocumentFacade
.
createText
(
text
);
span
.
appendChild
(
textNode
);
}
@Override
protected
void
processBookmarks
(
HWPFDocumentCore
wordDocument
,
Element
currentBlock
,
Range
range
,
int
currentTableLevel
,
List
<
Bookmark
>
rangeBookmarks
)
{
Element
parent
=
currentBlock
;
for
(
Bookmark
bookmark
:
rangeBookmarks
)
{
Element
bookmarkElement
=
htmlDocumentFacade
.
createBookmark
(
bookmark
.
getName
()
);
parent
.
appendChild
(
bookmarkElement
);
parent
=
bookmarkElement
;
}
if
(
range
!=
null
)
processCharacters
(
wordDocument
,
currentTableLevel
,
range
,
parent
);
}
@Override
protected
void
processDocumentInformation
(
SummaryInformation
summaryInformation
)
{
if
(
WordToHtmlUtils
.
isNotEmpty
(
summaryInformation
.
getTitle
()
)
)
htmlDocumentFacade
.
setTitle
(
summaryInformation
.
getTitle
()
);
if
(
WordToHtmlUtils
.
isNotEmpty
(
summaryInformation
.
getAuthor
()
)
)
htmlDocumentFacade
.
addAuthor
(
summaryInformation
.
getAuthor
()
);
if
(
WordToHtmlUtils
.
isNotEmpty
(
summaryInformation
.
getKeywords
()
)
)
htmlDocumentFacade
.
addKeywords
(
summaryInformation
.
getKeywords
()
);
if
(
WordToHtmlUtils
.
isNotEmpty
(
summaryInformation
.
getComments
()
)
)
htmlDocumentFacade
.
addDescription
(
summaryInformation
.
getComments
()
);
}
@Override
public
void
processDocumentPart
(
HWPFDocumentCore
wordDocument
,
Range
range
)
{
super
.
processDocumentPart
(
wordDocument
,
range
);
afterProcess
();
}
@Override
protected
void
processDropDownList
(
Element
block
,
CharacterRun
characterRun
,
String
[]
values
,
int
defaultIndex
)
{
Element
select
=
htmlDocumentFacade
.
createSelect
();
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++
)
{
select
.
appendChild
(
htmlDocumentFacade
.
createOption
(
values
[
i
],
defaultIndex
==
i
)
);
}
block
.
appendChild
(
select
);
}
@Override
protected
void
processDrawnObject
(
HWPFDocument
doc
,
CharacterRun
characterRun
,
OfficeDrawing
officeDrawing
,
String
path
,
Element
block
)
{
Element
img
=
htmlDocumentFacade
.
createImage
(
path
);
block
.
appendChild
(
img
);
}
@Override
protected
void
processEndnoteAutonumbered
(
HWPFDocument
wordDocument
,
int
noteIndex
,
Element
block
,
Range
endnoteTextRange
)
{
processNoteAutonumbered
(
wordDocument
,
"end"
,
noteIndex
,
block
,
endnoteTextRange
);
}
@Override
protected
void
processFootnoteAutonumbered
(
HWPFDocument
wordDocument
,
int
noteIndex
,
Element
block
,
Range
footnoteTextRange
)
{
processNoteAutonumbered
(
wordDocument
,
"foot"
,
noteIndex
,
block
,
footnoteTextRange
);
}
@Override
protected
void
processHyperlink
(
HWPFDocumentCore
wordDocument
,
Element
currentBlock
,
Range
textRange
,
int
currentTableLevel
,
String
hyperlink
)
{
Element
basicLink
=
htmlDocumentFacade
.
createHyperlink
(
hyperlink
);
currentBlock
.
appendChild
(
basicLink
);
if
(
textRange
!=
null
)
processCharacters
(
wordDocument
,
currentTableLevel
,
textRange
,
basicLink
);
}
protected
void
processImage
(
Element
currentBlock
,
boolean
inlined
,
Picture
picture
,
String
imageSourcePath
)
{
final
int
aspectRatioX
=
picture
.
getHorizontalScalingFactor
();
final
int
aspectRatioY
=
picture
.
getVerticalScalingFactor
();
StringBuilder
style
=
new
StringBuilder
();
final
float
imageWidth
;
final
float
imageHeight
;
final
float
cropTop
;
final
float
cropBottom
;
final
float
cropLeft
;
final
float
cropRight
;
if
(
aspectRatioX
>
0
)
{
imageWidth
=
picture
.
getDxaGoal
()
*
aspectRatioX
/
1000
.
f
/
TWIPS_PER_INCH
;
cropRight
=
picture
.
getDxaCropRight
()
*
aspectRatioX
/
1000
.
f
/
TWIPS_PER_INCH
;
cropLeft
=
picture
.
getDxaCropLeft
()
*
aspectRatioX
/
1000
.
f
/
TWIPS_PER_INCH
;
}
else
{
imageWidth
=
picture
.
getDxaGoal
()
/
TWIPS_PER_INCH
;
cropRight
=
picture
.
getDxaCropRight
()
/
TWIPS_PER_INCH
;
cropLeft
=
picture
.
getDxaCropLeft
()
/
TWIPS_PER_INCH
;
}
if
(
aspectRatioY
>
0
)
{
imageHeight
=
picture
.
getDyaGoal
()
*
aspectRatioY
/
1000
.
f
/
TWIPS_PER_INCH
;
cropTop
=
picture
.
getDyaCropTop
()
*
aspectRatioY
/
1000
.
f
/
TWIPS_PER_INCH
;
cropBottom
=
picture
.
getDyaCropBottom
()
*
aspectRatioY
/
1000
.
f
/
TWIPS_PER_INCH
;
}
else
{
imageHeight
=
picture
.
getDyaGoal
()
/
TWIPS_PER_INCH
;
cropTop
=
picture
.
getDyaCropTop
()
/
TWIPS_PER_INCH
;
cropBottom
=
picture
.
getDyaCropBottom
()
/
TWIPS_PER_INCH
;
}
Element
root
;
if
(
cropTop
!=
0
||
cropRight
!=
0
||
cropBottom
!=
0
||
cropLeft
!=
0
)
{
float
visibleWidth
=
Math
.
max
(
0
,
imageWidth
-
cropLeft
-
cropRight
);
float
visibleHeight
=
Math
.
max
(
0
,
imageHeight
-
cropTop
-
cropBottom
);
root
=
htmlDocumentFacade
.
createBlock
();
htmlDocumentFacade
.
addStyleClass
(
root
,
"d"
,
"vertical-align:text-bottom;width:"
+
visibleWidth
+
"in;height:"
+
visibleHeight
+
"in;"
);
// complex
Element
inner
=
htmlDocumentFacade
.
createBlock
();
htmlDocumentFacade
.
addStyleClass
(
inner
,
"d"
,
"position:relative;width:"
+
visibleWidth
+
"in;height:"
+
visibleHeight
+
"in;overflow:hidden;"
);
root
.
appendChild
(
inner
);
Element
image
=
htmlDocumentFacade
.
createImage
(
imageSourcePath
);
htmlDocumentFacade
.
addStyleClass
(
image
,
"i"
,
"position:absolute;left:-"
+
cropLeft
+
";top:-"
+
cropTop
+
";width:"
+
imageWidth
+
"in;height:"
+
imageHeight
+
"in;"
);
inner
.
appendChild
(
image
);
style
.
append
(
"overflow:hidden;"
);
}
else
{
root
=
htmlDocumentFacade
.
createImage
(
imageSourcePath
);
root
.
setAttribute
(
"style"
,
"width:"
+
imageWidth
+
"in;height:"
+
imageHeight
+
"in;vertical-align:text-bottom;"
);
}
currentBlock
.
appendChild
(
root
);
}
@Override
protected
void
processImageWithoutPicturesManager
(
Element
currentBlock
,
boolean
inlined
,
Picture
picture
)
{
// no default implementation -- skip
currentBlock
.
appendChild
(
htmlDocumentFacade
.
document
.
createComment
(
"Image link to '"
+
picture
.
suggestFullFileName
()
+
"' can be here"
)
);
}
@Override
protected
void
processLineBreak
(
Element
block
,
CharacterRun
characterRun
)
{
block
.
appendChild
(
htmlDocumentFacade
.
createLineBreak
()
);
}
protected
void
processNoteAutonumbered
(
HWPFDocument
doc
,
String
type
,
int
noteIndex
,
Element
block
,
Range
noteTextRange
)
{
final
String
textIndex
=
String
.
valueOf
(
noteIndex
+
1
);
final
String
textIndexClass
=
htmlDocumentFacade
.
getOrCreateCssClass
(
"a"
,
"vertical-align:super;font-size:smaller;"
);
final
String
forwardNoteLink
=
type
+
"note_"
+
textIndex
;
final
String
backwardNoteLink
=
type
+
"note_back_"
+
textIndex
;
Element
anchor
=
htmlDocumentFacade
.
createHyperlink
(
"#"
+
forwardNoteLink
);
anchor
.
setAttribute
(
"name"
,
backwardNoteLink
);
anchor
.
setAttribute
(
"class"
,
textIndexClass
+
" "
+
type
+
"noteanchor"
);
anchor
.
setTextContent
(
textIndex
);
block
.
appendChild
(
anchor
);
if
(
notes
==
null
)
{
notes
=
htmlDocumentFacade
.
createBlock
();
notes
.
setAttribute
(
"class"
,
"notes"
);
}
Element
note
=
htmlDocumentFacade
.
createBlock
();
note
.
setAttribute
(
"class"
,
type
+
"note"
);
notes
.
appendChild
(
note
);
Element
bookmark
=
htmlDocumentFacade
.
createBookmark
(
forwardNoteLink
);
bookmark
.
setAttribute
(
"href"
,
"#"
+
backwardNoteLink
);
bookmark
.
setTextContent
(
textIndex
);
bookmark
.
setAttribute
(
"class"
,
textIndexClass
+
" "
+
type
+
"noteindex"
);
note
.
appendChild
(
bookmark
);
note
.
appendChild
(
htmlDocumentFacade
.
createText
(
" "
)
);
Element
span
=
htmlDocumentFacade
.
getDocument
().
createElement
(
"span"
);
span
.
setAttribute
(
"class"
,
type
+
"notetext"
);
note
.
appendChild
(
span
);
this
.
blocksProperies
.
add
(
new
BlockProperies
(
""
,
-
1
)
);
try
{
processCharacters
(
doc
,
Integer
.
MIN_VALUE
,
noteTextRange
,
span
);
}
finally
{
this
.
blocksProperies
.
pop
();
}
}
@Override
protected
void
processPageBreak
(
HWPFDocumentCore
wordDocument
,
Element
flow
)
{
flow
.
appendChild
(
htmlDocumentFacade
.
createLineBreak
()
);
}
protected
void
processPageref
(
HWPFDocumentCore
hwpfDocument
,
Element
currentBlock
,
Range
textRange
,
int
currentTableLevel
,
String
pageref
)
{
Element
basicLink
=
htmlDocumentFacade
.
createHyperlink
(
"#"
+
pageref
);
currentBlock
.
appendChild
(
basicLink
);
if
(
textRange
!=
null
)
processCharacters
(
hwpfDocument
,
currentTableLevel
,
textRange
,
basicLink
);
}
protected
void
processParagraph
(
HWPFDocumentCore
hwpfDocument
,
Element
parentElement
,
int
currentTableLevel
,
Paragraph
paragraph
,
String
bulletText
)
{
final
Element
pElement
=
htmlDocumentFacade
.
createParagraph
();
parentElement
.
appendChild
(
pElement
);
StringBuilder
style
=
new
StringBuilder
();
WordToHtmlUtils
.
addParagraphProperties
(
paragraph
,
style
);
final
int
charRuns
=
paragraph
.
numCharacterRuns
();
if
(
charRuns
==
0
)
{
return
;
}
{
final
String
pFontName
;
final
int
pFontSize
;
final
CharacterRun
characterRun
=
paragraph
.
getCharacterRun
(
0
);
if
(
characterRun
!=
null
)
{
Triplet
triplet
=
getCharacterRunTriplet
(
characterRun
);
pFontSize
=
characterRun
.
getFontSize
()
/
2
;
pFontName
=
triplet
.
fontName
;
WordToHtmlUtils
.
addFontFamily
(
pFontName
,
style
);
WordToHtmlUtils
.
addFontSize
(
pFontSize
,
style
);
}
else
{
pFontSize
=
-
1
;
pFontName
=
WordToHtmlUtils
.
EMPTY
;
}
blocksProperies
.
push
(
new
BlockProperies
(
pFontName
,
pFontSize
)
);
}
try
{
if
(
WordToHtmlUtils
.
isNotEmpty
(
bulletText
)
)
{
if
(
bulletText
.
endsWith
(
"\t"
)
)
{
/*
* We don't know how to handle all cases in HTML, but at
* least simplest case shall be handled
*/
final
float
defaultTab
=
TWIPS_PER_INCH
/
2
;
float
firstLinePosition
=
paragraph
.
getIndentFromLeft
()
+
paragraph
.
getFirstLineIndent
()
+
20
;
// char have
// some space
float
nextStop
=
(
float
)
(
Math
.
ceil
(
firstLinePosition
/
defaultTab
)
*
defaultTab
);
final
float
spanMinWidth
=
nextStop
-
firstLinePosition
;
Element
span
=
htmlDocumentFacade
.
getDocument
()
.
createElement
(
"span"
);
htmlDocumentFacade
.
addStyleClass
(
span
,
"s"
,
"display: inline-block; text-indent: 0; min-width: "
+
(
spanMinWidth
/
TWIPS_PER_INCH
)
+
"in;"
);
pElement
.
appendChild
(
span
);
Text
textNode
=
htmlDocumentFacade
.
createText
(
bulletText
.
substring
(
0
,
bulletText
.
length
()
-
1
)
+
UNICODECHAR_ZERO_WIDTH_SPACE
+
UNICODECHAR_NO_BREAK_SPACE
);
span
.
appendChild
(
textNode
);
}
else
{
Text
textNode
=
htmlDocumentFacade
.
createText
(
bulletText
.
substring
(
0
,
bulletText
.
length
()
-
1
)
);
pElement
.
appendChild
(
textNode
);
}
}
processCharacters
(
hwpfDocument
,
currentTableLevel
,
paragraph
,
pElement
);
}
finally
{
blocksProperies
.
pop
();
}
if
(
style
.
length
()
>
0
)
htmlDocumentFacade
.
addStyleClass
(
pElement
,
"p"
,
style
.
toString
()
);
if
(
paragraph
.
getStyleIndex
()>
0
){
pElement
.
setAttribute
(
"id"
,
"p"
+
System
.
nanoTime
()%
100000000
+
"-"
+
paragraph
.
getStyleIndex
());
}
WordToHtmlUtils
.
compactSpans
(
pElement
);
return
;
}
protected
void
processSection
(
HWPFDocumentCore
wordDocument
,
Section
section
,
int
sectionCounter
)
{
Element
div
=
htmlDocumentFacade
.
createBlock
();
htmlDocumentFacade
.
addStyleClass
(
div
,
"d"
,
getSectionStyle
(
section
)
);
htmlDocumentFacade
.
body
.
appendChild
(
div
);
processParagraphes
(
wordDocument
,
div
,
section
,
Integer
.
MIN_VALUE
);
}
@Override
protected
void
processSingleSection
(
HWPFDocumentCore
wordDocument
,
Section
section
)
{
htmlDocumentFacade
.
addStyleClass
(
htmlDocumentFacade
.
body
,
"b"
,
getSectionStyle
(
section
)
);
processParagraphes
(
wordDocument
,
htmlDocumentFacade
.
body
,
section
,
Integer
.
MIN_VALUE
);
}
protected
void
processTable
(
HWPFDocumentCore
hwpfDocument
,
Element
flow
,
Table
table
)
{
Element
tableHeader
=
htmlDocumentFacade
.
createTableHeader
();
Element
tableBody
=
htmlDocumentFacade
.
createTableBody
();
final
int
[]
tableCellEdges
=
WordToHtmlUtils
.
buildTableCellEdgesArray
(
table
);
final
int
tableRows
=
table
.
numRows
();
int
maxColumns
=
Integer
.
MIN_VALUE
;
for
(
int
r
=
0
;
r
<
tableRows
;
r
++
)
{
maxColumns
=
Math
.
max
(
maxColumns
,
table
.
getRow
(
r
).
numCells
()
);
}
for
(
int
r
=
0
;
r
<
tableRows
;
r
++
)
{
TableRow
tableRow
=
table
.
getRow
(
r
);
Element
tableRowElement
=
htmlDocumentFacade
.
createTableRow
();
StringBuilder
tableRowStyle
=
new
StringBuilder
();
WordToHtmlUtils
.
addTableRowProperties
(
tableRow
,
tableRowStyle
);
// index of current element in tableCellEdges[]
int
currentEdgeIndex
=
0
;
final
int
rowCells
=
tableRow
.
numCells
();
for
(
int
c
=
0
;
c
<
rowCells
;
c
++
)
{
TableCell
tableCell
=
tableRow
.
getCell
(
c
);
if
(
tableCell
.
isVerticallyMerged
()
&&
!
tableCell
.
isFirstVerticallyMerged
()
)
{
currentEdgeIndex
+=
getNumberColumnsSpanned
(
tableCellEdges
,
currentEdgeIndex
,
tableCell
);
continue
;
}
Element
tableCellElement
;
if
(
tableRow
.
isTableHeader
()
)
{
tableCellElement
=
htmlDocumentFacade
.
createTableHeaderCell
();
}
else
{
tableCellElement
=
htmlDocumentFacade
.
createTableCell
();
}
StringBuilder
tableCellStyle
=
new
StringBuilder
();
WordToHtmlUtils
.
addTableCellProperties
(
tableRow
,
tableCell
,
r
==
0
,
r
==
tableRows
-
1
,
c
==
0
,
c
==
rowCells
-
1
,
tableCellStyle
);
int
colSpan
=
getNumberColumnsSpanned
(
tableCellEdges
,
currentEdgeIndex
,
tableCell
);
currentEdgeIndex
+=
colSpan
;
if
(
colSpan
==
0
)
continue
;
if
(
colSpan
!=
1
)
tableCellElement
.
setAttribute
(
"colspan"
,
String
.
valueOf
(
colSpan
)
);
final
int
rowSpan
=
getNumberRowsSpanned
(
table
,
tableCellEdges
,
r
,
c
,
tableCell
);
if
(
rowSpan
>
1
)
tableCellElement
.
setAttribute
(
"rowspan"
,
String
.
valueOf
(
rowSpan
)
);
processParagraphes
(
hwpfDocument
,
tableCellElement
,
tableCell
,
table
.
getTableLevel
()
);
if
(
!
tableCellElement
.
hasChildNodes
()
)
{
tableCellElement
.
appendChild
(
htmlDocumentFacade
.
createParagraph
()
);
}
if
(
tableCellStyle
.
length
()
>
0
)
htmlDocumentFacade
.
addStyleClass
(
tableCellElement
,
tableCellElement
.
getTagName
(),
tableCellStyle
.
toString
()
);
tableRowElement
.
appendChild
(
tableCellElement
);
}
if
(
tableRowStyle
.
length
()
>
0
)
tableRowElement
.
setAttribute
(
"class"
,
htmlDocumentFacade
.
getOrCreateCssClass
(
"r"
,
tableRowStyle
.
toString
()
)
);
if
(
tableRow
.
isTableHeader
()
)
{
tableHeader
.
appendChild
(
tableRowElement
);
}
else
{
tableBody
.
appendChild
(
tableRowElement
);
}
}
final
Element
tableElement
=
htmlDocumentFacade
.
createTable
();
tableElement
.
setAttribute
(
"class"
,
htmlDocumentFacade
.
getOrCreateCssClass
(
"t"
,
"table-layout:fixed;border-collapse:collapse;border-spacing:0;"
)
);
if
(
tableHeader
.
hasChildNodes
()
)
{
tableElement
.
appendChild
(
tableHeader
);
}
if
(
tableBody
.
hasChildNodes
()
)
{
tableElement
.
appendChild
(
tableBody
);
flow
.
appendChild
(
tableElement
);
}
else
{
logger
.
log
(
POILogger
.
WARN
,
"Table without body starting at ["
,
Integer
.
valueOf
(
table
.
getStartOffset
()
),
"; "
,
Integer
.
valueOf
(
table
.
getEndOffset
()
),
")"
);
}
}
}
YeeAmosFireAutoSysStart/src/main/java/com/yeejoin/amos/YeeAmosFireAutoSysStart.java
View file @
31d5ee39
...
...
@@ -19,6 +19,7 @@ import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.core.env.Environment
;
...
...
@@ -35,7 +36,7 @@ import com.yeejoin.amos.filter.CrossDomainFilter;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
/**
*
*
* <pre>
* 服务启动类
* </pre>
...
...
@@ -70,13 +71,15 @@ public class YeeAmosFireAutoSysStart implements ApplicationContextAware {
*/
public
static
void
main
(
String
[]
args
)
{
log
.
info
(
"start Service.........."
);
try
{
SpringApplication
application
=
new
SpringApplication
(
YeeAmosFireAutoSysStart
.
class
);
Environment
environment
=
application
.
run
(
args
).
getEnvironment
();
log
.
info
(
"SwaggerUI: http://"
+
InetAddress
.
getLocalHost
().
getHostAddress
()
+
":"
+
environment
.
getProperty
(
"server.port"
)
+
environment
.
getProperty
(
"server.servlet.context-path"
)
+
"/swagger-ui.html"
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"error occur when run server! "
+
e
);
}
ApplicationContext
context
=
SpringApplication
.
run
(
YeeAmosFireAutoSysStart
.
class
,
args
);
Environment
env
=
context
.
getEnvironment
();
String
appName
=
env
.
getProperty
(
"spring.application.name"
);
log
.
info
(
"\n----------------------------------------------------------\n\t"
+
"Application {} is running!\n"
+
"----------------------------------------------------------\n"
,
appName
);
}
/**
...
...
@@ -90,7 +93,7 @@ public class YeeAmosFireAutoSysStart implements ApplicationContextAware {
}
/**
*
*
* <pre>
* 跨域处理的FilterBean
* </pre>
...
...
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