想问下aspose.words for java 在给word加文字水印的时候,可以把水印加到页面最上层吗 ?现在给的样例代码都是将文字水印加到底层,如果word中有图片,图片就把文字水印给挡住。具体可以怎么操作呢
出现问题是因为水印形状位于页眉页脚内部,主要内容是在体内故事中(请参阅Story类)。 如果使用Microsoft Word 2019插入水印,您将观察到相同的行为。 文档页眉/页脚的所有内容始终位于文档的主要内容之后。
但是,您可以通过在每个页面中手动插入水印来解决此问题。 您可以通过将光标移动到文档每页中的第一个Run,然后将这些Runs作为水印的锚点来实现。 请参阅以下代码,例如:
Document doc = new Document("e:\\temp\\TEST.doc");
Node[] runs = doc.getChildNodes(NodeType.RUN, true).toArray();
for (int i = 0; i < runs.length; i++)
{
Run run = (Run)runs[i];
int length = run.getText().length();
Run currentNode = run;
for (int x = 1; x < length; x++)
{
currentNode = SplitRun(currentNode, 1);
}
}
DocumentBuilder builder = new DocumentBuilder(doc);
PageSetup ps = builder.getPageSetup();
NodeCollection smallRuns = doc.getChildNodes(NodeType.RUN, true);
LayoutCollector collector = new LayoutCollector(doc);
int pageIndex = 1;
for (int i=0; i< smallRuns.getCount() ; i++) {
Run run = (Run) smallRuns.get(i);
if (collector.getStartPageIndex(run) == pageIndex) {
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.setWidth(300);
watermark.setHeight(70);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setRotation(-40);
watermark.getFill().setColor(Color.GRAY);
watermark.setStrokeColor(Color.GRAY);
watermark.getTextPath().setText("watermarkText");
watermark.getTextPath().setFontFamily("Arial");
watermark.setName("WaterMark_" + i + "");
watermark.setWrapType(WrapType.NONE);
builder.moveTo(run);
builder.insertNode(watermark);
pageIndex++;
}
}
doc.save("e:\\Temp\\awjava-19.5.docx");
private static Run SplitRun(Run run, int position) throws Exception {
Run afterRun = (Run) run.deepClone(true);
afterRun.setText(run.getText().substring(position));
run.setText(run.getText().substring(0, position));
run.getParentNode().insertAfter(afterRun, run);
return afterRun;
}