1. 程式人生 > 其它 >檔案下載:從伺服器上下載,自動給下載的PDF新增水印(二)

檔案下載:從伺服器上下載,自動給下載的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;
        }
    }