Java给PDF文件添加水印

Maven

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version> <!-- 请检查并使用最新版本 -->
</dependency>

 Main方法 只添加一个水印

public static void main(String[] args) {
        try {
            // 加载PDF文档
            PDDocument document = PDDocument.load(new File("C:\\Users\\JIANDIQ\\Desktop\\file\\template\\合同台账\\合同台账文件备份zxht-a366-2013-035-c.pdf"));


            // 加载字体 可自行下载不然中文会报错
            PDFont font = PDType0Font.load(document, new File("/opt/quotations/Alibaba_PuHuiTi_2.0_45_Light_45_Light.ttf"));
            
            // 水印文字
            String watermarkText = "JIANGDIQING";
            // 水印大小
            float fontSize = 16;
            PDExtendedGraphicsState r0 = new PDExtendedGraphicsState();
            // 水印透明度
            r0.setNonStrokingAlphaConstant(0.1f);
            r0.setAlphaSourceFlag(true);

            // 遍历每一页
            for (PDPage page : document.getPages()) {
                // 这里一定要有两个true 不然有事不会覆盖成功 导致水印打失败
                PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);

                // 设置字体和颜色
                // 默认的 中文会报错
                contentStream.setFont(PDType1Font.HELVETICA_BOLD, fontSize);
                // 自定义的字体
                contentStream.setFont(font, fontSize);
                
                // 黑色
                contentStream.setNonStrokingColor(0, 0, 0);

                // 水印透明度
                contentStream.setGraphicsStateParameters(r0);
                contentStream.beginText();

                for (int i = 0; i <= 10; i++) {

                    // 获取旋转实例
                    contentStream.setTextMatrix(Matrix.getRotateInstance(-150, i * 70, 0));
                    contentStream.showText(watermarkText);

                    for (int j = 0; j < 20; j++) {
                        contentStream.setTextMatrix(Matrix.getRotateInstance(-150, i * 70, j * watermarkText.length() * fontSize / 2 ));
                        contentStream.showText(watermarkText);
                    }

                }


                contentStream.endText();
                contentStream.restoreGraphicsState();
                contentStream.close();
            }

            // 保存带有水印的PDF
            document.save("C:\\Users\\JIANDIQ\\Desktop\\file\\template\\合同台账\\水印.pdf");
            document.close();

            System.out.println("Watermark added successfully!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Jacob 是一个 Java 与 Microsoft Office 交互的开源项目。它可以实现 Java 与 Office 应用程序(如 Word、Excel、PowerPoint)之间的互操作,包括打开、读取、编辑和保存文档。如果您需要对 PDF 文件添加水印,可以使用 iText 库。下面是一个简单的示例代码: ```java import java.io.File; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfWriter; public class AddWatermark { public static void main(String[] args) { try { // 创建文档对象 Document document = new Document(PageSize.A4, 50, 50, 50, 50); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(new File("test.pdf"))); document.open(); // 添加水印 PdfContentByte content = writer.getDirectContent(); Font font = new Font(Font.FontFamily.HELVETICA, 40); Paragraph watermark = new Paragraph("Confidential", font); watermark.setAlignment(Element.ALIGN_CENTER); content.beginText(); float width = PageSize.A4.getWidth(); float height = PageSize.A4.getHeight(); content.showTextAligned(Element.ALIGN_CENTER, watermark, width / 2, height / 2, 45); content.endText(); // 关闭文档 document.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码使用 iText 库创建了一个名为 "test.pdf" 的 PDF 文件,并在其中添加了一个名为 "Confidential" 的水印。如果您需要更改水印的样式或位置,请修改上述代码中的相应参数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值