文件下载:从服务器上下载,自动给下载的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;
        }
    }
posted @ 2021-10-08 14:16  长歌→  阅读(328)  评论(0编辑  收藏  举报