[Python] Custom background image positioning within stamp field using pyHanko python library

Discussão em 'Python' iniciado por Stack, Agosto 5, 2025.

  1. Stack

    Stack Membro Participativo

    I’ve been testing the pyHanko library for digitally signing PDF documents. The digital signing process went smoothly using a .pfx file, and the signature is visible in Adobe Acrobat.

    However, I’ve encountered an issue with positioning the visible stamp. While my image appears, I can't figure out how to adjust its placement within the field to avoid overlapping with the text.

    If anyone has experience with this library, I would greatly appreciate your guidance.

    Here is the relevant part of my code:

    from pyhanko.pdf_utils.incremental_writer import IncrementalPdfFileWriter
    from pyhanko.sign import signers
    from pyhanko.sign.fields import append_signature_field, SigFieldSpec
    from pyhanko.sign.signers import PdfSigner, SimpleSigner
    from pyhanko.stamp import TextStampStyle
    from pyhanko.pdf_utils.images import PdfImage
    from pyhanko.pdf_utils.text import TextBoxStyle

    signer = SimpleSigner.load_pkcs12(pfx_file='certificate.pfx')

    with open('test.pdf', 'rb') as doc:
    writer = IncrementalPdfFileWriter(doc)

    # Define a signature field to sign
    append_signature_field(
    writer,
    sig_field_spec=SigFieldSpec(
    "Signature1", # Field name
    box=(150, 100, 350, 200) # Signature box position
    )
    )

    # Load the background image
    background_image = PdfImage("signature.jpg")

    # Define the stamp style without border
    stamp_style = TextStampStyle(
    border_width=0,
    background=background_image,
    stamp_text="Approved by: John X\non %(ts)s", # Add custom text with newline
    timestamp_format='%d.%m.%Y %H:%M:%S %Z', # Format for the timestamp
    background_opacity=0.5, # Set the opacity (0.0 to 1.0)
    text_box_style=TextBoxStyle(font_size=9, border_width=0) # Set the font size
    )


    # Perform the signing process
    with open('signed_test.pdf', 'wb') as out_file:
    PdfSigner(
    signers.PdfSignatureMetadata(
    field_name='Signature1',
    reason="Document approved",
    location="New York"
    ),
    signer=signer,
    stamp_style=stamp_style
    ).sign_pdf(
    writer,
    output=out_file
    )

    print("PDF signed successfully and saved as 'signed_test.pdf'")`


    I tried to follow documentation on https://pyhanko.readthedocs.io/en/0.4.0/api-docs/pyhanko.stamp.html but didn't figure it how as there is no example.

    Continue reading...

Compartilhe esta Página