你好,水印怎么这样显示,不应该是悬悬浮透明显示嘛?




isSemitrasparent 设置成false显示效果类似,没看出太大差异。用的aspose-words-21.5.0-jdk17.jar

@SalesDhorde 我已经测试了 21.5 版,看起来和预期的一样。您可以通过创建带有水印的文档并将 "Semitrasparent "设置为 false 来检查。然后打开 MS Word,手动设置该属性。

8e1c7e5e2ee77dee44d67ab5a80f43d.png (86.7 KB)

水印还是下沉状态,不应该是显示在文档上面吗?

@SalesDhorde 水印会插入文档标题,即文档主体内容的下方。这与在 MS Word 中插入水印的行为相同。要在内容前面插入水印,必须在正文中插入水印,但在这种情况下,必须在文档的每一页上都插入水印。但在这种情况下,由于水印是一个简单的形状,最终用户可以像处理文档中的普通形状一样处理它。您需要保护您的文档,并将其设置为只读以限制编辑。这对您来说是一个好的解决方案吗?

您好,不是很懂您说的,我这边就是想在文档里面插入水印,水印会浮现在文字的上浮,而不是下方而且被遮挡,能实现吗?能否提供示例代码

@SalesDhorde 您可以使用以下代码在文本顶部添加水印:

Document doc = new Document("input.docx");

// 确定文件中图形的最大 ZOrder 值。
int zOrder = 0;
for (Shape shape : (Iterable<Shape>) doc.getChildNodes(NodeType.SHAPE, true))
{
    zOrder = Math.max(zOrder, shape.getZOrder());
}
zOrder++;

// 创建水印形状。
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
watermark.setName("WaterMark");
// 设置水印文本。
watermark.getTextPath().setText("In Front Watermark");
watermark.getTextPath().setBold(true);
watermark.getTextPath().setSize(100);
watermark.getTextPath().setFontFamily("Arial");
watermark.setWidth(500);
watermark.setHeight(100);
watermark.getFill().setForeColor(Color.LIGHT_GRAY);
watermark.getFill().setTransparency(0.5);
watermark.setStrokeColor(Color.LIGHT_GRAY);
watermark.getStroke().setTransparency(0.5);
// 文字将从左下角指向右上角。
watermark.setRotation(45);
// 将水印置于页面中心。
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.setWrapType(WrapType.NONE);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setZOrder(zOrder);

LayoutCollector layoutCollector = new LayoutCollector(doc);
int pageToInsert = 1;
for (Paragraph para : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true))
{
    // 只处理主体部分的段落。
    if (para.getAncestor(NodeType.BODY) == null)
        continue;

    int paraPage = layoutCollector.getEndPageIndex(para);
    if (paraPage == pageToInsert)
    {
        pageToInsert++;
        para.appendChild(watermark.deepClone(true));
    }
}

doc.save("output.docx");