aspose给word添加水印

第一步:引入依赖

 <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>16.6.0</version>
        </dependency>

第二步:添加水印

1、添加一个文字水印到内容中

/**
     * 为word文档添加 一个 文字 水印
     * @param doc word文档模型
     * @param watermarkText 需要添加的水印字段
     * @throws Exception
     */
    public static void insertWatermarkText(Document doc, String watermarkText) throws Exception {
        Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
        //1水印内容
        watermark.getTextPath().setText(watermarkText);
        //2水印字体
        watermark.getTextPath().setFontFamily("宋体");
        //3水印宽度
        watermark.setWidth(100);
        //4水印高度
        watermark.setHeight(20);
        //5旋转水印
        watermark.setRotation(-40);
        //6水印颜色 浅灰色
        watermark.getFill().setColor( Color.lightGray);
        watermark.setStrokeColor(Color.lightGray);
        //7将水印放置在页面中心
        //7.1 设置相对水平位置
        watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
        //7.2 设置相对垂直位置
        watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
        //7.3 设置包装类型
        watermark.setWrapType(WrapType.NONE);
        //7.4 设置垂直对齐
        watermark.setVerticalAlignment(VerticalAlignment.CENTER);
        //7.5 设置文本水平对齐方式
        watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);


        // 创建一个新段落并在该段中添加水印。
        Paragraph watermarkPara = new Paragraph(doc);
        watermarkPara.appendChild(watermark);

        // 在每个部分中,最多可以有三个不同的标题,因为我们想要出现在所有页面上的水印,插入到所有标题中。
        for (Section sect : doc.getSections())
        {
            // 每个区段可能有多达三个不同的标题,因为我们希望所有页面上都有水印,将所有的头插入。
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
        }
        System.out.println("Watermark Set");
    }
 
 /**
     *  插入水印
     * @param watermarkPara
     * @param sect
     * @param headerType
     * @throws Exception
     */
    private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) throws Exception {
        HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType( headerType );
        if (header == null) {
            header = new HeaderFooter( sect.getDocument(), headerType );
            sect.getHeadersFooters().add( header );
        }
        // 在头部插入一个水印的克隆
        header.appendChild( watermarkPara.deepClone( true ) );


    }

2、插入多个水印到文档中

/**
     * 插入多个文字水印
     * @param mdoc
     * @param wmText
     * @throws Exception
     */
    public static void WaterMarkMore(Document mdoc, String wmText)throws Exception{
        Paragraph watermarkPara = new Paragraph(mdoc);
        for (int j = 0; j < 500; j = j + 100)
        {
            for (int i = 0; i < 700; i = i + 85)
            {
                Shape waterShape = ShapeMore(mdoc, wmText, j, i);
                watermarkPara.appendChild(waterShape);
            }
        }
        for (Section sect : mdoc.getSections())
        {
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
            insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
        }
    }

    /**
     * 设置水印属性
     * @param doc
     * @param wmText
     * @param left
     * @param top
     * @return
     * @throws Exception
     */
    public static Shape ShapeMore(Document doc, String wmText, double left, double top)throws Exception{
        Shape waterShape = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
        //水印内容
        waterShape.getTextPath().setText(wmText);
        //水印字体
        waterShape.getTextPath().setFontFamily("宋体");
        //水印宽度
        waterShape.setWidth(40);
        //水印高度
        waterShape.setHeight(13);
        //旋转水印
        waterShape.setRotation(-40);
        //水印颜色 浅灰色
        /*waterShape.getFill().setColor(Color.lightGray);
        waterShape.setStrokeColor(Color.lightGray);*/
        waterShape.setStrokeColor(new Color(210,210,210));
        //将水印放置在页面中心
        waterShape.setLeft(left);
        waterShape.setTop(top);
        //设置包装类型
        waterShape.setWrapType(WrapType.NONE);
        return waterShape;
    }

3、页眉页脚 插入文字

