Java利用PDFBox库实现PDF文件循环铺展水印代码示例
在Java中,我们可以使用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 AddWatermarkToPdf { public static void main(String[] args) { try (PDDocument document = PDDocument.load(new File("input.pdf"))) { PDFont font = PDType1Font.HELVETICA_BOLD; float fontSize = 40; String watermarkText = "Confidential"; for (PDPage page : document.getPages()) { PDRectangle rect = page.getCropBox(); PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.OVERWRITE, false); // Set the transparency of the water mark contentStream.setNonStrokingColor(0.5f, 0.5f, 0.5f, 0.2f); // grey and translucent // Rotate the text if you need to contentStream.beginText(); contentStream.setFont(font, fontSize); contentStream.setTextMatrix(rect.getWidth() / 2, rect.getHeight() / 2); contentStream.showTextAligned(PDPageContentStream.TextAlignment.CENTER, watermarkText, rect.getWidth() / 2, rect.getHeight() / 2, 45); // angle is optional // End the text writing contentStream.endText(); // Make sure to close the content stream contentStream.close(); } // Save the changes document.save("output.pdf"); document.close(); } catch (IOException e) { System.err.println("Error occurred while adding watermark: " + e.getMessage()); } } } ``` 在这个代码中,我们首先加载一个PDF文档,然后遍历所有的页面。对于每个页面,我们创建一个新的`PDPageContentStream`,设置水印的字体、大小和颜色,并将其居中显示在页面上。我们将修改后的文档保存为新的PDF文件。 注意:这个示例中的水印是静态的且只在页面中心显示一次。如果你需要在整个页面上循环铺满水印,你可能需要修改上述代码以实现更复杂的布局逻辑,例如在一个网格系统中循环放置水印。 ######[AI写代码神器 | 573点数解答 | 2024-02-22 18:06:55]
- 批处理文件:依据参数表.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
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)49
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)324
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1201
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)488
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)373
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)363
- 优化高中英语核心词汇短语HTML页面,这些建议不容错过!(DeepSeek | 217点数解答 | 2025-07-01 23:41:02)200