Java PDF 加图片水印 文字水印 设置密码

652 阅读1分钟

Java 对 pdf 添加图片水印,文字水印,设置文件密码

maven 依赖

<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itext-asian</artifactId>
   <version>5.2.0</version>
</dependency>

<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itextpdf</artifactId>
   <version>5.5.9</version>
</dependency>

<dependency>
   <groupId>org.bouncycastle</groupId>
   <artifactId>bcprov-jdk15on</artifactId>
   <version>1.47</version>
</dependency>
  1. 给 PDF 文件设置密码
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

@Test
public void pdfPwd() {
  String password = "123456";
  //pdf权限,值为"PdfWriter.ALLOW_PRINTING"
  int permission = 0;
  try {
    // 待加密码的文件
    PdfReader reader = new PdfReader("testpdf.pdf");
    // 加完密码的文件
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
        "testpdfNew.pdf"));
    // 设置密码文件打开密码文件编辑密码
    stamper.setEncryption(password.getBytes(),
        password.getBytes(), permission, false);
    //关闭流
    stamper.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
}
  1. 给PDF添加 图片水印 文字水印
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

public static void setWaterPrint(BufferedOutputStream bos, String inputPDFFilePath, String contentText)
      throws Exception {
    PdfReader reader = new PdfReader(inputPDFFilePath);
    PdfStamper stamper = new PdfStamper(reader, bos);
    int total = reader.getNumberOfPages() + 1;
    PdfContentByte content;
    BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
    PdfGState gs = new PdfGState();
    for (int i = 1; i < total; i++) {
      content = stamper.getOverContent(i);// 在内容上方加水印
//      content = stamper.getUnderContent(i);//在内容下方加水印
      gs.setFillOpacity(0.2f);
      content.beginText();

      //字体大小
      content.setFontAndSize(base, 9);
      //content.setTextMatrix(70, 200);
      //内容居中,横纵坐标,偏移量
      content.showTextAligned(Element.ALIGN_CENTER, contentText, 390, 810, 0);

      //添加图片
      Image image = Image.getInstance("androidlogo.png");

    /*
      img.setAlignment(Image.LEFT | Image.TEXTWRAP);
      img.setBorder(Image.BOX); img.setBorderWidth(10);
      img.setBorderColor(BaseColor.WHITE); img.scaleToFit(100072);//大小
      img.setRotationDegrees(-30);//旋转
     */
      //图片的位置(坐标)
      image.setAbsolutePosition(520, 786);
      // image of the absolute
      image.scaleToFit(200, 200);
      image.scalePercent(15);//依照比例缩放
      content.addImage(image);
      content.setFontAndSize(base, 8);

      content.endText();
    }
    stamper.close();
    reader.close();
  }

  public static void main(String[] args) throws Exception {
    // 要输出的pdf文件
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("testpdf_text.pdf")));
    // 将pdf文件先加水印然后输出
    setWaterPrint(bos, "testpdf.pdf", "文字水印" + TimeUtils.nowLocal());
  }

感谢原文作者 原文链接