讲师中心 微信公众号
AI工具推荐 视频效率加速

java如何在表格添加水印

老瑶小哥_2412

老瑶小哥_2412

发布时间:2025-12-03 11:50:03

|

399人浏览过

|

来源于php中文网

原创

在Java中为表格添加水印需根据文件类型选择方案:1. Excel通过Apache POI设置页眉页脚模拟水印,如居中添加“【机密】”文字;2. PDF使用iText7在每页叠加半透明斜向文字,通过PdfCanvas控制字体、旋转与透明度实现真实水印效果;建议输出正式文档时优先选PDF以获得更好视觉与安全控制。

java如何在表格添加水印

在Java中为表格添加水印,通常是指在导出的Excel或PDF表格文件上叠加文字或图像水印。Java本身不直接操作“可视化表格”,而是通过操作文档生成来实现水印效果。以下是针对常见格式(Excel和PDF)的具体实现方式。

1. 为Excel文件添加水印

使用 Apache POI 操作Excel时,由于Excel本身没有“水印”功能(不像Word),需要手动在页眉/页脚或浮动文本框中模拟水印效果。

说明与建议:

  • 在Excel中添加水印最常用的方法是通过设置页眉和页脚插入文字,打印时可见。
  • 也可以在工作表顶层插入一个半透明的文本框,但需注意导出后是否支持显示。

示例:通过页脚添加“机密”水印

立即学习“Java免费学习笔记(深入)”;

```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;

Java注释规范Skills
Java注释规范Skills

当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。

下载

public class ExcelWatermark { public static void main(String[] args) throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("数据表");

    // 添加一些数据
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("姓名");
    cell = row.createCell(1);
    cell.setCellValue("年龄");

    // 设置页脚水印
    Footer footer = sheet.getFooter();
    footer.setCenter("【机密】"); // 居中显示水印文字

    // 也可使用页眉
    Header header = sheet.getHeader();
    header.setRight("打印时间: &D &T"); // 右侧添加时间

    FileOutputStream out = new FileOutputStream("带水印的表格.xlsx");
    workbook.write(out);
    out.close();
    workbook.close();
}

}

<p>注意:这种方式不是视觉上的斜向半透明水印,而是打印时出现在页脚的文字。若要实现更真实的水印,需转为PDF后再处理。</p>

<H3>2. 为PDF表格添加水印</H3>
<p>使用 <strong>iText</strong> 或 <strong>Apache PDFBox</strong> 可以在生成的PDF表格上添加真正的图形水印(如斜向半透明文字)。</p>

<font>推荐使用 iText 实现:</font>
<ul>
  <li>支持在每页叠加自定义内容。</li>
  <li>可控制字体、颜色、透明度、旋转角度,实现美观水印。</li>
</ul>

<p><strong>示例:用iText7在PDF表格上加水印</strong></p>
```java
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.color.ColorConstants;
import com.itextpdf.kernel.geom.PageSize;

import java.io.IOException;

public class PdfTableWithWatermark {
    public static void main(String[] args) throws IOException {
        PdfWriter writer = new PdfWriter("带水印的PDF表格.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf, PageSize.A4);

        // 创建表格
        Table table = new Table(2);
        table.addCell(new Cell().add("姓名"));
        table.addCell(new Cell().add("年龄"));
        table.addCell(new Cell().add("张三"));
        table.addCell(new Cell().add("25"));
        document.add(table);

        // 添加水印到每一页
        addWatermark(pdf, "机密");

        document.close();
    }

    private static void addWatermark(PdfDocument pdfDoc, String watermarkText) throws IOException {
        int numberOfPages = pdfDoc.getNumberOfPages();
        PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H"); // 中文字体
        float fontSize = 40;

        for (int i = 1; i <= numberOfPages; i++) {
            PdfPage page = pdfDoc.getPage(i);
            PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);

            canvas.saveState();
            canvas.beginText();

            // 设置字体和大小
            canvas.setFontAndSize(font, fontSize);
            canvas.setFillColor(ColorConstants.LIGHT_GRAY);
            canvas.setAlphaStroking(0.5f);
            canvas.setAlphaNonStroking(0.5f);

            // 设置水印位置和旋转(斜向)
            float x = 297; // A4 宽度一半
            float y = 421; // 高度一半
            canvas.setTextMatrix(1, 0.5f, -0.5f, 1, x, y); // 旋转+平移
            canvas.showText(watermarkText);

            canvas.endText();
            canvas.restoreState();
        }
    }
}

3. 综合建议

  • 如果输出是Excel,只能模拟水印,适合打印用途;真实视觉水印建议转成PDF。
  • 生成PDF时使用iText可精确控制水印样式,适合正式文档场景。
  • 注意中文字体支持,避免乱码,需引入字体文件或使用支持中文的字体。
  • 水印内容可根据用户、时间、权限动态生成,增强安全性。

基本上就这些。根据你的实际输出格式选择合适的方式,水印的关键在于“叠加层”和“透明度控制”。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6839

2023.08.02

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

636

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

371

2025.11.27

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4216

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

5661

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

3556

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

3340

2023.08.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.9万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn