java给pdf文件添加水印。
java给pdf文件添加水印,适用于不是maven管理的普通java工程。
切记必需导入这两个架包itext-2.0.6.jar和iTextAsian.jar,为了这两个架包我没少折腾,下面有架包下载地址 架包下载地址: 链接:https://pan.baidu.com/s/1pbXavIUlfFspbpRzHtJnbQ 提取码:i9ap
public class WaterMark { private static int interval = -5; public static void main(String[] args) throws Exception { // TODO Auto-generated method stub String inputFile = "F:\123.pdf"; String outputFile = "F:\456.pdf"; String content = "root用户"; waterMark(inputFile, outputFile, content); //String base64String = getPDFBinary(outputFile); //System.out.println(base64String); //getText(outputFile); } //给PDF添加水印 //inputFile 文件路径+名称 //outputFile 添加水印后输出文件保存的路径+名称 //waterMarkName 添加水印的内容 public static void waterMark(String inputFile,String outputFile, String waterMarkName) { try { PdfReader reader = new PdfReader(inputFile); //切记这里的参数是文件的路径 ,路径必须是双斜杠的如F:\123.pdf,不能是F:/123.pdf 或者F:123.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.3f); gs.setStrokeOpacity(0.4f); 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, 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(); reader.close(); } catch (Exception e) { e.printStackTrace(); } } }