java水印如何换行
在Java中实现水印换行的方法
使用Graphics2D绘制多行文本
通过设置字体和计算每行位置,使用drawString逐行绘制水印文本:

Graphics2D g2d = (Graphics2D) image.getGraphics();
g2d.setFont(new Font("Arial", Font.BOLD, 30));
g2d.setColor(new Color(255, 255, 255, 128));
String[] lines = {"第一行水印", "第二行水印"};
int yOffset = 50;
for (String line : lines) {
g2d.drawString(line, 50, yOffset);
yOffset += g2d.getFontMetrics().getHeight();
}
使用TextLayout处理自动换行
当需要根据宽度自动换行时,可用TextLayout:

Font font = new Font("Serif", Font.PLAIN, 24);
FontRenderContext frc = g2d.getFontRenderContext();
String text = "这是一个会自动换行的长水印文本";
AttributedString attributedText = new AttributedString(text);
attributedText.addAttribute(TextAttribute.FONT, font);
float maxWidth = 200; // 最大行宽
float y = 50;
for (String line : text.split("\n")) {
TextLayout layout = new TextLayout(line, font, frc);
if (layout.getAdvance() > maxWidth) {
// 处理自动换行逻辑
}
layout.draw(g2d, 50, y);
y += layout.getAscent() + layout.getDescent() + layout.getLeading();
}
使用Apache PDFBox处理PDF水印换行 对于PDF文件的水印换行:
PDDocument document = PDDocument.load(new File("input.pdf"));
PDPage page = document.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(
document, page, PDPageContentStream.AppendMode.APPEND, true);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 700);
contentStream.showText("第一行水印");
contentStream.newLineAtOffset(0, -15); // 下移15单位
contentStream.showText("第二行水印");
contentStream.endText();
contentStream.close();
注意事项
- 透明效果通过
new Color(r,g,b,alpha)设置,alpha值范围0-255 - 计算文本高度时应包含
getAscent() + getDescent() + getLeading() - 对于图像处理,完成绘制后需调用
g2d.dispose()释放资源






