package com.solex.waterPrint; import java.awt.Color; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Image; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.Document; import com.lowagie.text.pdf.PdfCopyForms; /** * 给PDF添加水印 * @author hongtu * */ public class TestWaterPdf { public static void main(String[] args) throws DocumentException,IOException { //要输出的文件 String outFile = getmap(args,0); //要加水印的原文件 String inputFile=getmap(args,1); //水印文件 String waterMark=getmap(args,2); //封面 String pdfCover=getmap(args,3); //水印内容:公司、日期、内容 String company=getmap(args,4); Date date = Calendar.getInstance().getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String waterMarkDate=sdf.format(date); waterMarkDate=""; String content=getmap(args,5); ///var/www/html/storage/tmpwatermark/ d:\\ String tmppdf="d:\\"+System.currentTimeMillis()+"tmp.pdf"; String outputCover = "d:\\"+System.currentTimeMillis()+".pdf"; //给指定文件添加封面 creatCover(outputCover, pdfCover, inputFile); //给指定文件添加封面 setCover(tmppdf,inputFile,outputCover); // 将文件先加水印然后输出 setWatermark(outFile,tmppdf,waterMark,company,waterMarkDate,content); } //创建和pdf大小相等的封面 public static void creatCover(String outputCover, String pdfCover, String inputFile) throws DocumentException,IOException { if(pdfCover != null && !pdfCover.equals("")){ //获取需要加封面的pdf文件 PdfReader reader = new PdfReader(inputFile); int pagew = (int)reader.getPageSize(1).getWidth(); int pageh = (int)reader.getPageSize(1).getHeight(); Rectangle rect = new Rectangle(pagew, pageh); rect.setBackgroundColor(Color.black); Document document = new Document(rect); PdfWriter.getInstance(document, new FileOutputStream(outputCover)); document.open(); Image img = Image.getInstance(pdfCover);//获取要作为水印的图片 img.setAbsolutePosition((pagew-img.getWidth())/2, (pageh-img.getHeight())/2);//图片距离文档的左下边距 document.add(img); document.close(); //System.out.println("创建pdf封面成功"); } } //设置封面 public static void setCover(String outFile, String inputFile, String pdfCover) throws DocumentException,IOException { if(pdfCover != null && !pdfCover.equals("")){ //获取需要加水印的输入文件 PdfReader reader = new PdfReader(inputFile); PdfReader cover = new PdfReader(pdfCover); Document doc = new Document(); PdfCopyForms copy = new PdfCopyForms(new FileOutputStream(new File(outFile))); doc.open(); copy.addDocument(reader); copy.addDocument(cover); doc.close(); cover.close(); copy.close(); //System.out.println("封面添加成功"); } } //添加水印 public static void setWatermark(String outFile, String inputFile, String waterMark,String company, String waterMarkDate,String content) throws DocumentException,IOException { PdfReader reader = new PdfReader(inputFile);//获取需要加水印的输入文件 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(outFile))); PdfStamper stamper = new PdfStamper(reader, bos); int total = reader.getNumberOfPages();//获取输入文件页数 for (int i = 1; i <= total; i++) { PdfContentByte contentOver = stamper.getOverContent(i);//在内容上方加水印 // float pagew = reader.getPageSize(i).getWidth(); // float pageh = reader.getPageSize(i).getHeight(); /*添加图片水印*/ String imgUrl=waterMark; Image img = Image.getInstance(imgUrl);//获取要作为水印的图片 img.setAbsolutePosition(0, 0);//图片距离文档的左下边距 img.scaleToFit(img.getScaledWidth(), img.getScaledHeight());//图片水印的大小 img.setRotationDegrees(0);//旋转 contentOver.addImage(img);//添加图片水印 /*添加文字水印*/ contentOver.beginText(); BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.EMBEDDED);//字体实例,影响中文字体显示 contentOver.setColorFill(Color.RED);//水印颜色 if(company != null && !company.equals("")){ contentOver.setFontAndSize(bf, 16);//字体样式和大小 contentOver.showTextAligned(Element.ALIGN_LEFT, company, 215, 520,10);//左边距、下边距 } if(waterMarkDate != null && !waterMarkDate.equals("")){ contentOver.setFontAndSize(bf, 10);//字体样式和大小 contentOver.showTextAligned(Element.ALIGN_LEFT, waterMarkDate, 260, 505,10);//左边距、下边距 } if(content != null && !content.equals("")){ contentOver.setFontAndSize(bf, 24);//字体样式和大小 contentOver.showTextAligned(Element.ALIGN_LEFT, content, 240, 465,10);//左边距、下边距 } contentOver.endText(); } stamper.close(); bos.close(); reader.close(); // System.out.println("添加水印成功"); } public static String getmap(String[] obj, int key){ int length = obj.length-1; if(key > length){ return ""; }else{ return obj[key]; } } }