//页眉页脚 插入文字
    private static void insertFooterAndHeader(Document document,String watermarkText) throws Exception{
        // 文档构建工具类,可对当前加入的模板进行编辑、新增等部分功能。
        DocumentBuilder builder = new DocumentBuilder(document);
        //   1、开始插入页眉
        //   将光标移动到页眉位置
        builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
        //   添加页眉线
        Border borderHeader = builder.getParagraphFormat().getBorders().getBottom();
        borderHeader.setShadow(true);
        borderHeader.setDistanceFromText(2);
        borderHeader.setLineStyle(LineStyle.SINGLE);
        //   设置页脚边距
        builder.getPageSetup().setHeaderDistance(35.9);
        builder.getPageSetup().setFooterDistance(36);
        //设置页眉的内容和字体
        Paragraph header = builder.insertParagraph();
        Run runHeader = new Run(document,watermarkText);
        runHeader.getFont().setSize(7.5);
        runHeader.getFont().setName("宋体");
        header.appendChild(runHeader);

        //   2、开始插入页脚
        //   将光标移动到页脚位置
        builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
        //   添加页脚线
        Border borderFooter = builder.getParagraphFormat().getBorders().getTop();
        borderFooter.setShadow( true );
        borderFooter.setDistanceFromText(2);
        borderFooter.setLineStyle(LineStyle.SINGLE);
        // 设置页脚边距
        builder.getPageSetup().setHeaderDistance(35.9);
        builder.getPageSetup().setFooterDistance(36);
        //设置页教的内容和字体
        Paragraph paragraph = builder.insertParagraph();
        Run run = new Run(document,watermarkText);
        run.getFont().setSize(7.5);
        run.getFont().setName("宋体");
        paragraph.appendChild(run);
    }

4、页眉和页脚 插入图片

//页眉和页脚 插入图片
    private static void insertImageToHeader(Document document,String picUrl) throws Exception{
        // 文档构建工具类,可对当前加入的模板进行编辑、新增等部分功能。
        DocumentBuilder builder = new DocumentBuilder(document);
        //   1、开始插入页眉
        //   将光标移动到页眉位置
        builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
        //   添加页眉线
        Border borderHeader = builder.getParagraphFormat().getBorders().getBottom();
        borderHeader.setShadow(true);
        borderHeader.setDistanceFromText(22);
        borderHeader.setLineStyle(LineStyle.SINGLE);
        // 设置页脚边距
        builder.getPageSetup().setHeaderDistance(35.9);
        builder.getPageSetup().setFooterDistance(36);
        //设置页眉的图片
        builder.insertImage(picUrl, RelativeHorizontalPosition.MARGIN, 0, RelativeVerticalPosition.TOP_MARGIN, 44, 97, 27, WrapType.THROUGH);
        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);

        //   2、开始插入页脚
        //   将光标移动到页脚位置
        builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
        //   添加页脚线
        Border borderFooter = builder.getParagraphFormat().getBorders().getTop();
        borderFooter.setShadow( true );
        borderFooter.setDistanceFromText(2);
        borderFooter.setLineStyle(LineStyle.SINGLE);
        // 设置页脚边距
        builder.getPageSetup().setHeaderDistance(35.9);
        builder.getPageSetup().setFooterDistance(36);
        //设置页脚的图片
        builder.insertImage(picUrl, RelativeHorizontalPosition.MARGIN, 0, RelativeVerticalPosition.TOP_MARGIN, 44, 97, 27, WrapType.THROUGH);
        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);

    }

第三步: 测试

   public static void main(String[] args) {
        try {
            Document document = new Document("F:\\result\\期中检测3.doc");
            insertWatermarkText(document,"我的水印");
            //insertFooterAndHeader(document,"我的水印");
            insertImageToHeader(document,"F:\\result\\favicon.ico");
            //文件输出路径
            document.save("F:\\result\\期中检测4.doc");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

第四步:效果

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值