Extrair informações da assinatura de PDF em Python
Extrair Imagem de um Campo de Assinatura
Aspose.PDF for Python via .NET permite que você recupere a imagem visual incorporada em um Campo de Assinatura. Isto é útil quando você precisa exibir ou arquivar a aparência da assinatura sem renderizar o PDF completo.
O exemplo abaixo itera sobre todos os campos de formulário, encontra cada SignatureField, e salva sua imagem como um arquivo JPEG:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def extract_images_from_signature_field(infile: str, outfile: str) -> None:
"""Extract the image stored in a signature field."""
with ap.Document(infile) as document:
for field in document.form:
if not isinstance(field, ap.forms.SignatureField):
continue
image_stream = field.extract_image()
if image_stream is None:
continue
image = drawing.Bitmap.from_stream(image_stream)
image.save(outfile, drawing.imaging.ImageFormat.jpeg)
Ler detalhes do algoritmo de assinatura
Usar PdfFileSignature.get_signatures_info() para ler metadados criptográficos de cada assinatura em um documento — incluindo o algoritmo de digestão, o tipo de algoritmo, o padrão criptográfico e o nome da assinatura:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def get_signatures_info(infile: str) -> None:
"""Print information about all signatures in a PDF document."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature(document) as signature:
for signature_info in signature.get_signatures_info():
print(signature_info.DIGEST_HASH_ALGORITHM)
print(signature_info.ALGORITHM_TYPE)
print(signature_info.CRYPTOGRAPHIC_STANDARD)
print(signature_info.signature_name)
Extrair um Certificado Digital de um Campo de Assinatura
Use o extract_certificate método em um SignatureField para recuperar o certificado incorporado como um fluxo de bytes e salvá-lo no disco para validação externa:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def extract_certificate(infile: str, outfile: str) -> None:
"""Extract a certificate from a signature field and save it to disk."""
with ap.Document(infile, password="owner") as document:
for field in document.form:
if not isinstance(field, ap.forms.SignatureField):
continue
certificate_stream = field.extract_certificate()
if certificate_stream is None:
continue
with certificate_stream:
bytes_data = bytearray(certificate_stream.length)
certificate_stream.read(bytes_data, 0, len(bytes_data))
with open(outfile, "wb") as file_stream:
file_stream.write(bytes_data)
return
Extrair Certificados Usando a Fachada PdfFileSignature
PdfFileSignature.try_extract_certificate() fornece uma maneira alternativa de recuperar certificados pelo nome da assinatura. O exemplo a seguir itera sobre todos os nomes de assinatura e tenta a extração para cada um:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def extract_certificate_try_extract_certificate_method(infile: str) -> None:
"""Extract certificates with the try_extract_certificate facade method."""
with ap.Document(infile, password="owner") as document:
with ap.facades.PdfFileSignature(document) as signature:
for signature_name in signature.get_signature_names(True):
certificate = []
if signature.try_extract_certificate(signature_name, certificate):
print("The certificate extraction succeeded")
Verificar Assinaturas Digitais Externas
Para confirmar que um documento não foi modificado após a assinatura, verifique cada assinatura externa usando PdfFileSignature.verify_signature(). O exemplo abaixo gera uma exceção para qualquer assinatura que falhar na verificação:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def verify_external_signature(infile: str) -> None:
"""Verify an external signature in a PDF document."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature(document) as pdf_signature:
for signature_name in pdf_signature.get_signature_names(True):
if not pdf_signature.verify_signature(signature_name):
raise Exception("Not verified")
Detectar assinaturas comprometidas
SignaturesCompromiseDetector verifica se alguma assinatura digital em um documento foi invalidada por alterações subsequentes. Use isso em fluxos de trabalho jurídicos, financeiros ou de conformidade onde a integridade do documento deve ser garantida.
O exemplo abaixo verifica assinaturas comprometidas e relata seus nomes juntamente com a cobertura geral de assinaturas do documento:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def check(infile: str) -> None:
"""Check whether a PDF contains compromised signatures."""
with ap.Document(infile) as document:
detector = ap.SignaturesCompromiseDetector(document)
result = []
if detector.check(result):
print("No signature compromise detected")
return
if result[0].has_compromised_signatures:
print(
f"Count of compromised signatures: {len(result[0].COMPROMISED_SIGNATURES)}"
)
for signature_name in result[0].COMPROMISED_SIGNATURES:
print(f"Signature name: {signature_name.FULL_NAME}")
print(result[0].signatures_coverage)