Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
java-demo
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Leona
W
web
backend
java-demo
Commits
9ed432e4
Commit
9ed432e4
authored
Feb 24, 2020
by
duanledexianxianxian
😁
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
init
parent
d574d897
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
459 additions
and
0 deletions
+459
-0
excel-watermark/pom.xml
excel-watermark/pom.xml
+85
-0
excel-watermark/src/main/java/com/duanledexianxianxian/demo/AF101880439_en-us_draft.png
...com/duanledexianxianxian/demo/AF101880439_en-us_draft.png
+0
-0
excel-watermark/src/main/java/com/duanledexianxianxian/demo/App.java
...mark/src/main/java/com/duanledexianxianxian/demo/App.java
+57
-0
excel-watermark/src/main/java/com/duanledexianxianxian/demo/CreateExcelPictureInHeaderAKAWatermark.java
...xianxian/demo/CreateExcelPictureInHeaderAKAWatermark.java
+164
-0
excel-watermark/src/main/java/com/duanledexianxianxian/demo/util/ExcelWaterRemarkUtils.java
...duanledexianxianxian/demo/util/ExcelWaterRemarkUtils.java
+90
-0
excel-watermark/src/main/java/com/duanledexianxianxian/demo/util/ImageUtils.java
...n/java/com/duanledexianxianxian/demo/util/ImageUtils.java
+43
-0
excel-watermark/src/main/resources/AF101880439_en-us_draft.png
...-watermark/src/main/resources/AF101880439_en-us_draft.png
+0
-0
excel-watermark/src/main/resources/test.xlsx
excel-watermark/src/main/resources/test.xlsx
+0
-0
excel-watermark/src/main/resources/watermark.xlsx
excel-watermark/src/main/resources/watermark.xlsx
+0
-0
excel-watermark/src/main/resources/水印.png
excel-watermark/src/main/resources/水印.png
+0
-0
excel-watermark/src/test/java/com/duanledexianxianxian/demo/AppTest.java
.../src/test/java/com/duanledexianxianxian/demo/AppTest.java
+20
-0
No files found.
excel-watermark/pom.xml
0 → 100644
View file @
9ed432e4
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.duanledexianxianxian.demo
</groupId>
<artifactId>
excel-watermark
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<name>
excel-watermark
</name>
<!-- FIXME change it to the project's website -->
<url>
http://www.example.com
</url>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
1.7
</maven.compiler.source>
<maven.compiler.target>
1.7
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.11
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.apache.poi
</groupId>
<artifactId>
poi
</artifactId>
<version>
4.0.1
</version>
</dependency>
<dependency>
<groupId>
org.apache.poi
</groupId>
<artifactId>
poi-ooxml
</artifactId>
<version>
4.0.1
</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>
maven-clean-plugin
</artifactId>
<version>
3.1.0
</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>
maven-resources-plugin
</artifactId>
<version>
3.0.2
</version>
</plugin>
<plugin>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.0
</version>
</plugin>
<plugin>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
2.22.1
</version>
</plugin>
<plugin>
<artifactId>
maven-jar-plugin
</artifactId>
<version>
3.0.2
</version>
</plugin>
<plugin>
<artifactId>
maven-install-plugin
</artifactId>
<version>
2.5.2
</version>
</plugin>
<plugin>
<artifactId>
maven-deploy-plugin
</artifactId>
<version>
2.8.2
</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>
maven-site-plugin
</artifactId>
<version>
3.7.1
</version>
</plugin>
<plugin>
<artifactId>
maven-project-info-reports-plugin
</artifactId>
<version>
3.0.0
</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
excel-watermark/src/main/java/com/duanledexianxianxian/demo/AF101880439_en-us_draft.png
0 → 100644
View file @
9ed432e4
22.8 KB
excel-watermark/src/main/java/com/duanledexianxianxian/demo/App.java
0 → 100644
View file @
9ed432e4
package
com.duanledexianxianxian.demo
;
import
com.duanledexianxianxian.demo.util.ExcelWaterRemarkUtils
;
import
com.duanledexianxianxian.demo.util.ImageUtils
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
java.io.*
;
/**
* Hello world!
*
*/
public
class
App
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
//读取excel文件
Workbook
wb
=
new
XSSFWorkbook
(
new
FileInputStream
(
"F:\\@project@\\@dianli@\\java-demo\\excel-watermark\\src\\main\\resources\\test.xlsx"
));
//设置水印图片路径
String
imgPath
=
"F:\\@project@\\@dianli@\\java-demo\\excel-watermark\\src\\main\\resources\\水印.png"
;
ImageUtils
.
createWaterMark
(
"文字水印效果"
,
imgPath
);
//获取excel sheet个数
int
sheets
=
wb
.
getNumberOfSheets
();
//循环sheet给每个sheet添加水印
for
(
int
i
=
0
;
i
<
sheets
;
i
++)
{
Sheet
sheet
=
wb
.
getSheetAt
(
i
);
//excel加密只读
//sheet.protectSheet(UUID.randomUUID().toString());
//获取excel实际所占行
int
row
=
sheet
.
getFirstRowNum
()
+
sheet
.
getLastRowNum
();
//获取excel实际所占列
int
cell
=
sheet
.
getRow
(
sheet
.
getFirstRowNum
()).
getLastCellNum
()
+
1
;
//根据行与列计算实际所需多少水印
ExcelWaterRemarkUtils
.
putWaterRemarkToExcel
(
wb
,
sheet
,
imgPath
,
0
,
0
,
5
,
5
,
cell
/
5
+
1
,
row
/
5
+
1
,
0
,
0
);
}
ByteArrayOutputStream
os
=
new
ByteArrayOutputStream
();
try
{
wb
.
write
(
os
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
wb
.
close
();
byte
[]
content
=
os
.
toByteArray
();
// Excel文件生成后存储的位置。
File
file1
=
new
File
(
"F:\\@project@\\@dianli@\\java-demo\\excel-watermark\\src\\main\\resources\\watermark.xlsx"
);
OutputStream
fos
=
null
;
try
{
fos
=
new
FileOutputStream
(
file1
);
fos
.
write
(
content
);
os
.
close
();
fos
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
excel-watermark/src/main/java/com/duanledexianxianxian/demo/CreateExcelPictureInHeaderAKAWatermark.java
0 → 100644
View file @
9ed432e4
package
com.duanledexianxianxian.demo
;
import
org.apache.poi.openxml4j.opc.OPCPackage
;
import
org.apache.poi.openxml4j.opc.PackagePart
;
import
org.apache.poi.openxml4j.opc.PackagePartName
;
import
org.apache.poi.openxml4j.opc.PackagingURIHelper
;
import
org.apache.poi.ss.usermodel.Header
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.util.ImageUtils
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.xssf.usermodel.XSSFPictureData
;
import
org.apache.poi.xssf.usermodel.XSSFRelation
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.apache.xmlbeans.XmlObject
;
//import org.apache.poi.POIXMLDocumentPart;
import
org.apache.poi.ooxml.POIXMLDocumentPart
;
//import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
import
static
org
.
apache
.
poi
.
ooxml
.
POIXMLTypeLoader
.
DEFAULT_XML_OPTIONS
;
import
java.io.*
;
public
class
CreateExcelPictureInHeaderAKAWatermark
{
static
void
createPictureForHeader
(
XSSFSheet
sheet
,
int
pictureIdx
,
String
pictureTitle
,
int
vmlIdx
,
String
headerPos
)
throws
Exception
{
OPCPackage
opcpackage
=
sheet
.
getWorkbook
().
getPackage
();
//creating /xl/drawings/vmlDrawing1.vml
PackagePartName
partname
=
PackagingURIHelper
.
createPartName
(
"/xl/drawings/vmlDrawing"
+
vmlIdx
+
".vml"
);
PackagePart
part
=
opcpackage
.
createPart
(
partname
,
"application/vnd.openxmlformats-officedocument.vmlDrawing"
);
//creating new VmlDrawing
VmlDrawing
vmldrawing
=
new
VmlDrawing
(
part
);
//creating the relation to the picture in /xl/drawings/_rels/vmlDrawing1.vml.rels
XSSFPictureData
picData
=
sheet
.
getWorkbook
().
getAllPictures
().
get
(
pictureIdx
);
String
rIdPic
=
vmldrawing
.
addRelation
(
null
,
XSSFRelation
.
IMAGES
,
picData
).
getRelationship
().
getId
();
//get image dimension
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
picData
.
getData
());
java
.
awt
.
Dimension
imageDimension
=
ImageUtils
.
getImageDimension
(
is
,
picData
.
getPictureType
());
is
.
close
();
//updating the VmlDrawing
vmldrawing
.
setRIdPic
(
rIdPic
);
vmldrawing
.
setPictureTitle
(
pictureTitle
);
vmldrawing
.
setImageDimension
(
imageDimension
);
vmldrawing
.
setHeaderPos
(
headerPos
);
//creating the relation to /xl/drawings/vmlDrawing1.xml in /xl/worksheets/_rels/sheet1.xml.rels
String
rIdExtLink
=
sheet
.
addRelation
(
null
,
XSSFRelation
.
VML_DRAWINGS
,
vmldrawing
).
getRelationship
().
getId
();
//creating the <legacyDrawingHF r:id="..."/> in /xl/worksheets/sheetN.xml
sheet
.
getCTWorksheet
().
addNewLegacyDrawingHF
().
setId
(
rIdExtLink
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Workbook
workbook
=
new
XSSFWorkbook
();
Sheet
sheet
;
Header
header
;
InputStream
is
;
byte
[]
bytes
;
int
pictureIdx
;
//we need it later
sheet
=
workbook
.
createSheet
();
header
=
sheet
.
getHeader
();
header
.
setCenter
(
"&G"
);
// &G means Graphic
//add picture data to this workbook
is
=
new
FileInputStream
(
"F:\\@project@\\@dianli@\\java-demo\\excel-watermark\\src\\main\\resources\\AF101880439_en-us_draft.png"
);
bytes
=
IOUtils
.
toByteArray
(
is
);
pictureIdx
=
workbook
.
addPicture
(
bytes
,
Workbook
.
PICTURE_TYPE_PNG
);
is
.
close
();
//create header picture from picture data of this workbook
createPictureForHeader
((
XSSFSheet
)
sheet
,
pictureIdx
,
"AF101880439_en-us_draft"
,
1
,
"CH"
/*CenterHeader*/
);
FileOutputStream
out
=
new
FileOutputStream
(
"test.xlsx"
);
workbook
.
write
(
out
);
out
.
close
();
workbook
.
close
();
}
//class for VmlDrawing
static
class
VmlDrawing
extends
POIXMLDocumentPart
{
String
rIdPic
=
""
;
String
pictureTitle
=
""
;
java
.
awt
.
Dimension
imageDimension
=
null
;
String
headerPos
=
""
;
VmlDrawing
(
PackagePart
part
)
{
super
(
part
);
}
void
setRIdPic
(
String
rIdPic
)
{
this
.
rIdPic
=
rIdPic
;
}
void
setPictureTitle
(
String
pictureTitle
)
{
this
.
pictureTitle
=
pictureTitle
;
}
void
setHeaderPos
(
String
headerPos
)
{
this
.
headerPos
=
headerPos
;
}
void
setImageDimension
(
java
.
awt
.
Dimension
imageDimension
)
{
this
.
imageDimension
=
imageDimension
;
}
@Override
protected
void
commit
()
throws
IOException
{
PackagePart
part
=
getPackagePart
();
OutputStream
out
=
part
.
getOutputStream
();
try
{
XmlObject
doc
=
XmlObject
.
Factory
.
parse
(
"<xml xmlns:v=\"urn:schemas-microsoft-com:vml\""
+
" xmlns:o=\"urn:schemas-microsoft-com:office:office\""
+
" xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"
+
" <o:shapelayout v:ext=\"edit\">"
+
" <o:idmap v:ext=\"edit\" data=\"1\"/>"
+
" </o:shapelayout><v:shapetype id=\"_x0000_t75\" coordsize=\"21600,21600\" o:spt=\"75\""
+
" o:preferrelative=\"t\" path=\"m@4@5l@4@11@9@11@9@5xe\" filled=\"f\" stroked=\"f\">"
+
" <v:stroke joinstyle=\"miter\"/>"
+
" <v:formulas>"
+
" <v:f eqn=\"if lineDrawn pixelLineWidth 0\"/>"
+
" <v:f eqn=\"sum @0 1 0\"/>"
+
" <v:f eqn=\"sum 0 0 @1\"/>"
+
" <v:f eqn=\"prod @2 1 2\"/>"
+
" <v:f eqn=\"prod @3 21600 pixelWidth\"/>"
+
" <v:f eqn=\"prod @3 21600 pixelHeight\"/>"
+
" <v:f eqn=\"sum @0 0 1\"/>"
+
" <v:f eqn=\"prod @6 1 2\"/>"
+
" <v:f eqn=\"prod @7 21600 pixelWidth\"/>"
+
" <v:f eqn=\"sum @8 21600 0\"/>"
+
" <v:f eqn=\"prod @7 21600 pixelHeight\"/>"
+
" <v:f eqn=\"sum @10 21600 0\"/>"
+
" </v:formulas>"
+
" <v:path o:extrusionok=\"f\" gradientshapeok=\"t\" o:connecttype=\"rect\"/>"
+
" <o:lock v:ext=\"edit\" aspectratio=\"t\"/>"
+
" </v:shapetype><v:shape id=\""
+
headerPos
+
"\" o:spid=\"_x0000_s1025\" type=\"#_x0000_t75\""
+
" style='position:absolute;margin-left:0;margin-top:0;"
+
"width:"
+
(
int
)
imageDimension
.
getWidth
()
+
"px;height:"
+
(
int
)
imageDimension
.
getHeight
()
+
"px;"
+
"z-index:1'>"
+
" <v:imagedata o:relid=\""
+
rIdPic
+
"\" o:title=\""
+
pictureTitle
+
"\"/>"
+
" <o:lock v:ext=\"edit\" rotation=\"t\"/>"
+
" </v:shape></xml>"
);
doc
.
save
(
out
,
DEFAULT_XML_OPTIONS
);
out
.
close
();
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
}
}
}
excel-watermark/src/main/java/com/duanledexianxianxian/demo/util/ExcelWaterRemarkUtils.java
0 → 100644
View file @
9ed432e4
package
com.duanledexianxianxian.demo.util
;
import
org.apache.poi.ss.usermodel.*
;
import
javax.imageio.ImageIO
;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayOutputStream
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
public
class
ExcelWaterRemarkUtils
{
/*
* 为Excel打上水印工具函数 请自行确保参数值,以保证水印图片之间不会覆盖。 在计算水印的位置的时候,并没有考虑到单元格合并的情况,请注意
*
* @param wb
* Excel Workbook
* @param sheet
* 需要打水印的Excel
* @param waterRemarkPath
* 水印地址,classPath,目前只支持png格式的图片,
* 因为非png格式的图片打到Excel上后可能会有图片变红的问题,且不容易做出透明效果。
* 同时请注意传入的地址格式,应该为类似:"\\excelTemplate\\test.png"
* @param startXCol
* 水印起始列
* @param startYRow
* 水印起始行
* @param betweenXCol
* 水印横向之间间隔多少列
* @param betweenYRow
* 水印纵向之间间隔多少行
* @param XCount
* 横向共有水印多少个
* @param YCount
* 纵向共有水印多少个
* @param waterRemarkWidth
* 水印图片宽度为多少列
* @param waterRemarkHeight
* 水印图片高度为多少行
* @throws IOException
*/
public
static
void
putWaterRemarkToExcel
(
Workbook
wb
,
Sheet
sheet
,
String
waterRemarkPath
,
int
startXCol
,
int
startYRow
,
int
betweenXCol
,
int
betweenYRow
,
int
XCount
,
int
YCount
,
int
waterRemarkWidth
,
int
waterRemarkHeight
)
throws
IOException
{
// 校验传入的水印图片格式
if
(!
waterRemarkPath
.
endsWith
(
"png"
)
&&
!
waterRemarkPath
.
endsWith
(
"PNG"
))
{
throw
new
RuntimeException
(
"向Excel上面打印水印,目前支持png格式的图片。"
);
}
// 加载图片
ByteArrayOutputStream
byteArrayOut
=
new
ByteArrayOutputStream
();
InputStream
imageIn
=
new
FileInputStream
(
waterRemarkPath
);
//InputStream imageIn = Thread.currentThread().getContextClassLoader().getResourceAsStream(waterRemarkPath);
if
(
null
==
imageIn
||
imageIn
.
available
()
<
1
)
{
throw
new
RuntimeException
(
"向Excel上面打印水印,读取水印图片失败(1)。"
);
}
BufferedImage
bufferImg
=
ImageIO
.
read
(
imageIn
);
if
(
null
==
bufferImg
)
{
throw
new
RuntimeException
(
"向Excel上面打印水印,读取水印图片失败(2)。"
);
}
ImageIO
.
write
(
bufferImg
,
"png"
,
byteArrayOut
);
// 开始打水印
Drawing
drawing
=
sheet
.
createDrawingPatriarch
();
// 按照共需打印多少行水印进行循环
for
(
int
yCount
=
0
;
yCount
<
YCount
;
yCount
++)
{
// 按照每行需要打印多少个水印进行循环
for
(
int
xCount
=
0
;
xCount
<
XCount
;
xCount
++)
{
// 创建水印图片位置
int
xIndexInteger
=
startXCol
+
(
xCount
*
waterRemarkWidth
)
+
(
xCount
*
betweenXCol
);
int
yIndexInteger
=
startYRow
+
(
yCount
*
waterRemarkHeight
)
+
(
yCount
*
betweenYRow
);
/*
* 参数定义: 第一个参数是(x轴的开始节点); 第二个参数是(是y轴的开始节点); 第三个参数是(是x轴的结束节点);
* 第四个参数是(是y轴的结束节点); 第五个参数是(是从Excel的第几列开始插入图片,从0开始计数);
* 第六个参数是(是从excel的第几行开始插入图片,从0开始计数); 第七个参数是(图片宽度,共多少列);
* 第8个参数是(图片高度,共多少行);
*/
ClientAnchor
anchor
=
drawing
.
createAnchor
(
0
,
0
,
0
,
0
,
xIndexInteger
,
yIndexInteger
,
xIndexInteger
+
waterRemarkWidth
,
yIndexInteger
+
waterRemarkHeight
);
Picture
pic
=
drawing
.
createPicture
(
anchor
,
wb
.
addPicture
(
byteArrayOut
.
toByteArray
(),
Workbook
.
PICTURE_TYPE_PNG
));
pic
.
resize
();
}
}
}
}
excel-watermark/src/main/java/com/duanledexianxianxian/demo/util/ImageUtils.java
0 → 100644
View file @
9ed432e4
package
com.duanledexianxianxian.demo.util
;
import
javax.imageio.ImageIO
;
import
java.awt.*
;
import
java.awt.font.FontRenderContext
;
import
java.awt.geom.Rectangle2D
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.IOException
;
public
class
ImageUtils
{
public
static
void
createWaterMark
(
String
content
,
String
path
)
throws
IOException
{
Integer
width
=
300
;
Integer
height
=
200
;
BufferedImage
image
=
new
BufferedImage
(
width
,
height
,
BufferedImage
.
TYPE_INT_RGB
);
// 获取bufferedImage对象
String
fontType
=
"宋体"
;
Integer
fontStyle
=
Font
.
PLAIN
;
Integer
fontSize
=
50
;
Font
font
=
new
Font
(
fontType
,
fontStyle
,
fontSize
);
Graphics2D
g2d
=
image
.
createGraphics
();
// 获取Graphics2d对象
image
=
g2d
.
getDeviceConfiguration
().
createCompatibleImage
(
width
,
height
,
Transparency
.
TRANSLUCENT
);
g2d
.
dispose
();
g2d
=
image
.
createGraphics
();
g2d
.
setColor
(
new
Color
(
0
,
0
,
0
,
80
));
//设置字体颜色和透明度
g2d
.
setStroke
(
new
BasicStroke
(
1
));
// 设置字体
g2d
.
setFont
(
font
);
// 设置字体类型 加粗 大小
g2d
.
rotate
(
Math
.
toRadians
(-
10
),
(
double
)
image
.
getWidth
()
/
2
,
(
double
)
image
.
getHeight
()
/
2
);
//设置倾斜度
FontRenderContext
context
=
g2d
.
getFontRenderContext
();
Rectangle2D
bounds
=
font
.
getStringBounds
(
content
,
context
);
double
x
=
(
width
-
bounds
.
getWidth
())
/
2
;
double
y
=
(
height
-
bounds
.
getHeight
())
/
2
;
double
ascent
=
-
bounds
.
getY
();
double
baseY
=
y
+
ascent
;
// 写入水印文字原定高度过小,所以累计写水印,增加高度
g2d
.
drawString
(
content
,
(
int
)
x
,
(
int
)
baseY
);
// 设置透明度
g2d
.
setComposite
(
AlphaComposite
.
getInstance
(
AlphaComposite
.
SRC_OVER
));
// 释放对象
g2d
.
dispose
();
ImageIO
.
write
(
image
,
"png"
,
new
File
(
path
));
}
}
excel-watermark/src/main/resources/AF101880439_en-us_draft.png
0 → 100644
View file @
9ed432e4
22.8 KB
excel-watermark/src/main/resources/test.xlsx
0 → 100644
View file @
9ed432e4
File added
excel-watermark/src/main/resources/watermark.xlsx
0 → 100644
View file @
9ed432e4
File added
excel-watermark/src/main/resources/水印.png
0 → 100644
View file @
9ed432e4
1.56 KB
excel-watermark/src/test/java/com/duanledexianxianxian/demo/AppTest.java
0 → 100644
View file @
9ed432e4
package
com.duanledexianxianxian.demo
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
org.junit.Test
;
/**
* Unit test for simple App.
*/
public
class
AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public
void
shouldAnswerWithTrue
()
{
assertTrue
(
true
);
}
}
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