精华内容
下载资源
问答
  • PDF加水印

    2020-04-15 17:17:11
    1.前期准备: 在pom.xml中加入以下依赖 <...-- PDF加水印 Begin --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId>...

    做一个记录,备不时之需

    1.前期准备:
    在pom.xml中加入以下依赖

            <!-- PDF加水印 Begin  -->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.13</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>
            <!-- PDF加水印 End  -->
    

    2.直接贴代码

    package com.cesgroup.archive.util.water;
    
    import java.io.FileOutputStream;
    import java.util.HashMap;
    import java.util.Map;
    import com.itextpdf.text.*;
    import com.itextpdf.text.Element;
    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;
    
    /**
     * @Description 上传PDF形成水印
     * @author Cc
     * @date 2020/4/15 17:12 
     */ 
    public class WaterMakeUtil {
    	 public static void main(String[] args) {
    		 String srcFile = "D:\\AA\\000.pdf";
    		 String destFile = "D:\\AA\\0002_bak.pdf";
    		 Map<String,Object> cMap = new HashMap<>();
    		 cMap.put("username","张三");
    		 cMap.put("dwmc","公安局");
    		 cMap.put("IP","127.0.0.2");
    		 try {
    			 addWaterMark(srcFile,destFile,cMap,10,0);
    		 } catch (Exception e) {
    			 e.printStackTrace();
    		 }
    	 }
    
    	/**
         * 
         * 【功能描述:添加图片和文字水印】
         * @param srcFile 待加水印文件
         * @param destFile 加水印后存放地址
         * @param map 加水印的文本内容
         * @param textWidth 文字横坐标
         * @param textHeight 文字纵坐标
         * @throws Exception
    	 * @date 2020/4/15 
         */
        public static void addWaterMark(String srcFile, String destFile, Map map,
                int textWidth, int textHeight) throws Exception
        {
            // 待加水印的文件
            PdfReader reader = new PdfReader(srcFile);
            // 加完水印的文件
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));
            int total = reader.getNumberOfPages() + 1;
            PdfContentByte content;
            // 设置字体
            BaseFont font = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.CACHED);
            //Font font = new Font("宋体",Font.BOLD,30);
            // 循环对每页插入水印
            for (int i = 1; i < total; i++)
            {
                // 水印的起始
                //content = stamper.getUnderContent(i);
            	content = stamper.getOverContent(i);
                // 开始
                content.beginText();
                // 设置颜色 默认为蓝色
    	        content.setColorFill(BaseColor.GRAY);
                // 设置字体及字号
                content.setFontAndSize(font, 18);
                // 设置起始位置
                //content.setTextMatrix(0, 300);
                //content.setTextMatrix(textWidth, textHeight);
                // 开始写入水印
                PdfGState gs=new PdfGState();
                gs.setFillOpacity(0.5f);
                content.setGState(gs);
                int position=100;
                for(int m=0;m<10;m++){
                	 content.showTextAligned(Element.ALIGN_LEFT, map.get("username").toString(), textWidth+0,position, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("dwmc").toString(), textWidth+0,position-50, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("IP").toString(), textWidth+0,textHeight+position-100,30);
                     
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("username").toString(), textWidth+200,position, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("dwmc").toString(), textWidth+200,position-50, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("IP").toString(), textWidth+200,textHeight+position-100,30);
                     
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("username").toString(), textWidth+400,position, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("dwmc").toString(), textWidth+400,position-50, 30);
                     content.showTextAligned(Element.ALIGN_LEFT, map.get("IP").toString(), textWidth+400,textHeight+position-100,30);
                     position=position+200;
                     
           
                }
                content.endText();
            }
            stamper.close();
            //注意这个也必须关闭,否则会导致源文件被jvm一直占用!!!!
            reader.close();
    	    System.out.println("加水印完成:"+destFile);
        }
    
    }
    
    

    3.验证结果
    在这里插入图片描述
    到此完成。

    展开全文
  • pdf加水印

    千次阅读 2016-12-08 10:22:01
    pdf加水印 相关jar包itext-2.1.7.jar iTextAsian.jar 代码如下 package com.solex.waterPrint;import java.awt.Color; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream...

    pdf加水印

    1. 相关jar包

      • itext-2.1.7.jar
      • iTextAsian.jar
    2. 代码如下

    package com.solex.waterPrint;
    
    import java.awt.Color;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Element;
    import com.lowagie.text.Image;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.pdf.PdfContentByte;
    import com.lowagie.text.pdf.PdfReader;
    import com.lowagie.text.pdf.PdfStamper;
    /**
     * 给PDF添加水印
     * @author solexit06
     *
     */
    public class TestWaterPdf {
        public static void main(String[] args) throws DocumentException,IOException {
            //要输出的文件
            String outFile="C:/Users/solexit06/Desktop/WaterPrint.pdf";
            //要加水印的原文件
            String inputFile="C:/Users/solexit06/Desktop/testWaterPrint.pdf";
            //水印内容:公司、日期、内容
            String company="**科技有限公司";
            Date date = Calendar.getInstance().getTime();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String waterMarkDate=sdf.format(date);
            String content="受控文件";
            // 将文件先加水印然后输出
            setWatermark(outFile,inputFile,company,waterMarkDate,content);
        }
    
        public static void setWatermark(String outFile, String inputFile,String company,
                String waterMarkDate,String content) throws DocumentException,IOException {
    
            PdfReader reader = new PdfReader(inputFile);//获取需要加水印的输入文件
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(outFile)));
            PdfStamper stamper = new PdfStamper(reader, bos);
    
            int total = reader.getNumberOfPages();//获取输入文件页数
            for (int i = 1; i <= total; i++) {
                PdfContentByte contentOver = stamper.getOverContent(i);//在内容上方加水印
                /*添加图片水印*/
                String imgUrl="C:/Users/solexit06/Desktop/Border.png";
                Image img = Image.getInstance(imgUrl);//获取要作为水印的图片
                img.setAbsolutePosition(200, 450);//图片距离文档的左下边距
                img.scaleToFit(150, 240);//图片水印的大小
                img.setRotationDegrees(10);//旋转
                contentOver.addImage(img);//添加图片水印
    
                /*添加文字水印*/
                contentOver.beginText();
                BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.EMBEDDED);//字体实例,影响中文字体显示
                contentOver.setColorFill(Color.RED);//水印颜色
    
                contentOver.setFontAndSize(bf, 16);//字体样式和大小
                contentOver.showTextAligned(Element.ALIGN_LEFT, company, 215, 520,10);//左边距、下边距
    
                contentOver.setFontAndSize(bf, 10);//字体样式和大小
                contentOver.showTextAligned(Element.ALIGN_LEFT, waterMarkDate, 260, 505,10);//左边距、下边距
    
                contentOver.setFontAndSize(bf, 24);//字体样式和大小
                contentOver.showTextAligned(Element.ALIGN_LEFT, content, 240, 465,10);//左边距、下边距
                contentOver.endText();
    
            }
            stamper.close();
            System.out.println("添加水印成功");
        }
    }
    
    展开全文
  • PDF加水印软件

    2019-05-06 09:41:07
    PDF加水印软件
  • 最近项目有给PDF加水印的需求,目前使用的方法是:首先生成一个水印 PDF,再通过 PyPDF4 来把原件的每一页和 水印 PDF 合并,但耗时和页数成正比,耗时太长。 后来通过 JAVA 实现的方案是:读取原 PDF 后,在每一页...

    最近项目有给PDF加水印的需求,目前使用的方法是:首先生成一个水印 PDF,再通过 PyPDF4 来把原件的每一页和 水印 PDF 合并,但耗时和页数成正比,耗时太长。

    后来通过 JAVA 实现的方案是:读取原 PDF 后,在每一页的最外层直接添加文字,并且可以调整角度和透明度。

    JAVA 方案耗时大概4000页在500毫秒,而相同文件在使用 Python 方案时耗时大概在 500 秒,JAVA 方案比 Python 方案快了 1000 倍。

    然后就想到可能是 Merge 方案操作太耗时,就找了找 Python 里有没有 Java 方案的实现,目前还没找到一样的方案,但通过 PymuPDF 实现了个类似的方案:在每一页创建一个透明矩形,矩形可调整角度,然后在矩形里填充文字。

    因为目前项目已经选用 JAVA 方案了,所以 PymuPDF 方案就没再找调整文字透明度的方法,诸君可以找找试试。

    对了,PymuPDF 方案果然在耗时上提升了一大截,但还没 JAVA 方案那么变态的快,4000页大概耗时在3秒,耗时和创建几个矩形成正比。

    好了,话不多说,给诸君上菜。

    Python

    import fitz
    from PyPDF2 import PdfFileReader, PdfFileWriter
    
    
    def add_watermark_by_merge_pdf(input_pdf, output, watermark):
        """PyPDF2 Merge 方案"""
        watermark_obj = PdfFileReader(watermark)
        watermark_page = watermark_obj.getPage(0)
        pdf_reader = PdfFileReader(input_pdf)
        pdf_writer = PdfFileWriter()
    
        for page in range(pdf_reader.getNumPages()):
            p = pdf_reader.getPage(page)
            p.mergePage(watermark_page)
            pdf_writer.addPage(page)
    
        with open(output, 'wb') as f:
            pdf_writer.write(f)
    
    
    def add_watermark_by_text(input_path, output_path):
        """PymuPDF 矩形方案"""
        doc = fitz.open(input_path)
        text1 = "rotate=-90"
        red = (1, 0, 0)
        gray = (0, 0, 1)
        for page in doc:
            p1 = fitz.Point(page.rect.width - 25, page.rect.height - 25)
            shape = page.newShape()
            shape.drawCircle(p1, 1)
            shape.finish(width=0.3, color=red, fill=red)
            shape.insertText(p1, text1, rotate=-90, color=gray)
            shape.commit()
        doc.save(output_path)
    
    
    if __name__ == "__main__":
        add_watermark_by_merge_pdf(
            './douluo.pdf', './watermark.pdf', './output.pdf')
        add_watermark_by_text('./douluo.pdf', './output.pdf')
    

    JAVA

    package test;
    
            import java.io.*;
            import java.net.URL;
            import java.net.URLConnection;
    
            import com.itextpdf.text.BaseColor;
            import com.itextpdf.text.Element;
            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;
            import test.utils.ConvectorUtils;
    
    public class Watermark {
        /**
         * @param inputFile     你的PDF文件地址
         * @param outputFile    添加水印后生成PDF存放的地址
         * @param waterMarkName 你的水印
         * @return
         */
        public static boolean waterMark(String inputFile, String outputFile, String waterMarkName) {
            try {
                long s1 = System.currentTimeMillis();
                PdfReader reader = new PdfReader(inputFile);
                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;
    
                PdfContentByte under;
                // Rectangle pageRect = null;
                long s2 = System.currentTimeMillis();
                System.out.println("读文件耗时:" + (s2 - s1));
                for (int i = 1; i < total; i++) {
                    // 获得PDF最顶层
                    under = stamper.getOverContent(i);
                    // set Transparency
                    PdfGState gs = new PdfGState();
                    // 设置透明度为0.2
                    gs.setFillOpacity(0.5f);
                    under.setGState(gs);
                    under.saveState();
                    under.restoreState();
                    under.beginText();
                    under.setFontAndSize(base, 35);
                    under.setTextMatrix(30, 30);
                    under.setColorFill(BaseColor.GRAY);
                    for (int y = 0; y < 3; y++) {
                        for (int x = 0; x < 2; x++) {
                            // 水印文字成45度角倾斜
                            under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, 40+250 * x, 300 * y+ x * 50, 45);
                        }
                    }
                    // 添加水印文字
                    under.endText();
                    under.setLineWidth(1f);
                    under.stroke();
                }
                stamper.close();
                System.out.println("转换文件耗时:" + (System.currentTimeMillis() - s2));
                return true;
    
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        public static void main(String[] args) {
            String inputFile = args[0];
            String outputFile = args[1];
            String watermark = args[2];
            boolean flag = waterMark(inputFile, outputFile, watermark);
            if (flag){
                System.out.println("加水印成功");
            }else{
                System.out.println("加水印失败");
            }
        }
    }
    

    JAVA POM

    <dependencies>
        <dependency>
          <groupId>com.itextpdf</groupId>
          <artifactId>itextpdf</artifactId>
          <version>5.5.10</version>
      	</dependency>
      	<dependency>
          <groupId>com.itextpdf</groupId>
          <artifactId>itext-asian</artifactId>
          <version>5.2.0</version>
        </dependency>
      </dependencies>
    

    有君想要Python 调用 Java的代码,如下:

    import os
    
    import jpype
    
    # 一些基础路径
    BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    LIB_PATH = os.path.join(BASE_PATH, 'lib')
    # 使用的java包所在路径
    WATERMARK_JAR_PATH = os.path.join(LIB_PATH, 'jwatermark.jar')
    
    
    class JavaRunner:
        def __init__(self):
            jpype.startJVM(jpype.getDefaultJVMPath(), "-ea",
                           "-Djava.class.path=%s" % WATERMARK_JAR_PATH, convertStrings = False)
            Test = jpype.JClass('test.Test')
            self.t = Test()
    
        def addwatermark(self, input_path: str, output_path: str, watermark: str) -> bool:
            return self.t.addWarterMark(input_path, output_path, watermark)
    
        def tif2pdf(self, input_path:str, output_path:str) -> bool:
            return self.t.convertTifToPdf(input_path, output_path)
    
        # def __del__(self):
        #     jpype.shutdownJVM()
    

    这块需要诸君使用IntelliJ IDEA这个IDEJAVA代码进行编译打成jar包,然后使用JPython启动JAVA虚拟机从而可以直接调用jar包中的Class,我这块把jar包放在了主目录的lib文件夹下,为了方便代码观察,我把从config导入的几个基础路径和jar路径COPY过来了,方便诸君进行自配

    诸君若不想用JAVA虚拟机,可以尝试第二种方式,如下:

    import subprocess
    
    
    class File:
    	……	……
    	……	……
    	@staticmethod
    	def subcommand(args, pattern, timeout, error=TimeoutError):
    	    p = subprocess.Popen(args, stderr=subprocess.PIPE,
    	                         stdout=subprocess.PIPE, shell=False, encoding="utf-8")
    	    p_start = time.time()
    	    while True:
    	        if p.poll() is not None:
    	            break
    	        if (time.time() - p_start) > timeout:
    	            p.terminate()
    	            raise error(f'{args}, {timeout}')
    	        time.sleep(0.1)
    	    command_return = p.stdout.read()
    	    logger.info(f'[command_return] {command_return}')
    	    success_str_find = re.findall(pattern, command_return)
    	    return True if success_str_find else False
    
        def addwatermark(self):
            args = ["java", "-classpath", WATERMARK_JAR_PATH,
                    "test.Watermark", self.convert_path,  WATERMARK_PATH, self.watermark]
            flag = self.subcommand(
                args, r'(加水印成功)', WATERMARK_TIMEOUT_NUM, WatermarkTimeoutError)
            if flag:
                self.watermark_path = WATERMARK_PATH
            else:
                raise WatermarkError('not get watermark_path')
    

    这块代码也只是给个参考,具体方案是使用Python标准库subprocess开启子进程来运行java命令,就和在命令行直接运行java一样,如:java -classpath jwatermark.jar test.Watermark test.pdf output.pdf "www"
    然后我因为有其他地方也都需要通过这种方式运行命令调用JAVA代码,而且设置超时返回是必须的,所有在这里把调用封成了subcommand方法,pattern参数的作用是捕获JAVA代码的输出里是不是存在调用成功的字符串,就像前面写的JAVA代码里加水印成功后会输出加水印成功,只要输出里存在这个字符串就是调用成功了。

    展开全文
  • PDF加水印的方法有那些呢?在工作中,很多人为了防止自己的PDF文件被他人随意的盗用,通常会选择在PDF文件中添加水印。经常接触PDF文件小伙伴肯定会觉得操作很简单,那对于职场小白来说无从下手。今天小编就给大家...

    PDF加水印的方法有那些呢?在工作中,很多人为了防止自己的PDF文件被他人随意的盗用,通常会选择在PDF文件中添加水印。经常接触PDF文件小伙伴肯定会觉得操作很简单,那对于职场小白来说无从下手。今天小编就给大家介绍一个超简单的方法,来看一看吧。
    在这里插入图片描述
    使用工具:迅捷PDF编辑器
    具体方法如下:
    1.打开软件,进入主界面,点击文件【打开】将需要添加水印的PDF文件导入。
    在这里插入图片描述
    2.点击工具栏中的【文档】在下拉框中找到【水印】,将鼠标移到水印位置,在右侧可以找到【添加】并点击。
    在这里插入图片描述
    3.点击【添加】,这时候会出现一个弹框,在这里可以选择的水印类型有【文本】和【文件】水印,大家根据自己的需求进行选择就好了。
    在这里插入图片描述
    4.当选择【文本】类型水印时,我们可以在文本的输入框中输入水印的内容,而且还可以对水印的字体、大小以及颜色进行设置哦。
    在这里插入图片描述
    5.如果需要设置文件水印,我们只需点击【文件名】右侧文件夹图标,然后选择要设置的文件就可以了。
    在这里插入图片描述
    6.我们还可以根据自己的需求,对水印的外观和布局选项以及页面范围进行设置,点击【确定】后,水印添加就完成了。
    在这里插入图片描述
    小编对PDF加水印的方法就介绍到这里了啦!想要保护自己PDF文件但不会添加水印的小伙伴们,赶快跟着以上步骤操作起来给自己的PDF文件添加一个水印吧!

    展开全文
  • pdf加水印代码,有助于Pdf保密性,pdf加水印代码,有助于Pdf保密性
  • 1、使用freemaker对模板解析填充数据导出word文档的功能 2、实现使用itext对word转pdf功能 3、实现了对pdf加水印功能
  • 如果你经常在网上下载一些...鉴于此,今天要跟大家分享的是怎样给pdf文件加水印,大家也可以保护自己的上传到网上的pdf文件版权哦。pdf文件加水印软件下载地址:http://www.leawo.cn/ND_upload.php?do=info&id=...
  • java pdf加水印的方法

    2020-08-25 17:51:12
    主要为大家详细介绍了java pdf加水印的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java pdf 加密 水印

    2010-06-18 09:22:00
    java pdf 加密 水印 通过 itext方式,拿去就可以直接跑了
  • PDF加水印(C#源码)

    2018-10-13 23:01:35
    C#写了一个简单的给PDF加水印的工具,水印图片可自定义,程序可直接运行,内含源码,亲测可用!
  • 主要介绍了利用java批量给pdf加水印的方法,文中给出了简单的示例代码,需要的朋友可以参考借鉴,下面来一起看吧。
  • 逻辑思路 1、先将excel转为pdf (TestForExcel2PDF测试类) 2、然后再pdf加水印(TestWaterPrint、TestwaterMark都为加水印测试类)
  • 因为好奇PDF处理的技术原理是什么,于是在网上搜索了PDF加水印的相关技术,结果出来很多技术达人用各种代码为PDF加水印的文章,有PHP、Java、C#、Python等等。看了一圈后完全懵逼哦,就代码量而言,Python算是里面...
  • java 给pdf加水印

    2019-12-12 11:32:57
    --pdf加水印依赖--> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency&g...
  • python pdf加水印

    千次阅读 2019-05-28 17:52:57
    python pdf加水印 from PyPDF2 import PdfFileReader, PdfFileWriter from reportlab.lib.units import cm from reportlab.pdfgen import canvas def create_watermark(content): """水印信息""" # 默认大小为21...
  • pdf加水印

    2019-02-13 11:34:56
    使用Spire.Pdf添加水印,提示“System.OutOfMemoryException”异常和“未将对象引用设置到对象的实例”
  • PDF加水印是我们编辑PDF过程中经常会做的事情,如果只有一个PDF文件的时候,那么PDF加水印也挺简单,但是如果有很多PDF文件要一起加水印,那么如果再一个个打开编辑就显得很麻烦了。那么如何批量给PDF加水印呢? 1...
  • OpenOffice实现文档转PDF加水印

    千次阅读 2019-06-24 16:34:58
    OpenOffice实现文件转Pdf加水印(支持自定义添加水印、页眉、页脚) 最近项目需要实现下载Office文档时自动转成PDF文档, 以下代码支持2003及2007版的Word,PPT,Excel转换,并支持自定义添加水印、页眉、页脚 实现...
  • PDF加水印文字; 为PDF加水印图片。 1,PDF转变为图片 /** * @author dalin *将PDF格式的文件转换成png文件 */ public class PdfToPNG { public static void main(String[] args) { String filePath = "D:\...
  • 双层PDF加水印

    2014-10-15 16:14:38
    双层PDF(图片一层,文字一层)添加水印效果,本人用一个包含10页的双层pdf测试通过,代码无误。下载后请先用杀毒软件扫描。
  • 方便快捷给 PDF 加水印 有文字创作需求的同学有时候会需要将自己的作品集结为 PDF 进行分发,一方面帮助自己整理归档,另一方面也有利于作品传播。类似的需求我们已经讲过《用 Python 抓取公号文章保存成 PDF》。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,240
精华内容 2,096
关键字:

pdf加水印