D:\javaWork\WorkTX\daoyuan\trunk\src\com\landray\kmss\kms\iso\cs\wordimg\work.java:34:13 java: 找不到符号 符号: 方法 setRotate(int) 位置: 类型为org.apache.poi.xwpf.usermodel.XWPFRun的变量 run
时间: 2023-07-03 19:29:52 浏览: 233
很抱歉,我之前提供的代码有误。在Apache POI 4.1.2版本中,XWPFRun类中并没有setRotate()方法。可以使用Java的AffineTransform类来实现文本的旋转。以下是修改后的代码:
```java
import java.awt.geom.AffineTransform;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
public class WatermarkGenerator {
public static void main(String[] args) throws IOException {
// 创建 Word 文档
XWPFDocument doc = new XWPFDocument();
// 添加段落
XWPFParagraph para = doc.createParagraph();
XWPFRun run = para.createRun();
// 设置文本
run.setText("This is a test document.");
// 添加水印
String watermarkText = "CONFIDENTIAL"; // 水印文本
int fontSize = 72; // 字体大小
int angle = 45; // 倾斜角度
// 计算文本宽度和高度
int width = watermarkText.length() * (fontSize / 2);
int height = fontSize * 2;
// 获取段落样式
para.getCTP().addNewPPr().addNewPStyle().setVal("Header");
// 添加水印
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
run = para.createRun();
run.setText(watermarkText);
run.setFontSize(fontSize);
run.setColor("C0C0C0"); // 字体颜色
run.setBold(true); // 加粗
run.setItalic(true); // 斜体
run.setUnderline(1); // 下划线
run.setTextPosition(i * width, j * height); // 设置位置
// 设置旋转角度
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(angle), 0, 0);
run.getCTR().getTArray(0).addNewRPr().addNewNoProof();
run.getCTR().getTArray(0).getRPr().addNewRFonts().setAscii("Wingdings");
run.getCTR().getTArray(0).getRPr().addNewVertAlign().setVal(org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalAlignRun.BASELINE);
run.getCTR().getTArray(0).getRPr().addNewRPrChange().addNewSz().setVal(BigInteger.valueOf(fontSize));
run.getCTR().getTArray(0).getRPr().addNewRPrChange().addNewSzCs().setVal(BigInteger.valueOf(fontSize)));
String xml = "<w:r xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">" +
" <w:rPr>" +
" <w:noProof />" +
" <w:rFonts w:ascii=\"Wingdings\" />" +
" <w:vertAlign w:val=\"baseline\" />" +
" <w:sz w:val=\"" + fontSize + "\" />" +
" <w:szCs w:val=\"" + fontSize + "\" />" +
" </w:rPr>" +
" <w:t>" + watermarkText + "</w:t>" +
"</w:r>";
run.getCTR().set(run.getCTR().newCursor().newXMLStreamReader(new ByteArrayInputStream(xml.getBytes())));
run.getCTR().getTArray(0).setSpace("preserve");
run.setFontFamily("Wingdings"); // 使用 Wingdings 字体
}
}
// 保存 Word 文档
OutputStream out = new FileOutputStream("test.docx");
doc.write(out);
out.close();
doc.close();
}
}
```
上面的代码会生成一个名为 `test.docx` 的 Word 文档,并在每个页面上添加一个水印。可以通过修改 `watermarkText`、`fontSize` 和 `angle` 等参数来自定义水印文本和样式。
阅读全文