Aspose.word for java 如何在每页指定的任意坐标添加一段文字

aspose.word for java 如何在每页指定的任意坐标添加一段文字

@craspose 您可以插入水印,然后根据需要更改其位置。 请看下面的代码:

Document doc = new Document();
TextWatermarkOptions opt = new TextWatermarkOptions();
opt.setColor(Color.red);
opt.setLayout(WatermarkLayout.HORIZONTAL);
doc.getWatermark().setText("I am a cool watermark", opt);

// Get watermark shapes and move them at the desired position.
for (Shape s : (Iterable<Shape>)doc.getChildNodes(NodeType.SHAPE, true))
{
    if (s.getName().startsWith("PowerPlusWaterMarkObject") || s.getName().startsWith("WordPictureWatermark"))
    {
        s.setWrapType(WrapType.NONE);
        s.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
        s.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
        s.setVerticalAlignment(VerticalAlignment.DEFAULT);
        s.setHorizontalAlignment(HorizontalAlignment.DEFAULT);
        s.setLeft(10);
        s.setTop(10);
    }
}

doc.save("C:\\Temp\\out.docx");

感谢老师回复,我这边进行尝试一下

1 Like

老师您好,使用了您提供的代码进行调试后,发现汉字和数字不对齐,请问有调整方式吗

@craspose 您能否在此附上您当前和预期的输出文件以供我们参考? 我们将检查该问题并为您提供更多信息。

您好,这是调试代码

Document doc = new Document();
TextWatermarkOptions opt = new TextWatermarkOptions();
opt.setColor(Color.red);
opt.setFontSize(30);
opt.setLayout(WatermarkLayout.HORIZONTAL);
doc.getWatermark().setText("你好-2024-01-10", opt);

// Get watermark shapes and move them at the desired position.
for (Shape s : (Iterable<Shape>)doc.getChildNodes(NodeType.SHAPE, true))
{
    if (s.getName().startsWith("PowerPlusWaterMarkObject") || s.getName().startsWith("WordPictureWatermark"))
    {
        s.setWrapType(WrapType.NONE);
        s.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
        s.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
        s.setVerticalAlignment(VerticalAlignment.DEFAULT);
        s.setHorizontalAlignment(HorizontalAlignment.DEFAULT);
        s.setLeft(400);
        s.setTop(10);
    }
}

doc.save("C:\\Temp\\out.docx");

@craspose 您能否在此附上您当前和预期的输出文件以供我们参考? 我们将检查该问题并为您提供更多信息。

123.docx (10.2 KB)

微信图片_20240110162548.jpg (62.9 KB)

预期的结果.jpg (39.6 KB)

@craspose 您能否在 MS Word 中创建预期的输出并将其以 DOCX 格式附加到此处。 屏幕截图未提供所需信息。

123.docx (10.9 KB)

您好,这是预期的输出文档

预期的输出文档.docx (14.1 KB)

您好,以本次上传的文档为准

@craspose 不幸的是,我在所提供的代码生成的 DOCX 中没有看到问题:

感谢老师,我再进行调试一下

1 Like

老师您好,原因找到了,“你好-2024-01-10” 默认生成的字体为Calibri,我把它改成宋体就行了,请问能基于您提供的代码上设置一下字体吗

@craspose 您成功找到问题的原因真是太好了。 您可以使用以下代码来设置水印文本的字体:

Document doc = new Document();
TextWatermarkOptions opt = new TextWatermarkOptions();
opt.setColor(Color.red);
opt.setFontSize(30);
opt.setFontFamily("SimSun");
opt.setLayout(WatermarkLayout.HORIZONTAL);
doc.getWatermark().setText("你好-2024-01-10", opt);

感谢老师,调试后已经能够符合预期结果

1 Like

您好,当我使用设置页眉上边距为2.40cm,运行上述代码时,word文档的页数会由之前的两页变成三页,请问如何调整
source document.docx (10.4 KB)

Actual results.docx (18.4 KB)

Expected results.docx (17.7 KB)

@craspose 您能否提供可以让我们重现该问题的代码? 我无法使用上面提供的代码重现它。 这是我这边产生的输出:
out.docx (13.0 KB)

您好,这是源代码

test.docx (21 KB)

@craspose 在代码中,您在文档标题中再添加一个段落,这会将内容向下推送,内容会溢出到下一页。 您可以通过将段落大小设置为零来取消此设置:

Paragraph watermarkPara = new Paragraph(mdoc);
watermarkPara.getParagraphBreakFont().setSize(0);

out.docx (13.6 KB)