java 使用 aspose 添加水印
首先编写添加水印方法
/**
* 加文字水印方法
*
* @param doc word文件流
* @param watermarkText 水印内容
*/
public static void insertWatermarkText(Document doc, String watermarkText) {
// 居中
insertWatermarkText( doc, watermarkText, new Function<Shape, Object>() {
@Override
public Object apply(Shape watermark) {
// Place the watermark in the page center.
watermark.setRelativeHorizontalPosition( RelativeHorizontalPosition.PAGE );
watermark.setRelativeVerticalPosition( RelativeVerticalPosition.PAGE );
watermark.setWrapType( WrapType.NONE );
watermark.setVerticalAlignment( VerticalAlignment.CENTER );
watermark.setHorizontalAlignment( HorizontalAlignment.CENTER );
return null;
}
} );
// 顶部
insertWatermarkText( doc, watermarkText, new Function<Shape, Object>() {
@Override
public Object apply(Shape watermark) {
watermark.setRelativeHorizontalPosition( RelativeHorizontalPosition.MARGIN );
watermark.setRelativeVerticalPosition( RelativeVerticalPosition.MARGIN );
watermark.setWrapType( WrapType.NONE );
// 我们需要自定义距离顶部的高度
watermark.setVerticalAlignment( VerticalAlignment.TOP );
watermark.setHorizontalAlignment( HorizontalAlignment.CENTER );
// watermark.setTop(120);
return null;
}
} );
//尾部
insertWatermarkText( doc, watermarkText, new Function<Shape, Object>() {
@Override
public Object apply(Shape watermark) {
watermark.setRelativeHorizontalPosition( RelativeHorizontalPosition.MARGIN );
watermark.setRelativeVerticalPosition( RelativeVerticalPosition.MARGIN );
watermark.setWrapType( WrapType.NONE );
// 我们需要自定义距离顶部的高度
watermark.setVerticalAlignment( VerticalAlignment.BOTTOM );
watermark.setHorizontalAlignment( HorizontalAlignment.CENTER );
// 设置距离顶部的高度
// watermark.setTop(480);
return null;
}
} );
}
方法2
//插入文本水印
private static void insertWatermarkText(Document doc, String watermarkText, Function<Shape, Object> watermaskPositionConfigFunc) {
Shape watermark = new Shape( doc, ShapeType.TEXT_PLAIN_TEXT );
watermark.getTextPath().setText( watermarkText );
// 这里设置为宋体可以保证在转换为PDF时中文不是乱码.
watermark.getTextPath().setFontFamily( "WeiRuanYaHei" );
//WeiRuanYaHei 宋体
try {
// 水印大小
watermark.setWidth( 150 );
watermark.setHeight( 30 );
} catch (Exception e) {
throw new RuntimeException( e );
}
// 左下到右上
watermark.setRotation( -20 );
//字体RGB颜色
final String colorStr = "EE8262";
watermark.getFill().setColor( new java.awt.Color( Integer.parseInt( colorStr, 16 ) ) );
watermark.setStrokeColor( new java.awt.Color( Integer.parseInt( colorStr, 16 ) ) );
watermaskPositionConfigFunc.apply( watermark );
Paragraph watermarkPara = new Paragraph( doc );
watermarkPara.appendChild( watermark );
for (Section sect : doc.getSections()) {
insertWatermarkIntoHeader( watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY );
}
}
方法3:
private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) {
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType( headerType );
if (header == null) {
header = new HeaderFooter( sect.getDocument(), headerType );
sect.getHeadersFooters().add( header );
}
try {
header.appendChild( watermarkPara.deepClone( true ) );
} catch (Exception e) {
throw new RuntimeException( e );
}
}
测试插入:
1、生成word插入水印
/**
* 插入文本 和水印
*
* @throws Exception
*/
@Test
public void testSaveWord() throws Exception {
// Create a Document object
Document doc = new Document();
// Create a DocumentBuilder object
DocumentBuilder builder = new DocumentBuilder( doc );
java.util.List<String> list = new ArrayList<>();
list.add( "How to Create a Rich Word Document5?" );
list.add( "How to Create a Rich Word Document25?" );
list.add( "How to Create a Rich Word Document35?" );
list.add( "How to Create a Rich Word Document45?" );
// Specify font formatting
Font font = builder.getFont();
font.setSize( 18 );
font.setBold( true );
font.setColor( Color.BLACK );
font.setName( "Arial" );
builder.write( "How to Create a Rich Word Document?" );
builder.insertBreak( BreakType.LINE_BREAK );
// Start the paragraph
font.setSize( 12 );
font.setBold( false );
ParagraphFormat paragraphFormat = builder.getParagraphFormat();
paragraphFormat.setFirstLineIndent( 12 );
paragraphFormat.setKeepTogether( true );
builder.write( "This article shows how to create a Word document containing text, images and lists." );
builder.insertBreak( BreakType.LINE_BREAK );
for (String str : list) {
font.setSize( 18 );
font.setBold( true );
font.setColor( Color.BLACK );
font.setName( "Arial" );
builder.writeln( str );
builder.insertBreak( BreakType.LINE_BREAK );
}
insertWatermarkText( doc, "我的水印" );
// Save the document
doc.save( "D:\\temp\\Rich Word Document.docx" );
}
2、给已有的word添加水印
@Test
public void testWater() {
//这个加水印文字方法可用
try {
Document document = new Document( "D:\\zyw\\web\\temp\\1537734281026211840.doc" );
insertWatermarkText( document, "我的水印" );
//文件输出路径
document.save( "D:\\zyw\\web\\temp\\1537734281026211840-11.doc" );
} catch (Exception e) {
e.printStackTrace();
}
}