檔案下載:從伺服器上下載,自動給下載的PDF新增水印(二)
阿新 • • 發佈:2021-10-08
給下載的檔案新增水印程式碼,接上一篇《檔案下載:從伺服器上下載,自動給下載的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; } }