java aspose 给Word添加水印

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();
        }

    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值