Java实现:图片与PDF文件添加水印代码全解析
在Java中,添加水印到图片或PDF文件需要使用特定的库。以下分别给出给图片和PDF添加水印的示例代码。 1. 给图片添加水印(使用Java的BufferedImage和Graphics2D类): ```java import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class WatermarkOnImage { public static void addWatermark(String sourceImagePath, String targetImagePath, String watermarkText) throws IOException { // 读取原图片 BufferedImage originalImage = ImageIO.read(new File(sourceImagePath)); // 创建一个新的 BufferedImage 用于保存带水印的图片 BufferedImage watermarkedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_RGB); // 获取 Graphics2D 对象 Graphics2D graphics = watermarkedImage.createGraphics(); // 设置水印文字属性 graphics.setColor(Color.RED); graphics.setFont(new Font("Arial", Font.BOLD, 40)); graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); // 计算水印位置 int x = 10; int y = 10; // 添加水印 graphics.drawString(watermarkText, x, y); // 将原图片绘制到新的 BufferedImage 上,并保留水印 graphics.drawImage(originalImage, 0, 0, null); // 保存带水印的图片 ImageIO.write(watermarkedImage, "jpg", new File(targetImagePath)); // 关闭 Graphics2D 资源 graphics.dispose(); } public static void main(String[] args) throws IOException { addWatermark("source.jpg", "target.jpg", "Watermark Text"); } } ``` 2. 给PDF添加水印(使用Apache PDFBox库): 首先,确保已将PDFBox库添加到项目依赖中。以下是如何在PDF页面上添加文本水印: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import java.io.File; import java.io.IOException; public class WatermarkOnPdf { public static void addWatermark(String sourcePdfPath, String targetPdfPath, String watermarkText) throws IOException { try (PDDocument document = PDDocument.load(new File(sourcePdfPath))) { for (PDPage page : document.getPages()) { PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true); // 设置字体和大小 PDFont font = PDType1Font.HELVETICA_BOLD; float fontSize = 40; // 计算水印的位置 float stringWidth = font.getStringWidth(watermarkText) * fontSize / 1000f; float yPos = page.getMediaBox().getHeight() - fontSize - 10; float xPos = (page.getMediaBox().getWidth() - stringWidth) / 2; // 设置透明度 contentStream.setNonStrokingColor(Color.LIGHT_GRAY); contentStream.setAlpha(0.5f); // 添加水印 contentStream.beginText(); contentStream.setFont(font, fontSize); contentStream.newLineAtOffset(xPos, yPos); contentStream.showText(watermarkText); contentStream.endText(); // 关闭内容流 contentStream.close(); } // 保存带有水印的PDF document.save(targetPdfPath); } } public static void main(String[] args) throws IOException { addWatermark("source.pdf", "target.pdf", "Watermark Text"); } } ``` 请根据实际需求调整上述代码中的字体、大小、颜色、透明度以及水印位置等参数。 ######[AI写代码神器 | 884点数解答 | 2024-02-22 16:00:43]
- 批处理文件:依据参数表.xlsx精准修改文件.txt中p、t、s值(GPT | 811点数解答 | 2024-12-05 12:58:37)402
- 用批处理和Python实现“参数表.xlsx”与“文件.txt”数据匹配及修改(讯飞星火 | 531点数解答 | 2024-12-05 13:20:42)382
- 批处理文件:依据参数表.xlsx精准修改文件.txt特定参数值(阿里通义 | 495点数解答 | 2024-12-05 13:22:26)359
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)422
- PDF.js 动态导入模块失败:原因剖析与解决方案全揭秘(字节豆包 | 573点数解答 | 2025-07-30 16:04:03)140
- 2025版PHP项目资料管理系统需求文档:全方位打造高效协作与安全存储平台 (字节豆包 | 1332点数解答 | 2025-07-18 10:36:24)162
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)324
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1201
- jQuery 实现动态操作 DOM:打造可增删任务的待办事项列表应用(百度文心 | 1015点数解答 | 2024-10-26 23:41:22)444
- jQuery 打造实用待办事项列表:输入添加、点击删除一步到位!(阿里通义 | 1139点数解答 | 2024-10-29 08:44:48)360
- jQuery 实现动态操作 DOM:打造带添加与删除功能的待办事项列表应用(阿里通义 | 687点数解答 | 2024-10-29 09:25:06)375
- jQuery 实战:打造可添加与删除任务的待办事项列表应用(字节豆包 | 499点数解答 | 2024-10-29 20:40:48)284