接上一篇,pdf跟tif 是一起做的
java实现
1、给PDF文件添加图片水印:
public static void waterMark1(String inputFile,String outputFile,String eciWaterPath) {
MessageInfo msgInfo = new MessageInfo();//消息类
try {
PdfReader reader = new PdfReader(inputFile);
// PdfReader reader = new PdfReader("\\home\\opt_user\\sp\\GSPT008S\\eci1.pdf"); //main() 用这个
System.out.println("读取PDF文件模板完了");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.9f); //透明度
gs.setStrokeOpacity(0.1f);
int total = reader.getNumberOfPages() + 1;
JLabel label = new JLabel();
FontMetrics metrics;
int textH = 0;
int textW = 0;
// label.setText(waterMarkName);
metrics = label.getFontMetrics(label.getFont());
textH = metrics.getHeight();
textW = metrics.stringWidth(label.getText());
// //生成水印图片
// String waterPath = ImageUtils.graphicsGeneration("eci");
PdfContentByte under;
for (int i = 1; i < total; i++) {
pageRect = reader.getPageSizeWithRotation(i);
under = stamper.getOverContent(i);
under.saveState();
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 40);
Image img = Image.getInstance(eciWaterPath);
System.out.println("读取水印图片模板完了");
int size = 25;
float img_Width = img.getWidth();
float img_Heigth = img.getHeight();
float pdfW = pageRect.getWidth();
float pdfH = pageRect.getHeight();
img.setAbsolutePosition(pdfW-(img_Width*40/100),pdfH-(img_Heigth*6/5));//(X,Y)
img.scalePercent(size);
under.addImage(img);
// under.showTextAligned(Element.ALIGN_LEFT, text, 10, 10, 0);
/*under.showTextAlignedKerned(alignment, text, x, y, rotation);
alignment 左、右、居中(ALIGN_CENTER, ALIGN_RIGHT or ALIGN_LEFT)
text 要输出的文本
x 文本输入的X坐标
y 文本输入的Y坐标*/
// 添加水印文字
under.endText();
}
System.out.println("PDF文件水印打印成功!路径:"+outputFile);
//说三遍
//一定不要忘记关闭流
//一定不要忘记关闭流
//一定不要忘记关闭流
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
// throw new BusinessException("文件不存在:"+inputFile);
logger.error("文件不存在:"+inputFile);
logger.error(e.getMessage());
msgInfo.setSuccess(false);
msgInfo.setMessageContent("文件不存在:"+inputFile);
throw new BusinessException(MsgIds.GSPT008SDOWNLOAD004,"流程处理过程出现异常,请联系管理员!");
}
}
public static void main(String[] args) throws Exception {
// PDFWatermark pdfw = new PDFWatermark();
String inputFile = "\\home\\opt_user\\sp\\GSPT008S\\eci2.pdf";
String outputFile = "\\home\\opt_user\\sp\\GSPT008S\\eci2_output.pdf";
String eciWaterPath = ImageUtils.graphicsGeneration("eci");
waterMark1(inputFile, outputFile,eciWaterPath);
}
效果:
2、java实现给PDF文件添加文字水印,并调整文字大小、透明度、旋转角度,铺满整个页面等等
public class AddWatermark {
/** 写共通日志 */
private static Logger logger = LoggerFactory.getLogger(AddWatermark.class);
private static int interval = -5;
/**
* pdf加水印
* @param inputFile
* @param outputFile
* @param
* @param
*/
public static void waterMark(String inputFile,String outputFile,String waterMarkName) {
MessageInfo msgInfo = new MessageInfo();//消息类
try {
PdfReader reader = new PdfReader(inputFile);
// PdfReader reader = new PdfReader("\\home\\opt_user\\sp\\GSPT008S\\eci1.pdf"); //main() 用这个
System.out.println("读取PDF文件模板完了");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.2f); //透明度
gs.setStrokeOpacity(0.1f);
int total = reader.getNumberOfPages() + 1;
JLabel label = new JLabel();
FontMetrics metrics;
int textH = 0;
int textW = 0;
label.setText(waterMarkName);
metrics = label.getFontMetrics(label.getFont());
textH = metrics.getHeight();
textW = metrics.stringWidth(label.getText());
PdfContentByte under;
for (int i = 1; i < total; i++) {
pageRect = reader.getPageSizeWithRotation(i);
under = stamper.getOverContent(i);
under.saveState();
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 10);
//你可以随心所欲的改你自己想要的角度 水印文字成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();
}
System.out.println("PDF文件水印打印成功!路径:"+outputFile);
//说三遍
//一定不要忘记关闭流
//一定不要忘记关闭流
//一定不要忘记关闭流
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
// throw new BusinessException("文件不存在:"+inputFile);
logger.error("文件不存在:"+inputFile);
logger.error(e.getMessage());
msgInfo.setSuccess(false);
msgInfo.setMessageContent("文件不存在:"+inputFile);
throw new BusinessException(MsgIds.GSPT008SDOWNLOAD004,"流程处理过程出现异常,请联系管理员!");
}
}
public static void main(String[] args) throws Exception {
waterMark("D:\\home\\opt_user\\sp\\IMG\\GSPO001Backups\\ECI_716WH0021.pdf","D:\\home\\opt_user\\sp\\IMG\\GSPO001\\ECI_716WH0021.pdf","GTMC补给资料");
}
}
效果: