itextpdf使用:使用PdfReader添加图片水印
gitee参考代码地址:https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/itextpdf
参考文章:https://www.cnblogs.com/wuxu/p/17371780.html
1、生成带有文字的图片
使用java.awt包的相关类生成带文字的图片,代码如下:
/**
* 生成带文字的图片
* @return
*/
public static String createImage() {
int imageWidth = 80;
int imageHeight = 30;
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Color c = new Color(255, 255, 255);
g2.setColor(c);// 设置背景色
g2.fillRect(0, 0, imageWidth, imageHeight);
String code = "000153";
// 设置文字字体
Font font = new Font(null, Font.PLAIN, 10);
g2.setFont(font);
g2.setColor(new Color(0, 0, 0));
// 文字起始位置
g2.drawString(code, 5, 15);
g2.dispose();
String imagePath = "D:\\usr\\local\\zeus\\resource\\temp/aaa.jpg";
OutputStream baos = null;
try {
baos = new FileOutputStream(new File(imagePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ImageIO.write(image, "jpg", baos);
} catch (IOException e) {
e.printStackTrace();
}
// 关闭输出流
IOUtils.closeQuietly(baos);
return imagePath;
}
2、使用itextpdf的PdfReader插入图片水印
@Test
public void addImage() {
String pdfPath = "/Users/outenmon/Public/工作资料/公告/aaaa.pdf";
PdfReader reader = null;
try {
reader = new PdfReader(pdfPath, "PDF".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
String outPdfFile = "/Users/outenmon/Public/工作资料/公告/bbbb.pdf";
PdfStamper stamp = null;
try {
stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
PdfContentByte under;
// PdfGState gs1 = new PdfGState();
// gs1.setFillOpacity(0.3f);// 透明度设置
String imagePath = ImageUtil.createImage();
Image img = null;// 插入图片水印
try {
img = Image.getInstance(imagePath);
} catch (BadElementException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Rectangle pageSize1 = reader.getPageSize(1);
float height = pageSize1.getHeight();
img.setAbsolutePosition(10, height - 50); // 坐标
// img.setRotation(-20);// 旋转 弧度
// img.setRotationDegrees(45);// 旋转 角度
// img.scaleAbsolute(80, 30);// 自定义大小
// img.scalePercent(50);//依照比例缩放
// int pageSize = reader.getNumberOfPages();// 原pdf文件的总页数
/*for (int i = 1; i <= pageSize; i++) {
under = stamp.getUnderContent(i);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
under.setGState(gs1);// 图片水印 透明度
try {
under.addImage(img);// 图片水印
} catch (DocumentException e) {
e.printStackTrace();
}
}*/
under = stamp.getUnderContent(1);// 水印在之前文本下
// under = stamp.getOverContent(i);//水印在之前文本上
// under.setGState(gs1);// 图片水印 透明度
try {
under.addImage(img);// 图片水印
} catch (DocumentException e) {
e.printStackTrace();
}
try {
stamp.close();// 关闭
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}