精华内容
下载资源
问答
  • pdf 添加电子签名

    2020-07-04 23:59:53
    -- 签名包--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> .

     用到的依赖:

            <!-- 签名包-->
            <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>
            <dependency>
                <groupId>org.bouncycastle</groupId>
                <artifactId>bcpkix-jdk15on</artifactId>
                <version>1.64</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
            <dependency>
                <groupId>org.apache.pdfbox</groupId>
                <artifactId>pdfbox</artifactId>
                <version>2.0.20</version>
            </dependency>
            <!-- 签名包-->

     直接上代码:

    package com.secxiot.common.utils;
    
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.rendering.PDFRenderer;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.*;
    
    /**
     * 用户签名书
     */
    public class SignWriteToPDF {
        /**
         * signImagePath 签名图片
         * inputPDFPath 原文件路径
         * outPDFPath 输出文件路径
         */
        public static void setWaterPrint(String outPDFPath, String inputPDFPath, String signImagePath) throws DocumentException, IOException {
            BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            InputStream input = new FileInputStream(new File(inputPDFPath));
            PdfReader reader = new PdfReader(input);
    
            OutputStream output = new FileOutputStream(new File(outPDFPath));
            PdfStamper stamper = new PdfStamper(reader, output);
            PdfContentByte page = stamper.getOverContent(1);
    
            //将文字贴入pdf
           /* page.beginText();
            page.setFontAndSize(baseFont,12);
            BaseColor coler = new BaseColor(0, 0, 0);
            page.setColorFill(coler);
            page.setTextMatrix(100,500); //设置文字在页面中的坐标
            page.showText("66666666666666666");
            page.endText();*/
    
            //将图片贴入pdf
            Image image = Image.getInstance(signImagePath);
            image.setAbsolutePosition(480, 130); //设置图片在页面中的坐标
            //image.scalePercent(20);//依照比例缩放
            image.setRotationDegrees(90);//旋转 角度
    
            image.scaleAbsolute(image.getWidth()/10, image.getWidth()/10);
            page.addImage(image);
    
            stamper.close();
            reader.close();
            input.close();
        }
    
        public static void main(String[] args) throws DocumentException, IOException {
            setWaterPrint("H:\\photo\\spatient_sign_48.pdf", "H:\\photo\\spatient_sign.pdf", "H:\\photo\\711664989302785.png");
        }
    
        /**
         *
         * @param pdfPath pdf 路径
         * @param imgPath 图片路径
         * @param imgType 图片类型
         */
        public static void pdfTOimg(String pdfPath, String imgPath, String imgType) {
            File file = new File(pdfPath);
            try {
                PDDocument doc = PDDocument.load(file);
                PDFRenderer renderer = new PDFRenderer(doc);
                int pageCount = doc.getNumberOfPages();
                for(int i=0;i<pageCount;i++) {
                    BufferedImage image = renderer.renderImageWithDPI(i, 296);
                    //          BufferedImage image = renderer.renderImage(i, 2.5f);
                    ImageIO.write(image, imgType, new File(imgPath));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 删除文件
         * @param fileName 文件路径
         * @return
         */
        public static boolean deleteFile(String fileName) {
            File file = new File(fileName);
            if (file.exists() && file.isFile()) {
                if (file.delete()) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    }

     

    展开全文
  • 本文档介绍了如何用PDF制作电子签名,简单易学,为原创作品。
  • 1.基础准备: 1.1 推荐大家阅读...1.2一个国密算法的签名/解密工具类(如果没有国密的,任意解密类都可以,本文提供的PDF签名方法适用于任何一种算法) 1.3 itext 5.5 的源码包,及其相关依赖,...

    1.基础准备:

    1.1 推荐大家阅读https://blog.csdn.net/liumengya007007/article/details/53129323 ,首先完成RSA的电子签名.有一个关于电子签名的直观认识.

    1.2一个国密算法的签名/解密工具类(如果没有国密的,任意加解密类都可以,本文提供的PDF签名方法适用于任何一种算法)

    1.3 itext 5.5 的源码包,及其相关依赖,因为我们是需要修改itext源码的

    2.技术导读:

    2.1PDF文档结构:

    因为不是专业的,这里只通俗的介绍,先引用下别人的成果

    ---------------------
    作者:J_D_New
    来源:CSDN
    原文:https://blog.csdn.net/u013066292/article/details/78486055
    版权声明:本文为博主原创文章,转载请附上博文链接!

    签名和验签大致流程

    我们可以看下这幅图,来自《Acrobat_DigitalSignatures_in_PDF》:

    Acrobat_DigitalSignatures_in_PDF

    大致的意思就是说

        要签名的时候会把文档转换成字节数组byte[],然后用一个叫ByteRange的数组的数据去切割文档的字节数组.
        ByteRange有四个数字,分成三部分(以图为例),我们要用来签名的数据就在0~840和960~1200这部分,然后签名就存放在840~960里面。(注意每个文档的ByteRange的值都是不一样的)
        因此我们验签的时候获取签名值就来自于840~960也就是Contents里。
        要验签的原文就是ByteRange里除去签名值的部分。

    2.2 java SPI

    因为国密算法的具体实现千差万别,我们不可能为了每一家不同的CA厂商都去单独实现一套国密的签名接口,为了实现可插拔的原则,也是尽可能的甩锅和偷懒(代码写的越多错的越多,做项目的最高境界就是一行代码都不写..全是别人的锅),我们引入spi技术,具体的不多赘述,再抄一篇别人的工作成果

    https://blog.csdn.net/sigangjun/article/details/79071850

    当然如果只是个人学习使用,无视这里就好,但是多学一点是一点对吧.

    3.思路

    3.1签名过程

    获取PDF文档的字节数组----->创建签名域(大小,外观显示等等)------>读取byteRange将文档的字节数组切割成3部分,按顺序命名为buffer1,buffer2,buffer3-->System.arraycopy把buffer1和buffer3相加获取签名原文orgin(按照Adobe官方的说法是buffer1+buffer3但是实际操作中发现buffer1占了绝大部分的加密主体,buffer3只有很小一部分,而且一些小操作比如添加文档属性等会导致buffer3的变动,所以本文实际加密的是buffer1而非buffer1+buffer3)--->将orgin转码发送spi的加解密接口中,获得加密值signValue--->将signValue写入文档中,也就是Contents中--->获取新的签名后文档

    3.2 验证过程

    扫描文档签名域读取byteRange-->按照byteRange的值切割文档-->取buffer1(buffer1+buffer3看当时加密的是哪些部分)作为签名原文----->取pdf中Contents的部分,得到签名结果--->将签名原文和结果发送spi验证接口,获取验证结果

    4.开工

    首先我们仿照RSA的签名过程

    重点是在这个部分

    我们可以看到MakeSignature有三个方法

    我们使用的方法是

    参数依次是:签名域,需要实现的spi接口(稍后再说),初始化的Content大小(只能>= 小于会报错),我自己加的Id,用于识别用户的唯一键值对

    值得注意的是:Content的大小 itext中自己是写死8192的,我们可以写死也可以根据签名结果动态传参,但是必须保证Content的大小大于你的签名结果.

    所以

    这部分代码注释掉

    替换为(主动寻找spi服务)

    ExternalSignatureContainer externalSignatureContainer = null;
    ServiceLoader<ExternalSignatureContainer> serviceLoader2 = ServiceLoader.load(ExternalSignatureContainer.class);
    Iterator<ExternalSignatureContainer> operationIterator2 = serviceLoader2.iterator();
    while (operationIterator2.hasNext()) {
    	externalSignatureContainer = operationIterator2.next();
    }
    MakeSignature.signExternalContainer(sap, externalSignatureContainer, 8192, this.CertificateId);
    

    然后就是喜闻乐见的改源码了

    修改signExternalContainer方法,原理上照上文所诉的,下面贴一下参考的代码,涉及到一些底层的get/set方法,自行添加就好.

    /**
    	 * Sign the document using an external container, usually a PKCS7. The signature is fully composed
    	 * externally, iText will just put the container inside the document.
    	 * @param sap the PdfSignatureAppearance
    	 * @param externalSignatureContainer the interface providing the actual signing
    	 * @param estimatedSize the reserved size for the signature
    	 * @throws GeneralSecurityException
    	 * @throws IOException
    	 * @throws DocumentException 
    	 */
    	public static void signExternalContainer(PdfSignatureAppearance sap,
    			ExternalSignatureContainer externalSignatureContainer, int estimatedSize, String CertificateId)
    			throws GeneralSecurityException, IOException, DocumentException {
    		PdfSignature dic = new PdfSignature(null, null);
    		dic.setReason(sap.getReason());
    		dic.setLocation(sap.getLocation());
    		dic.setSignatureCreator(sap.getSignatureCreator());
    		dic.setContact(sap.getContact());
    		dic.setDate(new PdfDate(sap.getSignDate())); // time-stamp will
    														// over-rule this
    		externalSignatureContainer.modifySigningDictionary(dic);
    		sap.setCryptoDictionary(dic);
    		HashMap<PdfName, Integer> exc = new HashMap<PdfName, Integer>();
    		exc.put(PdfName.CONTENTS, new Integer(estimatedSize * 2 + 2));
    		sap.preClose(exc);
    		// 获取签名原文
    		byte[] src = sap.getBout();
    		int range[] = { (int) sap.getRange()[0], (int) sap.getRange()[1], (int) sap.getRange()[2],
    				(int) sap.getRange()[3] };
    		System.out.println(range[0] + "," + range[1] + "," + range[2] + "," + range[3]);
    		int length = range[1] + range[3];
    		System.out.println("length: " + length);
    		byte[] byffer1 = new byte[range[1]];
    		// byte[] buffer2=new byte[range[3]];
    		System.arraycopy(src, 0, byffer1, 0, range[1]);
    		// System.arraycopy(src, range[2], buffer2, 0, range[3]);
    		// System.out.println("buffer1: " + Base64Util.encode(byffer1));
    		// System.out.println("buffer2: "+Base64Util.encode(buffer2));
    		// byte[] dest = new byte[length];
    		// System.arraycopy(src, 0, dest, 0, range[1]);
    		// System.arraycopy(src, range[2], dest, range[1], range[3]);
    		// System.arraycopy(src2, range[2], dest, range[1], range[4]);
    		// System.out.println("验证原文: "+Base64Util.encode(dest));
    		// 测试结束----
    		// InputStream data = sap.getRangeStream();
    		InputStream data = new ByteArrayInputStream(byffer1);
    		byte[] encodedSig = externalSignatureContainer.signByCertificateID(data, CertificateId);
    		// if (estimatedSize < encodedSig.length)
    		// throw new IOException("Not enough space");
    		// byte[] paddedSig = new byte[estimatedSize];
    		// System.arraycopy(encodedSig, 0, paddedSig, 0, encodedSig.length);
    		PdfDictionary dic2 = new PdfDictionary();
    		dic2.put(PdfName.CONTENTS, new PdfString(encodedSig).setHexWriting(true));
    		sap.close(dic2);
    	}

    这一步做完之后,本质上我们关于Itext的开发就OK了,剩下的是和CA的加解密接口开发联调...

    新建一个工程,创建两个类导入修改后的itext包/工程

    一个实现 itext 5.5 ExternalSignatureContainer

    modifySigningDictionary()照抄

    signByCertificateID()是我修改的原接口,原始接口是实现的是sign()方法,加入CertId是因为CA的接口需要,这里是以吉大正元的SM2接口为例,其实没有接口也无所谓,随便写个加密解密就是了.自己定义一个ADBE_GM_DETACHED数值随意这个只是用作标识的

    package cn.biceng;
    
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import java.security.GeneralSecurityException;
    
    import com.eseals.itextpdf.text.pdf.PdfDictionary;
    import com.eseals.itextpdf.text.pdf.PdfName;
    import com.eseals.itextpdf.text.pdf.security.ExternalSignatureContainer;
    import com.eseals.util.Base64Util;
    
    import cn.com.jit.assp.dsign.DSign;
    
    public class MySignaturnContainer implements ExternalSignatureContainer {
    
    	@Override
    	public void modifySigningDictionary(PdfDictionary signDic) {
    		signDic.put(PdfName.FILTER, PdfName.ADOBE_PPKLITE);
    		// 注意这里
    		signDic.put(PdfName.SUBFILTER, PdfName.ADBE_GM_DETACHED);
    	}
    
    	@Override
    	public byte[] signByCertificateID(InputStream signData, String CertId) throws GeneralSecurityException {
    		try {
    			DSign signDs = new DSign();
    			signDs.initConfig("d:/cssconfig.properties");
    			ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
    			byte[] buff = new byte[8192];
    			int rc = 0;
    			while ((rc = signData.read(buff, 0, 100)) > 0) {
    				swapStream.write(buff, 0, rc);
    			}
    			byte[] srccode = swapStream.toByteArray(); // 需要签名的原文
    //			System.out.println("签名原文: " + Base64Util.encode(srccode));
    //			System.out.println("签名原文长度: " + Base64Util.encode(srccode).length());
    			String signReturn = signDs.detachSign(CertId, Base64Util.encode(srccode).getBytes());
    //			System.out.println("签名返回值: " + signReturn);
    //			System.out.println("签名返回值长度:" + signReturn.length());
    			return Base64Util.decode(signReturn);
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    
    }
    

    另一个是验证的时候用到的接口

    验证的部分涉及到一些公司内部的东西就不方便发了,这里告诉大家怎么提取原文和签名结果,大家自行调用验证接口就可以了,本文的MyVerfiyResult就是关于验证接口的封装实现,没什么营养.

            byte[] temp = data;
    		PdfReader reader = null;
    		try {
    			reader = new PdfReader(data);
    		} catch (BadPasswordException badPwd) {
    			reader = new PdfReader(data, ownerPassword.getBytes());
    		} catch (Exception e) {
    			throw e;
    		}
    		AcroFields af = reader.getAcroFields();
    	    for (String name : af.getSignatureNames()) {
    			GmStampVerifyResult result=new GmStampVerifyResult();
    			// 获取源数据
    			PdfDictionary v = af.getSignatureDictionary(name);
    			PdfArray b = v.getAsArray(PdfName.BYTERANGE);
    			long[] gaps = b.asLongArray();
    			int range[] = { (int) gaps[0], (int) gaps[1], (int) gaps[2], (int) gaps[3] };
    			//获取原文 此处是buffer1,看加密过程中决定是否改buffer1+buffer3
    			byte[] buffer1 = new byte[range[1]];
    			System.arraycopy(temp, 0, buffer1, 0, range[1]);
    			byte[] originData = buffer1;
    			// 获取签名值
    			PdfDictionary pdfDictionary = af.getSignatureDictionary(name);
    			PdfString contents = pdfDictionary.getAsString(PdfName.CONTENTS);
             }

    结语:涉及到源码的改动,只能描述大概的流程,一些边角的东西只有在实际操作中才会暴露出来,有兴趣的小伙伴可以动手试试看改造

    展开全文
  • 幸运的是,苹果公司增加了使用预览功能对PDF文档进行电子签名的功能,该程序预先安装每台运行OS X Lion或更高版本的Mac上。Mac上使用“预览”在PDF上进行电子签名的步骤非常简单,可以节省宝贵的时间,尤其是当...

    当您通过电子邮件收到必须签名的PDF文档时,打印文件,用钢笔在虚线上签名,扫描签名的文档并将其发回的过程可能是一项相当繁琐的任务。幸运的是,苹果公司增加了使用预览功能对PDF文档进行电子签名的功能,该程序预先安装在每台运行OS X Lion或更高版本的Mac上。

    a71badeb9479cf8a20a152837023bc6b.png

    在Mac上使用“预览”在PDF上进行电子签名的步骤非常简单,可以节省宝贵的时间,尤其是当您要签署多个文档,合同,表格或其他文书时。如果您担心自己的虚拟签名看起来很糟糕,请放心,可以使用触控板或在Mac内置的iSight相机上的纸上签名来创建签名。

    使用触控板对PDF进行电子签名的步骤

    1.打开您需要在预览中登录的PDF文件。 2.点击标记图标(

    0d46e9857e98d062af81f34897ab7625.png

    ),然后签名(

    48efc5f03c9567446ca6c09b6e40cde1.png

    )图标。 3.单击创建签名>单击此处开始。在触控板上绘制您的签名。完成后单击任意键。单击完成。 4.单击创建的签名,将其插入PDF文档。签名可以像常规图像一样移动或调整大小。

    使用相机进行电子签名PDF的步骤

    1.打开您需要在预览中登录的PDF文件。 2.点击标记图标(

    55382caf8d4b7c2e3f60552ac6afed96.png

    ),然后签名(

    457161e48a2861b63abe544243bb67b2.png

    )图标。 3.单击创建签名>相机。在白纸上签署您的名字,并保持它对相机可见。预览将绘制一个虚拟签名。单击完成。 4.单击创建的签名,将其插入PDF文档。签名可以像常规图像一样移动或调整大小。

    提示

    • 如果使用触控板创建电子签名,建议您先查看“预览”,然后用手指缓慢平稳地移动以获得最佳效果。为了获得更精确的签名,您可以使用iPhone或iPad手写笔(最好是带有细头的手写笔)在触控板上绘制签名。
    • 签署一张白纸并将其拿在相机上是在Preview中创建电子签名的最简单方法,尽管这种方法并不总是能产生最佳效果。当您将签名按住Mac的相机时,签名将显示为倒置,但是预览会自动确保从左到右正确读取。
    • 即使没有打开PDF文档,也可以按照上述步骤在“预览”中创建电子签名。默认情况下,您创建的所有电子签名都会自动存储在“预览”列表中,这样您就可以将它们插入以后的PDF文档和其他文件中,而无需重复这些步骤。预览可以一次存储多个签名。
    • 苹果还在macOS的Mail应用程序中提供了标记工具,以创建可以直接插入您的电子邮件中的电子签名。

    以上就是MacW小编为大家带来的“如何在Mac上使用预览对PDF进行电子签名”,希望小伙伴们会喜欢!

    展开全文
  • 在PDF文件指定文字位置添加电子签名图片 文章目录在PDF文件指定文字位置添加电子签名图片一、技术使用背景二、使用步骤1.引入依赖2.具体代码2.控制台输出2.生成结果展示总结 一、技术使用背景 一些PDF文件会有...

    使用itext7在PDF文件中的指定文字位置添加电子签名图片


    一、技术使用背景

    在一些PDF文件会有负责人签名、董事签名等签名处需要插入电子签章或者签名,所以将此技术点记录下来,其中也不乏有对其他博主技术的借用,请勿喷。

    二、使用步骤

    1.引入依赖

    此次使用的是itext7,pom文件中引入依赖:

            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext7-core</artifactId>
                <version>7.1.12</version>
                <type>pom</type>
            </dependency>
    

    2.具体代码

    代码如下:

    package cn.basicproject.basics8.imginPDF;
    
    import com.itextpdf.io.image.ImageData;
    import com.itextpdf.io.image.ImageDataFactory;
    import com.itextpdf.kernel.geom.Rectangle;
    import com.itextpdf.kernel.pdf.PdfDocument;
    import com.itextpdf.kernel.pdf.PdfReader;
    import com.itextpdf.kernel.pdf.PdfWriter;
    import com.itextpdf.kernel.pdf.canvas.parser.PdfDocumentContentParser;
    import com.itextpdf.kernel.pdf.canvas.parser.listener.IPdfTextLocation;
    import com.itextpdf.kernel.pdf.canvas.parser.listener.RegexBasedLocationExtractionStrategy;
    import com.itextpdf.layout.Document;
    import com.itextpdf.layout.element.Image;
    import java.util.Collection;
    
    public class ImageInPDF {
        public static void main(String args[]) {
            String input = "D:\\Java.pdf";
            //通过指定pdf文件名,指定关键字,和指定的pdf文件的待处理页数做参数
            getKeyWordsLocation(input, "负责人签名:", 1);
        }
    
        /**
         * 得到关键字位置
         * @param input 源文件
         * @param KEY_WORD 关键字
         * @param pageNum 文档页数
         */
        public static void getKeyWordsLocation(String input, String KEY_WORD, int pageNum) {
            RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(KEY_WORD);
            try {
                //得到需要插入的图片
                ImageData imageData = ImageDataFactory.create("D:\\test.jpg");
                //核心思路为对PdfDocument对象采用某种Strategy,这里使用RegexBasedLocationExtractionStrategy
                PdfReader pr = new PdfReader(input);
                //生成新的PDF文件
                PdfDocument pd = new PdfDocument(pr, new PdfWriter("D:\\test.pdf"));
                //int pageNum = pd.getNumberOfPages();获取新pdf的总页数
                Document document = new Document(pd);
                PdfDocumentContentParser pdcp = new PdfDocumentContentParser(pd);
                //文本内容具体解析借助使用PdfDocumentContentParser类(实质使用PdfCanvasProcessor进行处理), 对待处理页面装配合适策略
                RegexBasedLocationExtractionStrategy regexStrategy = pdcp.processContent(pageNum, strategy);
                //获取处理结果
                Collection<IPdfTextLocation> resultantLocations = strategy.getResultantLocations();
                //自定义结果处理
                if (!resultantLocations.isEmpty()) {
                    for (IPdfTextLocation item : resultantLocations) {
                        Rectangle boundRectangle = item.getRectangle();
                        System.out.println(item.getText());
                        System.out.println("关键字“" + KEY_WORD + "” 的坐标为 x: " + boundRectangle.getX() + "  ,y: " + boundRectangle.getY());
                        Image image = new Image(imageData).scaleAbsolute(70, 40).setFixedPosition(pageNum, boundRectangle.getRight() + 5f, boundRectangle.getBottom());
                        document.add(image);
                    }
                    document.close();
                } else {
                    System.out.println("结果为空");
                }
                pr.close();
                pd.close();
            } catch (Exception e) {
                System.err.println("读取文件失败!");
                e.printStackTrace();
            }
        }
    }
    
    

    2.控制台输出

    代码如下:

    "C:\Program Files\Java\jdk1.8.0_151\bin\java.exe" "-
    负责人签名:
    关键字“负责人签名:” 的坐标为 x: 321.31  ,y: 378.48105
    
    Process finished with exit code 0
    

    补充:为了方便就做这些展示,有兴趣的可以多打点展示一下自己跑出来的信息。

    2.生成结果展示

    PDF生成后效果截图如下:


    在这里插入图片描述


    注意:仅做展示用

    总结

    此次纪录就是为了收集开发过程中遇到的技术点,如果对你有帮助,拿走不谢。如有更好的方法请在评论区写上链接,谢谢!

    展开全文
  • 电子签名在欧洲各地都得到认可(由于某些无聊的法律细节,现在还不完全正确 ,但无论如何)。 因此,用例是什么-首先,您必须使用数字签名对PDF进行电子签名(法律术语为“电子签名”,因此尽管它们不完全...
  • pdf文件,添加电子签名和合同印章。java项目本地导入即可使用
  • 无纸化、文档签字盖章从线下转到线上,离不开一个很重要的技术,那就是用数字证书对PDF进行电子签名。 福昕作为国产PDF阅读器的领头羊,也是支持使用PDF证书签名的。今天,就来跟大家分享一下,该如何使用福昕PDF...
  • 如不添加时间戳,PDF电子签名默认使用的是计算机本地时间。 (三)使用Adobe Acobat软件对PDF文档进行电子签名 配置好时间戳后,我们就可以对文档进行数字签名了,签名步骤及签好后的文档图片如下: ①选择签名...
  • htmljs实现电子签名 C#将PDF文件放在html页面进行修改并保存 我们公司最近给了个新需求,研发的图纸跟着单子一起审核,并图纸PDF上进行签名,走线上流程。这就需要在线编辑PDF了,网上有一些插件都需要付费给...
  • 文件有时候需要签名的时候,上司没公司的时候又是个急件这个时候我们就需要使用电子档的签名文件,那么如何给PDF文件添加数字签名呢?今天就为大家分享PDF文件的设置签名的方法,想知道的小伙伴们就一起来看看吧!...
  • 我们日常办公时,会经常对PDF文件进行签名操作,那么如何更快更高效的添加手写签名呢? 方法一: WPS2019中打开一个需要签名PDF文件,窗口上方菜单栏【插入】中选择【PDF签名】,届时我们可以通过三种方式...
  • I am trying to sign PDF documents with Python and found something called MyPDFSigner.It is well documented, however I found the documentation a bit confusing.The only problem I am having is on how to ...
  • 以下是针对解决电子签名不显示的pdf预览的方案: 将pdfjs相关源码下载后,拷贝至项目目录下,如src/asssets, 另外需要修改 pdf.worker.js中代码,将以下代码注释: if (data.fieldType === 'Sig') { _this2....
  • 批量给PDF添加签名(水印,图片),然后用同样的名字保存 原理: 先用word新建大小一样的空白文档,把签名图片放进你想要的位置,另存为sign.PDF 利用PyPDF2里面的PDF合成方法,把原PDF与你的sign.PDF合成保存,以...
  • 如何在PDF文档中添加手写签名

    千次阅读 2020-08-25 16:45:33
    这里我们需要用到PDF编辑器,比如用极速PDF编辑器打开需要添加图章的文档,在添加之前我们需要先将上一步中保存的图片签名转成PDF格式,直接将图片拖入极速PDF编辑器中保存一下即为PDF格式。 接着电脑桌面新建一
  • 软件可以实现给 word excel pdf 等可以打印的文档 转成图片 或 PDF 文件,并且可以添加盖章和个人签名 支持win7 64 位
  • iText PDF加密签名.zip

    2020-03-07 15:54:22
    大家一起学习,一起讨论,怎么把电子章系统做出来,一起加油,最近做这个项目,必须需要50个字啊。。。。。
  • 怎么给PDF添加数字签名

    千次阅读 2019-06-28 16:55:11
    现在有了PDF文档签名证书,,其强大的安全性、来源的可靠性以及不可被随意纂改的特点,让机密文件通过网络传递传阅时有了更安全的保障,使得政府、企事业单位之间能方便、安全和可靠地实现PDF电子文件交换、电子...
  • 电子签名通俗来说就是通过技术手段实现电子文档上加载电子形式的签名,其作用类似于纸质合同上的手写签名或盖的公章。虽然电子签名多年来合法性一直遭到质疑,但其企业工作流审批、请柬、单据保全等场景应用...
  • 小程序 uniapp 实现pdf 电子合同签名 并导出功能

    千次阅读 热门讨论 2020-12-04 17:16:00
    小程序 uniapp 实现pdf 电子合同签名 并导出功能 需求流程: 用户只允许上传pdf ...位置设置完成,将电子签名放到设定的位置处 利用canvas将两张图片合成一张图片,保存至相册 实操 代码实现: ...
  • 在pdf中增加签名

    千次阅读 2012-12-07 19:04:37
    最近找工作,经常是发的offer是电子版的,需要你上面签名。一般是先把offer letter打印出来,再签名,再扫描,感觉这样好麻烦,作为一个学计算机的,应该多用现成的工具,自食其力。 莫非就是用ps,但是本人对ps...
  • PDF格式保存的电子交易文件或合同,即使具有数字签名,仍然不能完全保证该...这篇将介绍如何使用.NET PDF组件Spire.PDF for .NETC#应用程序中给PDF文档添加数字签名并打上时间戳(注意这里的时间戳必须符合RFC ...
  • 原文:https://juejin.cn/post/6901273585428463624前言电子签名通俗来说就是通过技术手段实现电子文档上加载电子形式的签名,其作用类似于纸质合同上的...

空空如也

空空如也

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

如何在pdf添加电子签名