Ekstrak Informasi Tanda Tangan dari PDF di Python

Ekstrak Gambar dari Field Tanda Tangan

Aspose.PDF for Python via .NET memungkinkan Anda mengambil gambar visual yang disematkan dalam sebuah BidangTandaTangan. Ini berguna ketika Anda perlu menampilkan atau mengarsipkan tampilan tanda tangan tanpa merender PDF lengkap.

Contoh di bawah ini mengiterasi semua bidang formulir, menemukan masing-masing SignatureField, dan menyimpan gambarnya sebagai file 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)

Baca Detail Algoritma Tanda Tangan

Gunakan PdfFileSignature.get_signatures_info() untuk membaca metadata kriptografi untuk setiap tanda tangan dalam dokumen — termasuk algoritma digest, tipe algoritma, standar kriptografi, dan nama tanda tangan:

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)

Ekstrak Sertifikat Digital dari Bidang Tanda Tangan

Gunakan extract_certificate metode pada sebuah SignatureField untuk mengambil sertifikat yang disematkan sebagai aliran byte dan menyimpannya ke disk untuk validasi eksternal:

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

Ekstrak Sertifikat menggunakan Facade PdfFileSignature

PdfFileSignature.try_extract_certificate() menyediakan cara alternatif untuk mengambil sertifikat berdasarkan nama tanda tangan. Contoh berikut mengiterasi semua nama tanda tangan dan mencoba ekstraksi untuk masing-masing:

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")

Verifikasi Tanda Tangan Digital Eksternal

Untuk memastikan bahwa dokumen tidak dimodifikasi setelah penandatanganan, verifikasi setiap tanda tangan eksternal menggunakan PdfFileSignature.verify_signature(). Contoh di bawah ini menimbulkan pengecualian untuk setiap tanda tangan yang gagal verifikasi:

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")

Deteksi Tanda Tangan yang Terkompromi

SignaturesCompromiseDetector memeriksa apakah tanda tangan digital apa pun dalam dokumen telah dibatalkan oleh perubahan selanjutnya. Gunakan ini dalam alur kerja hukum, keuangan, atau kepatuhan di mana integritas dokumen harus dijamin.

Contoh di bawah ini memeriksa tanda tangan yang terkompromi dan melaporkan nama-namanya bersama dengan cakupan tanda tangan keseluruhan dari dokumen:

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)

Topik Keamanan Terkait