-
2021-12-01 10:45:15
itextpdf 数字签名
**************
相关类与接口
PdfSingner
public class PdfSigner { public static final int NOT_CERTIFIED = 0; public static final int CERTIFIED_NO_CHANGES_ALLOWED = 1; public static final int CERTIFIED_FORM_FILLING = 2; public static final int CERTIFIED_FORM_FILLING_AND_ANNOTATIONS = 3; protected int certificationLevel; protected String fieldName; protected RandomAccessFile raf; protected byte[] bout; protected long[] range; protected PdfDocument document; protected PdfSignature cryptoDictionary; private PdfName digestMethod; protected PdfSigner.ISignatureEvent signatureEvent; protected OutputStream originalOS; protected ByteArrayOutputStream temporaryOS; protected File tempFile; protected Map<PdfName, PdfLiteral> exclusionLocations; protected boolean preClosed; protected PdfSigFieldLock fieldLock; protected PdfSignatureAppearance appearance; protected Calendar signDate; protected boolean closed; ******** 构造方法 public PdfSigner(PdfReader reader, OutputStream outputStream, StampingProperties properties) throws IOException { public PdfSigner(PdfReader reader, OutputStream outputStream, String path, StampingProperties properties) throws IOException { ******** 其他方法 public void setFieldName(String fieldName) { public void setSignDate(Calendar signDate) { public void setFieldLockDict(PdfSigFieldLock fieldLock) { public void setCertificationLevel(int certificationLevel) { public void setOriginalOutputStream(OutputStream originalOS) { public void setSignatureEvent(PdfSigner.ISignatureEvent signatureEvent) { public String getFieldName() { public Calendar getSignDate() { public PdfDocument getDocument() { public int getCertificationLevel() { public String getNewSigFieldName() { public PdfSigFieldLock getFieldLockDict() { public PdfSignature getSignatureDictionary() { public PdfSigner.ISignatureEvent getSignatureEvent() { public PdfSignatureAppearance getSignatureAppearance() { public void signDetached(IExternalDigest externalDigest, IExternalSignature externalSignature, Certificate[] chain, Collection<ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, PdfSigner.CryptoStandard sigtype) throws IOException, GeneralSecurityException { public void signDetached(IExternalDigest externalDigest, IExternalSignature externalSignature, Certificate[] chain, Collection<ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, PdfSigner.CryptoStandard sigtype, SignaturePolicyInfo signaturePolicy) throws IOException, GeneralSecurityException { public void signDetached(IExternalDigest externalDigest, IExternalSignature externalSignature, Certificate[] chain, Collection<ICrlClient> crlList, IOcspClient ocspClient, ITSAClient tsaClient, int estimatedSize, PdfSigner.CryptoStandard sigtype, SignaturePolicyIdentifier signaturePolicy) throws IOException, GeneralSecurityException { //签名方法 public void signExternalContainer(IExternalSignatureContainer externalSignatureContainer, int estimatedSize) throws GeneralSecurityException, IOException { public static void signDeferred(PdfDocument document, String fieldName, OutputStream outs, IExternalSignatureContainer externalSignatureContainer) throws IOException, GeneralSecurityException { public void timestamp(ITSAClient tsa, String signatureName) throws IOException, GeneralSecurityException { protected boolean isPreClosed() { protected void addDocMDP(PdfSignature crypto) { protected void setDocument(PdfDocument document) { protected InputStream getRangeStream() throws IOException { protected int getWidgetPageNumber(PdfWidgetAnnotation widget) { protected Rectangle getWidgetRectangle(PdfWidgetAnnotation widget) { protected boolean documentContainsCertificationOrApprovalSignatures() { protected void addDeveloperExtension(PdfDeveloperExtension extension) { protected IRandomAccessSource getUnderlyingSource() throws IOException { protected void addFieldMDP(PdfSignature crypto, PdfSigFieldLock fieldLock) { protected void preClose(Map<PdfName, Integer> exclusionSizes) throws IOException { protected PdfSigFieldLock populateExistingSignatureFormField(PdfAcroForm acroForm) throws IOException { protected PdfDocument initDocument(PdfReader reader, PdfWriter writer, StampingProperties properties) { protected Collection<byte[]> processCrl(Certificate cert, Collection<ICrlClient> crlList) { protected PdfSigFieldLock createNewSignatureFormField(PdfAcroForm acroForm, String name) throws IOException { private void setDigestParamToSigRefIfNeeded(PdfDictionary reference) { private PdfName getHashAlgorithmNameInCompatibleForPdfForm(String hashAlgorithm) { private boolean isDocumentPdf2() { private static StampingProperties initStampingProperties(boolean append) { ******** 内部接口:ISignatureEvent public interface ISignatureEvent { void getSignatureDictionary(PdfSignature var1); } ******** 内部枚举:CryptoStandard public static enum CryptoStandard { CMS, CADES; private CryptoStandard() { } } }
StampingProperties
public class StampingProperties extends DocumentProperties { protected boolean appendMode = false; protected boolean preserveEncryption = false; public StampingProperties() { } public StampingProperties(StampingProperties other) { super(other); this.appendMode = other.appendMode; this.preserveEncryption = other.preserveEncryption; } public StampingProperties useAppendMode() { this.appendMode = true; return this; } public StampingProperties preserveEncryption() { this.preserveEncryption = true; return this; } }
DocumentProperties
public class DocumentProperties { protected IMetaInfo metaInfo = null; public DocumentProperties() { } public DocumentProperties(DocumentProperties other) { this.metaInfo = other.metaInfo; } public DocumentProperties setEventCountingMetaInfo(IMetaInfo metaInfo) { this.metaInfo = metaInfo; return this; } }
PdfSignatureAppearance
public class PdfSignatureAppearance { private static final float TOP_SECTION = 0.3F; private static final float MARGIN = 2.0F; private PdfDocument document; private int page = 1; private Rectangle rect; private Rectangle pageRect; private PdfFormXObject n0; private PdfFormXObject n2; private PdfFormXObject topLayer; private PdfSignatureAppearance.RenderingMode renderingMode; private String reason; private String reasonCaption; private String location; private String locationCaption; private String signatureCreator; private String contact; private Calendar signDate; private Certificate signCertificate; private ImageData signatureGraphic; private ImageData image; private float imageScale; private String layer2Text; private PdfFont layer2Font; private float layer2FontSize; private Color layer2FontColor; private String fieldName; private boolean reuseAppearance; ******** 构造方法 protected PdfSignatureAppearance(PdfDocument document, Rectangle pageRect, int pageNumber) { ******** 其他方法 public PdfSignatureAppearance setReason(String reason) { public PdfSignatureAppearance setImage(ImageData image) { public PdfSignatureAppearance setLayer2Text(String text) { public PdfSignatureAppearance setContact(String contact) { public PdfSignatureAppearance setLocation(String location) { public PdfSignatureAppearance setPageNumber(int pageNumber) { public PdfSignatureAppearance setLayer2FontColor(Color color) { public PdfSignatureAppearance setPageRect(Rectangle pageRect) { public PdfSignatureAppearance setImageScale(float imageScale) { public PdfSignatureAppearance setLayer2Font(PdfFont layer2Font) { public PdfSignatureAppearance setLayer2FontSize(float fontSize) { public PdfSignatureAppearance setReasonCaption(String reasonCaption) { public PdfSignatureAppearance setLocationCaption(String locationCaption) { public PdfSignatureAppearance setReuseAppearance(boolean reuseAppearance) { public PdfSignatureAppearance setCertificate(Certificate signCertificate) { public PdfSignatureAppearance setSignatureCreator(String signatureCreator) { public PdfSignatureAppearance setSignatureGraphic(ImageData signatureGraphic) { public PdfSignatureAppearance setRenderingMode(PdfSignatureAppearance.RenderingMode renderingMode) { public String getReason() { public String getContact() { public int getPageNumber() { public String getLocation() { public ImageData getImage() { public float getImageScale() { public boolean isInvisible() { public String getLayer2Text() { public PdfFont getLayer2Font() { public Rectangle getPageRect() { public float getLayer2FontSize() { public Color getLayer2FontColor() { public PdfFormXObject getLayer0() { public PdfFormXObject getLayer2() { public String getSignatureCreator() { public Certificate getCertificate() { public ImageData getSignatureGraphic() { public PdfSignatureAppearance.RenderingMode getRenderingMode() { protected PdfFormXObject getAppearance() throws IOException { protected Calendar getSignDate() { protected PdfSignatureAppearance setSignDate(Calendar signDate) { protected PdfSignatureAppearance setFieldName(String fieldName) { private static Rectangle rotateRectangle(Rectangle rect, int angle) { private void createBlankN0() { private void addTextToCanvas(String text, PdfFont font, Rectangle dataRect) { private void applyCopyFittingFontSize(Paragraph paragraph, Rectangle rect, IRenderer parentRenderer) { String generateLayer2Text() { ******** 内部枚举:RenderingMode public static enum RenderingMode { DESCRIPTION, NAME_AND_DESCRIPTION, GRAPHIC_AND_DESCRIPTION, GRAPHIC; private RenderingMode() { } } }
IExternalDigest
public interface IExternalDigest { MessageDigest getMessageDigest(String var1) throws GeneralSecurityException; }
ProviderDigest
public class ProviderDigest implements IExternalDigest { private String provider; public ProviderDigest(String provider) { this.provider = provider; } public MessageDigest getMessageDigest(String hashAlgorithm) throws GeneralSecurityException { return DigestAlgorithms.getMessageDigest(hashAlgorithm, this.provider); } }
BouncyCastleDigest
public class BouncyCastleDigest implements IExternalDigest { public BouncyCastleDigest() { } public MessageDigest getMessageDigest(String hashAlgorithm) throws GeneralSecurityException {
IExternalSignature
public interface IExternalSignature { String getHashAlgorithm(); String getEncryptionAlgorithm(); byte[] sign(byte[] var1) throws GeneralSecurityException; }
PrivateKeySignature
public class PrivateKeySignature implements IExternalSignature { private PrivateKey pk; private String hashAlgorithm; private String encryptionAlgorithm; private String provider; public PrivateKeySignature(PrivateKey pk, String hashAlgorithm, String provider) { public String getHashAlgorithm() { public String getEncryptionAlgorithm() { public byte[] sign(byte[] message) throws GeneralSecurityException {
**************
生成p12证书
keytool 命令参数
[root@centos keytool]# keytool -h 密钥和证书管理工具 命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书 -genkeypair 生成密钥对 -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链 -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令 -showinfo 显示安全相关信息
keytool -genkeypair:生成密钥对
[root@centos keytool]# keytool -genkeypair -h keytool -genkeypair [OPTION]... 生成密钥对 选项: -alias <alias> 要处理的条目的别名 -keyalg <alg> 密钥算法名称 -keysize <size> 密钥位大小 -groupname <name> 组名。例如,椭圆曲线名称。 -sigalg <alg> 签名算法名称 -dname <name> 唯一判别名 -startdate <date> 证书有效期开始日期/时间 -ext <value> X.509 扩展 -validity <days> 有效天数 -keypass <arg> 密钥口令 -keystore <keystore> 密钥库名称 -storepass <arg> 密钥库口令 -storetype <type> 密钥库类型 -providername <name> 提供方名称 -addprovider <name> 按名称 (例如 SunPKCS11) 添加安全提供方 [-providerarg <arg>] 配置 -addprovider 的参数 -providerclass <class> 按全限定类名添加安全提供方 [-providerarg <arg>] 配置 -providerclass 的参数 -providerpath <list> 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
keytool -importkeystore:导入密钥库,转换生成p12证书
[root@centos keytool]# keytool -importkeystore -h keytool -importkeystore [OPTION]... 从其他密钥库导入一个或所有条目 选项: -srckeystore <keystore> 源密钥库名称 -destkeystore <keystore> 目标密钥库名称 -srcstoretype <type> 源密钥库类型 -deststoretype <type> 目标密钥库类型 -srcstorepass <arg> 源密钥库口令 -deststorepass <arg> 目标密钥库口令 -srcprotected 受保护的源密钥库口令 -destprotected 受保护的目标密钥库口令 -srcprovidername <name> 源密钥库提供方名称 -destprovidername <name> 目标密钥库提供方名称 -srcalias <alias> 源别名 -destalias <alias> 目标别名 -srckeypass <arg> 源密钥口令 -destkeypass <arg> 目标密钥口令 -noprompt 不提示 -addprovider <name> 按名称 (例如 SunPKCS11) 添加安全提供方 [-providerarg <arg>] 配置 -addprovider 的参数 -providerclass <class> 按全限定类名添加安全提供方 [-providerarg <arg>] 配置 -providerclass 的参数 -providerpath <list> 提供方类路径 -v 详细输出
示例:生成p12证书
# 生成签名证书(keystore) [root@centos keytool]# keytool -genkeypair -alias serverkey \ > -keypass 123456 -storepass 123456 \ > -dname "C=CN,ST=SD,L=QD,O=ali,OU=dev,CN=li" \ > -keyalg RSA -keysize 2048 -validity 3650 \ > -keystore ./cert.keystore 正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650 天): C=CN, ST=SD, L=QD, O=ali, OU=dev, CN=li # 生成p12证书 [root@centos keytool]# keytool -importkeystore \ > -srckeystore ./cert.keystore -destkeystore ./cert.p12 \ > -srcstorepass 123456 -deststorepass 123456 -noprompt \ > -srcalias serverkey -destalias serverkey \ > -srcstoretype jks -deststoretype pkcs12 \ > ; 正在将密钥库 ./cert.keystore 导入到 ./cert.p12... # 查看生成的证书 [root@centos keytool]# % ls cert* cert.keystore cert.p12
**************
示例
public class Test3 { public static final String src = "./signature/1.pdf"; //待签名的pdf文件 public static final String cert = "./signature/cert.p12"; //使用上面生成的p12证书 public static final String img = "./signature/sign.jpg"; //签名图章 private static final String dest = "./signature/sign.pdf"; //签名后的pdf文件 public static void fun() throws Exception { PdfSigner pdfSigner = new PdfSigner(new PdfReader(src), new FileOutputStream(dest), new StampingProperties()); pdfSigner.setCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); pdfSigner.setFieldName("signature"); PdfSignatureAppearance signatureAppearance = pdfSigner.getSignatureAppearance(); signatureAppearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); signatureAppearance.setReason(""); signatureAppearance.setLocationCaption(""); ImageData image = ImageDataFactory.create(img); signatureAppearance.setSignatureGraphic(image); signatureAppearance.setPageNumber(1); signatureAppearance.setPageRect(new Rectangle(300, 600, 100, 100)); char[] password = "123456".toCharArray(); IExternalSignature pks = getPrivateKeySignature(password); Certificate[] chain = getCertificateChain(password); pdfSigner.signDetached(new BouncyCastleDigest(), pks,chain,null, null, null, 0, PdfSigner.CryptoStandard.CMS); } private static PrivateKeySignature getPrivateKeySignature(char[] password) throws Exception { PrivateKey pk = null; KeyStore p12 = KeyStore.getInstance("pkcs12"); p12.load(new FileInputStream(cert), password); Enumeration<String> aliases = p12.aliases(); while (aliases.hasMoreElements()) { String alias = aliases.nextElement(); if (p12.isKeyEntry(alias)) { pk = (PrivateKey) p12.getKey(alias, password); break; } } Security.addProvider(new BouncyCastleProvider()); return new PrivateKeySignature(pk, DigestAlgorithms.SHA512, BouncyCastleProvider.PROVIDER_NAME); } private static Certificate[] getCertificateChain(char[] password) throws Exception { Certificate[] certChain = null; KeyStore p12 = KeyStore.getInstance("pkcs12"); p12.load(new FileInputStream(cert), password); Enumeration<String> aliases = p12.aliases(); while (aliases.hasMoreElements()) { String alias = aliases.nextElement(); if (p12.isKeyEntry(alias)) { certChain = p12.getCertificateChain(alias); break; } } return certChain; } public static void main(String[] args) throws Exception { fun(); } }
源文件:1.pdf
数字签名后的文件:sign.pdf
更多相关内容 -
PDF如何删除数字签名?删除PDF数字签名这一招就够了
2019-10-21 11:41:26其实数字签名是可以删掉的,今天小编就来为大家介绍删除PDF数字签名的方法,一起来看: 删除工具:迅捷PDF编辑器 具体的操作方法: 1:打开PDF编辑器,点击【打开】按钮,选择添加需要删除数字签名的PDF文件即可。 ...PDF如何删除数字签名?大家在使用PDF的过程中应该有发现有些PDF文件中会有签名,有文字签名也会有数字签名,有时候这些不必要的签名可能会影响到自己对文件的评估。
其实数字签名是可以删掉的,今天小编就来为大家介绍删除PDF数字签名的方法,一起来看:
删除工具:迅捷PDF编辑器
具体的操作方法:
1:打开PDF编辑器,点击【打开】按钮,选择添加需要删除数字签名的PDF文件即可。
2:之后找到菜单栏中的【文档】栏目,点击选择文档下的【数字签名】,然后会出现删除签名的选择哦,直接点击就可以了,这样数字签名就被删除了。
其实删除PDF数字签名还是挺简单的,选了合适的工具之后只需要点击一个清除的按钮就可以搞定了,如果你有这方面的需要的话可以去尝试操作一下。
删除PDF数字签名的方法介绍完了,下边是添加数字签名的方法,说不定哪天会用上,一起学习吧:
1:同样点击【文档】选项,选择【数字签名】功能,之后点击选择【签名文档】的功能就可以进入操作页面。
2:这时候页面会出现一个选框,将需要签名的地方框起来,然后就可以开始添加签名啦。
3:我们在弹出的窗口中进行签名的设置,我们可以为文件选择证书,设置完成就可以创建证书啦。
4:还可以设置签名的详细信息和外观,我们根据自己的需要来进行设置就可以了。
5:最后点击【确定】按钮,签名就添加成功啦。
删除PDF数字签名的方法就在这里了,有需要的朋友赶紧收藏起来,里面还介绍了添加数字签名的功能,说不定哪天你就能用上了,学会之后以备不时之需! -
Java PDF 数字签名(四)——删除PDF中的数字签名
2021-05-26 13:47:00本文通过Java程序示例代码展示如何来删除PDF文档中已有的数字签名。通过本文中的方法,在编辑代码前,须将free spire.pdf.jar 4.4.1文件导入java程序,如图所示为手动下载jar包然后解压导入程序的效果: 另外,也...本文通过Java程序示例代码展示如何来删除PDF文档中已有的数字签名。通过本文中的方法,在编辑代码前,须将free spire.pdf.jar 4.4.1文件导入java程序,如图所示为手动下载jar包然后解压导入程序的效果:
另外,也可以通过maven仓库下载导入,通过这种方式需在pom.xml文件中配置maven仓库路径并指定jar版本(如下),配置完成后导入。
<repositories> <repository> <id>com.e-iceblue</id> <url>http://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId> e-iceblue </groupId> <artifactId>spire.pdf.free</artifactId> <version>4.4.1</version> </dependency> </dependencies>
Java代码示例
import com.spire.pdf.PdfDocument; import com.spire.pdf.widget.PdfFieldWidget; import com.spire.pdf.widget.PdfFormWidget; import com.spire.pdf.widget.PdfSignatureFieldWidget; public class DeleteSignature { public static void main(String[] args) { //创建PdfDocument对象 PdfDocument pdf = new PdfDocument(); //加载PDF文档 pdf.loadFromFile("AddSignature.pdf"); //从文档获取form widget集合 PdfFormWidget widgets = (PdfFormWidget) pdf.getForm(); //遍历集合中的每一个元素 for (int i = 0; i < widgets.getFieldsWidget().getList().size(); i++) { //获取指定widget PdfFieldWidget widget = (PdfFieldWidget)widgets.getFieldsWidget().getList().get(i); //判断widget是否为PdfSignatureFieldWidget if (widget instanceof PdfSignatureFieldWidget) { //删除数字签名widget widgets.getFieldsWidget().remove(widget); } } //保存文档 pdf.saveToFile("RemoveSignature.pdf"); pdf.dispose(); } }
签名删除小效果:
相关文章推荐阅读:
本文内容原创,如需转载请务必注明出处!
-
PDF如何删除数字签名
2019-05-15 14:09:55大家在使用PDF文件的时候,不知道有没有注意到,在PDF文件中有时文件中有签名,有签名,也有数字签名,PDF文件在修改时需要借助到PDF编辑器,那么,怎么将文件中的数字签名进行删除呢,小编为大家整理了方法,一起看...大家在使用PDF文件的时候,不知道有没有注意到,在PDF文件中有时文件中有签名,有签名,也有数字签名,PDF文件在修改时需要借助到PDF编辑器,那么,怎么将文件中的数字签名进行删除呢,小编为大家整理了方法,一起看看吧。
使用工具:PDF编辑工具http://bianji.xjpdf.com/
1.修改PDF文件之前,需要将PDF文件在编辑器中打开,选择打开工具,然后选择需要修改的文件,点击确定就可以将其打开。
2.文件打开后,删除签名,首先,需要先找到签名工具,点击菜单栏中的文档选项,然后在文档选项中有签名与缩写以及数字签名工具。
3.先点击签名与缩写工具,如果是在这个工具中添加的签名,点击签名与缩写工具后,选择工具中的管理选项,点击管理。
4.点击管理选项后,在工具栏中有添加,编辑,删除以及删除所有,而工具栏的下面会显示文件中的签名,选中签名,点击工具栏中的删除或者是选择删除所有选项即可删除。
5.而数字签名的删除就很简单了,点击文档选项,然后选择文档选项中的数字签名工具,点击清除所有签名就可以了哦。
签名的删除,在签名工具中有添加就可以将其删除,方法小编已经整理好了,小伙伴们可以对照上面的文章进行操作。有什么不明白的地方再询问小编。
-
PDF密码签名去除方法及工具
2018-08-11 11:35:17很多网上的PDF说明文档都加了口令和签名防止文档被非法篡改和复制,文本提供亲测有效一个去处PDF文档签名和口令的方法,仅限于学习和非商业通途★★★★★声明: 请勿使用本文介绍的方法做任何违规违法的事情,若发生... -
C#/VB.NET 给Excel添加、删除数字签名的方法
2020-12-16 21:27:27以下内容通过C#及VB.NET代介绍如何给Excel文档添加数字签名,以及删除Excel文档中已有的数字签名。工具使用最近发布的Spire.XLS for .NET 版本10.11.2,可在官网下载包,或者通过Nuget搜索下载;编辑代码前,注意先... -
技巧分享 PDF如何删除数字签名
2019-03-21 15:52:32大家在使用PDF文件的时候,不知道有没有注意到,在PDF文件中有时文件中有签名,有签名,也有数字签名,PDF文件在修改时需要借助到PDF编辑器,那么,怎么将文件中的数字签名进行删除呢,小编为大家整理了方法,一起看... -
itextpdf 提取数字签名签章图片
2022-04-26 22:38:17itextpdf 提取数字签名签章图片 因业务需求,需要对签名的pdf进行签名验证,政府的电子验证的功能是除了提取pdf表单内容外,还可以提取签章的图片,研究了好久,特此记录一下。 /** * 获取pdf签名图片信息 * @... -
itext 给pdf文件签名
2019-08-03 01:16:51NULL 博文链接:https://swordshadow.iteye.com/blog/1980063 -
Java 获取PDF中的数字签名信息
2021-02-26 12:10:28本文以Java代码演示如何获取PDF文档中的数字签名信息,包括签名人、签名位置、日期、原因、联系方式、签名在文档中的坐标等等。程序环境包括:Jdk 1.8.0(版本要求>=1.6.0版本即可)IDEA编辑代码前先导入jar到Java... -
PDF文件的数字签名的破解
2019-02-15 21:14:04今天遇到一个PDF,不但加了口令,还用了数字签名。口令很多工具都能对付,但是目前还真没什么工具能去除数字签名。 我先把口令去了,现在可以复制内容,可以打印。但是由于数字签名还在,仍然无法进行修改、注释等... -
java批量去除pdf签名,删除签名图标
2020-09-09 23:33:11接到这样一个需求,现在有大量的pdf文件按需要去除签名,和文件里的签名图标。pdf包含图标等复杂元素,使用了icepdf操作pdf 2.思路 如果单独只是去除签名,直接就能想到pdf转图片,再将图片合成pdf即可,如果有这个... -
PDF格式分析(五十二)Digital Signatures 数字签名
2018-09-25 18:19:36数字签名(PDF 1.3)可用于验证用户的身份和文档的内容。 它在签名时,保存了有关签名者和文档状态的信息。 签名可以是纯数学的,例如公钥/私钥加密文档摘要,或者它可以是生物识别形式的标识,例如手写签名,指纹... -
C# 如何移除PDF文档的数字签名
2016-10-19 16:57:32和密码保护一样,数字签名也是保护PDF文档的一种方式,通常添加了数字签名的PDF文档只能浏览而不能打印和编辑,那如果我们要打印或编辑的话,首先需要做的就是移除文档内的数字签名。本篇文章的目的在于分享如何使用... -
怎样删除pdf文件中需要验证的签名
2020-12-10 22:20:58问题提出: 靠近年底了,要把五六个月以来...含有需要验证的数字签名的pdf文件: 在和其他文件合并到一个pdf文件的时候, 会看到感叹号提示: 可以看到,另外一个文件左上角就没有感叹号标识。 这时候,合并之后的pdf -
PDF怎么编辑签名,PDF如何去除数字签名
2019-04-10 17:04:00小编在前几天使用一个PDF文件的时候遇到文件中添加的有数字签名,由于数字签名在无法对文件进行修改、注释等操作,但是如果使用别的操作工具会使文件中的数据丢失,这个时候就需要一个好的方法来做,小编已经找到了... -
PDF文档加密签名处理
2021-06-08 09:47:10可如果加了数字签名怎么办? 建一个空白页,然后插入有签名的文档,再删除空白页,保存即可。 1.以“管理员身份运行”Office Password Remover 汉化版软件 2.选择要解密的word文件 3.点击,红色部分,破解加密... -
unipdf:Golang PDF库,用于创建和处理PDF文件(pure go)
2021-04-28 02:01:35UniPDF-Go专用的PDF UniPDF是Go(golang)的PDF库,具有创建和读取...数字签名验证和签名 CCITTFaxDecode解码和编码支持 JBIG2解码支持 我们的示例存储库https://github.com/unidoc/unipdf-examples中提供了多个示例。 -
PDF去除数字身份证数字证书的方法
2009-12-15 11:19:07由于个别原创资料采用了的数字签名和数字身份证等PDF的公钥128bit的加密技术,并且提供了加密的公钥数字证书(topsage.pfx),让PDF仅能浏览而不能打印和编辑。此文仅作为把资料打印用途和绿色收藏的目的,讲解PDF... -
java – 替换PDF中的签名内容
2021-03-10 05:46:40当iText使用PDfStamperin正常模式操作文档时,它可以(并且经常)重新排列现有的PDF对象.这显然打破了任何现有集成签名的哈希值.此外,必须签名的字节范围也会发生变化.这很可能是你的问题.当iText使用PDfStamperin追加... -
pdf签名无效解决办法_强大的PDF编辑工具Wondershare PDFelement
2020-10-24 20:39:32Wondershare PDFelement是Macdown集到的一款Mac平台的全功能PDF编辑及转换工具,无论是PDF的格式转换还是PDF文件的编辑处理工作,都能轻松胜任,还具备OCR光学文字识别功能,PDF转换功能包括将PDF文件转换成doc文本... -
java – PDFBox 1.8.10:填充和签名PDF生成无效签名
2021-03-06 04:29:44OP原始问题的原因,即在用PDFBox加载PDF(用于表单填写)然后保存它之后,这个新PDF无法使用PDFBox签名代码成功签名,已在this answer中详细解释过,短:>定期保存文档时,PDFBox使用交叉引用表进行保存.>如果定期... -
用Acrobat无损去除PDF签名
2020-05-09 10:02:40用Acrobat无损去除PDF签名 步骤 先看下有签名的文件。 因为有签名,想在上面进行一些操作都变得很困难。用Acrobat创建一个只有一页的PDF。 点开左边的页面缩略视图,在第一页的缩略视图上右键点击“插入页面”-... -
去除PDF文件的数字签名、密码
2014-10-23 14:55:31没时间看纸质的书,工作需要又不得不学习一下专业知识,看看电子书也不错...2、使用“文档->插入页面”,把有数字签名的文档插入到那一页后面。 3、使用“文档->删除页面”,删除第一页,然后保存文档。 -
pdf签名无效解决办法_我花了一整天测试了20+款PDF工具,进来评评谁是MVP
2020-10-20 05:12:46之前有小伙伴问我有没有好用的PDF阅读器推荐?所以今天我把市场上知名度较高的PDF阅读器全部测试了一遍,挑出几款我认为好用的分享给大家。看完本文PDF的阅读、批注、编辑、转换、压缩、合并、水印等等各种操作你都... -
PDF页面删除修改裁切工具
2019-12-28 13:17:13PDF-XChange Editor。专注于PDF电子文档的编辑功能,体积小巧,速度飞快,界面友好,打开PDF文件速度快,具备丰富的配置和功能选项,可以帮助您快速...支持创建,查看,编辑,注释,OCR识别和数字签名PDF文件等等功能。 -
PDF编辑方法,PDF如何去除数字签名
2019-03-27 16:23:37有些人会在PDF文件中添加数字签名,但当PDF文件有数字签名的时候就无法对PDF文件进行编辑、添加等操作。这个时候就需要去除PDF文件中的数字签名了,要怎么做呢,就由我来跟大家分享一下小编我的去除数字签名的PDF...