文件下载:从服务器上下载,自动给下载的PDF添加水印(二)
给下载的文件添加水印代码,接上一篇《文件下载:从服务器上下载,自动给下载的PDF添加水印(二)》
给指定的PDF添加水印(二)
注意:
1、该方法需要传入服务器资源文件(即需要下载的文件路径)
2、添加水印后生成的文件路径(需要该文件存在,所以调用该方法的时候在服务器资源文件已经读取完,生成一个新名字文件的时候,用这个新名字文件的路径,新名字文件也就是下载之后,本地看到的文件),还需改进。。。
/**
* 添加水印
*
* @param inputFile 服务器资源PDF文件地址
* @param outputFile 添加水印后生成PDF存放的地址
* @param waterMarkName 水印
* @return
*/
public static boolean waterMark(String inputFile,String outputFile, String waterMarkName) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfReader.unethicalreading = true;
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
outputFile));
//字体设置,支持中文
BaseFont base = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
int total = reader.getNumberOfPages() + 1;//获取PDF页数
PdfContentByte under;//水印文字相关
Rectangle pageRect = null;//定义矩形区域
PdfGState gs = new PdfGState();//设置透明度
/** 添加一个水印 */
for (int i = 1; i < total; i++) {
pageRect = stamper.getReader().getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth()/10+200;
float y = pageRect.getHeight()/10+100;
// 获得PDF最顶层
// under = stamper.getOverContent(i);//在内容上方加水印
under = stamper.getUnderContent(i);//在内容下方加水印
under.saveState();
// 设置透明度为0.2
gs.setFillOpacity(0.1f);//透明度
under.setGState(gs);
under.restoreState();
under.beginText();
under.setFontAndSize(base, 60);//水印文字大小
under.setColorFill(BaseColor.ORANGE);//颜色
// 水印文字成45度角倾斜
under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x,y, 55);
// 添加水印文字
under.endText();
under.setLineWidth(1f);
under.stroke();
}
// /** 添加多个水印 */
// JLabel label = new JLabel();
// label.setText(waterMarkName);
// FontMetrics metrics;
// int interval = -5;
// int textH = 0;
// int textW = 0;
// label.setText(waterMarkName);
// metrics = label.getFontMetrics(label.getFont());
// textH = metrics.getHeight();
// textW = metrics.stringWidth(label.getText());
// for (int i = 1; i < total; i++) {
// pageRect = reader.getPageSizeWithRotation(i);
// under = stamper.getOverContent(i);//在内容上方加水印
// //under = stamper.getUnderContent(i);//在内容下方加水印
// under.saveState();
// under.setGState(gs);
// under.beginText();
// under.setFontAndSize(base, 20);
//
// // 水印文字成30度角倾斜
// for (int height = interval + textH; height < pageRect.getHeight();
// height = height + textH * 3) {
// for (int width = interval + textW; width < pageRect.getWidth() + textW;width = width + textW * 2) {
// under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW,height - textH, 30);
// }
// }
// // 添加水印文字
// under.endText();
// }
stamper.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}