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>
- 给 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();
}
}
- 给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());
}
感谢原文作者 原文链接