zoukankan      html  css  js  c++  java
  • PDF文档设置水印工具类

    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    
    import org.apache.log4j.Logger;
    
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfGState;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    
    public class WatermarkUtil {
    
        private static Logger logger = Logger.getLogger(WatermarkUtil.class);
    
        /**
         * PDF文件设置文字水印
         * 
         * @param inputFilePath  输入文件路径
         * @param outputFilePath 输出文件路径
         * @param StrWatermark   文字水印内容
         * @param pageList       水印添加的页码(传空则全部页码添加水印)
         * @return 返回是否添加成功
         */
        public static Boolean setStrWatermark2PDFByPage(String inputFilePath, String outputFilePath, String StrWatermark,
                ArrayList<String> pageList) {
            try {
                logger.info("开始添加文字水印,inputFilePath:" + inputFilePath + "; outputFilePath:" + outputFilePath
                        + "; StrWatermark:" + StrWatermark + "; ");
                PdfReader reader = new PdfReader(inputFilePath);
                File outputFile = new File(outputFilePath);
                // 假如目标路径不存在,则新建该路径
                if (!outputFile.getParentFile().exists()) {
                    outputFile.getParentFile().mkdirs();
                }
                // 假如目标文件不存在,则新建该文件
                if (!outputFile.exists()) {
                    outputFile.createNewFile();
                }
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outputFile));
                PdfStamper stamper = new PdfStamper(reader, bos);
                int total = reader.getNumberOfPages() + 1;
                PdfContentByte content;
                BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
                // BaseFont base =
                // BaseFont.createFont("/data/tmis/uploads/file/font/simsun.ttc,1",
                // BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                PdfGState gs = new PdfGState();
                if (pageList == null || pageList.isEmpty()) {// 水印添加的页码(传空则全部页码添加水印)
                    for (int i = 1; i < total; i++) {
                        // content = stamper.getOverContent(i);// 在内容上方加水印
                        content = stamper.getUnderContent(i);// 在内容下方加水印
                        gs.setFillOpacity(0.2f);
                        // content.setGState(gs);
                        content.beginText();
                        content.setRGBColorFill(222, 222, 222);
                        content.setFontAndSize(base, 30);
                        content.setTextMatrix(100, 250);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 100, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 300, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 500, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 700, 45);
    
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 100, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 300, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 500, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 700, 45);
    
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 100, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 300, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 500, 45);
                        content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 700, 45);
    
                        content.setRGBColorFill(0, 0, 0);
                        content.setFontAndSize(base, 8);
                        content.endText();
    
                    }
                    stamper.close();
                    reader.close();
                } else {
                    for (int i = 1; i < total; i++) {
                        if (pageList.contains(String.valueOf(i))) {
                            // content = stamper.getOverContent(i);// 在内容上方加水印
                            content = stamper.getUnderContent(i);// 在内容下方加水印
                            gs.setFillOpacity(0.2f);
                            // content.setGState(gs);
                            content.beginText();
                            content.setRGBColorFill(222, 222, 222);
                            content.setFontAndSize(base, 30);
                            content.setTextMatrix(100, 250);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 100, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 300, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 500, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 100, 700, 45);
    
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 100, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 300, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 500, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 300, 700, 45);
    
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 100, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 300, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 500, 45);
                            content.showTextAligned(Element.ALIGN_CENTER, StrWatermark, 500, 700, 45);
    
                            content.setRGBColorFill(0, 0, 0);
                            content.setFontAndSize(base, 8);
                            content.endText();
                        }
                    }
                    stamper.close();
                    reader.close();
                    logger.info("添加文字水印完毕");
                }
                return true;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                logger.error("添加文字水印异常" + e.toString());
                return false;
            }
        }
    
        /**
         * PDF文件设置图片水印
         * 
         * @param inputFilePath    输入文件路径
         * @param outputFilePath   输出文件路径
         * @param ImgWatermarkPath 图片水印路径
         * @param pageList         水印添加的页码(传空则全部页码添加水印)
         * @return 返回是否添加成功
         */
        public static Boolean setImgWatermark2PDFByPage(String inputFilePath, String outputFilePath,
                String ImgWatermarkPath, ArrayList<String> pageList) {
            try {
                logger.info("开始添加图片水印,inputFilePath:" + inputFilePath + "; outputFilePath:" + outputFilePath
                        + "; ImgWatermarkPath:" + ImgWatermarkPath + "; ");
                // 待加水印的文件
                PdfReader reader = new PdfReader(inputFilePath);
                // 加完水印的文件
                File outputFile = new File(outputFilePath);
                // 假如目标路径不存在,则新建该路径
                if (!outputFile.getParentFile().exists()) {
                    outputFile.getParentFile().mkdirs();
                }
                // 假如目标文件不存在,则新建该文件
                if (!outputFile.exists()) {
                    outputFile.createNewFile();
                }
                PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
                // 设置字体
                BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
                // PDF总页数
                int total = reader.getNumberOfPages() + 1;
                // 循环对每页插入水印
                PdfContentByte content;
    
                if (pageList == null || pageList.isEmpty()) {// 水印添加的页码(传空则全部页码添加水印)
                    for (int i = 1; i < total; i++) {
                        PdfGState gs1 = new PdfGState();
                        gs1.setFillOpacity(0.1f);
                        content = stamper.getUnderContent(i);// 在内容下方加水印
                        content.setGState(gs1);
                        // 图片水印
                        if (ImgWatermarkPath != null) {
                            Image image = null;
                            if (ImgWatermarkPath != null) {
                                image = Image.getInstance(ImgWatermarkPath);
                                image.setRotationDegrees(45);//旋转 角度
                                // 设置图片的显示大小
                                image.scaleToFit(100, 125);
                            }
                            image.setAbsolutePosition(50, 50);content.addImage(image);
                            image.setAbsolutePosition(50, 250);content.addImage(image);
                            image.setAbsolutePosition(50, 450);content.addImage(image);
                            image.setAbsolutePosition(50, 650);content.addImage(image);
                            
                            image.setAbsolutePosition(250, 50);content.addImage(image);
                            image.setAbsolutePosition(250, 250);content.addImage(image);
                            image.setAbsolutePosition(250, 450);content.addImage(image);
                            image.setAbsolutePosition(250, 650);content.addImage(image);
                            
                            image.setAbsolutePosition(450, 50);content.addImage(image);
                            image.setAbsolutePosition(450, 250);content.addImage(image);
                            image.setAbsolutePosition(450, 450);content.addImage(image);
                            image.setAbsolutePosition(450, 650);content.addImage(image);
                            
                        }
                    }
                } else {
                    for (int i = 1; i < total; i++) {
                        if (pageList.contains(String.valueOf(i))) {
                            PdfGState gs1 = new PdfGState();
                            gs1.setFillOpacity(0.1f);
                            content = stamper.getUnderContent(i);// 在内容下方加水印
                            content.setGState(gs1);
                            // 图片水印
                            if (ImgWatermarkPath != null) {
                                Image image = null;
                                if (ImgWatermarkPath != null) {
                                    image = Image.getInstance(ImgWatermarkPath);
                                    image.setRotationDegrees(45);//旋转 角度
                                    // 设置图片的显示大小
                                    image.scaleToFit(100, 125);
                                }
                                image.setAbsolutePosition(50, 50);content.addImage(image);
                                image.setAbsolutePosition(50, 250);content.addImage(image);
                                image.setAbsolutePosition(50, 450);content.addImage(image);
                                image.setAbsolutePosition(50, 650);content.addImage(image);
                                
                                image.setAbsolutePosition(250, 50);content.addImage(image);
                                image.setAbsolutePosition(250, 250);content.addImage(image);
                                image.setAbsolutePosition(250, 450);content.addImage(image);
                                image.setAbsolutePosition(250, 650);content.addImage(image);
                                
                                image.setAbsolutePosition(450, 50);content.addImage(image);
                                image.setAbsolutePosition(450, 250);content.addImage(image);
                                image.setAbsolutePosition(450, 450);content.addImage(image);
                                image.setAbsolutePosition(450, 650);content.addImage(image);
                            }
                        }
                    }
                }
                stamper.close();
                reader.close();
                logger.info("添加图片水印完毕");
                return true;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                logger.error("添加图片水印异常" + e.toString());
                return false;
            }
    
        }
    
    }
  • 相关阅读:
    接口和实现接口的类
    类的封装
    实验六:类的封装
    实验五:任意输入10个int类型数据,排序输出,再找出素数
    实验四:采用一维数组输出等腰三角形的杨辉三角
    2017-12-31 小组工作记录
    2017-12-30 小组工作记录
    2017-12-29 小组工作记录
    2017-12-24 小组工作记录
    2017-12-21 小组工作记录
  • 原文地址:https://www.cnblogs.com/RivenLw/p/10309281.html
Copyright © 2011-2022 走看看