Documentation menu

Appearance

The signature appearance is described by atick.Style(...). By default it shows the ATick logo on the left, the signer details on the right, and the validity mark.

style.py
atick.Style(
    cn="Axonate Tech",          # common name (shown bold after "Digitally Signed by:")
    org="Acme Corp",                  # organisation line
    reason="Approved",                # "Reason: ..."
    location="New Delhi",             # "Location: ..."
    date=None,                        # None = current time; "" = no date line; or your own string
    date_format="%d-%b-%Y %I:%M %p",  # strftime pattern for the auto date - any world format
)

Date / time format

date_format.py
atick.Style(date_format="%Y-%m-%d %H:%M:%S")   # 2026-06-10 15:54:21  (ISO-ish)
atick.Style(date_format="%d/%m/%Y %H:%M")      # 10/06/2026 15:54     (DD/MM/YYYY)
atick.Style(date_format="%m/%d/%Y %I:%M %p")   # 06/10/2026 03:54 PM  (US)
atick.Style(date_format="%A, %d %B %Y")        # Wednesday, 10 June 2026
atick.Style(date="Signed on 10-Jun-2026")      # a fixed string you provide
atick.Style(date="")                            # no date line

Long names wrap onto more lines instead of shrinking the font, so the box never overflows.

The left side

left_side.py
atick.Style(cn="...")                   # default: the ATick logo
atick.Style(cn="...", image="logo.png") # your own logo (path or bytes; transparency preserved)
atick.Style(cn="...", image=False)      # no logo
atick.Style(cn="...", image="cn")       # the CN as large text on the LEFT (Adobe-style)

The validity mark — ATick's signature look

The mark sits centred in the appearance and tells the reader the signature's status at a glance:

validity_mark.py
atick.Style(cn="...", green_tick=True)    # the "?" mark - Adobe paints it GREEN if valid+trusted, RED if invalid
atick.Style(cn="...", always_check=True)  # ATick's green-tick graphic as the base (Adobe still reds a bad signature)
atick.Style(cn="...", green_tick=False)   # no mark - a plain signature
  • green_tick=True — the classic validity mark: a? that Adobe Acrobat repaints green for a valid, trusted signature and red for a broken one.
  • always_check=True — embeds ATick's own green-tick graphic as the base, so the tick shows in every viewer; Adobe still overlays a red mark if the signature is actually invalid.

How Adobe shows it

ATick draws the appearance and the mark; Adobe then colours the mark based on the signature's validity and whether it trusts the certificate, so your reader instantly sees the status:

  • Valid & trusted — signature intact and the certificate chains to a root Adobe trusts — “Signed and all signatures are valid.”
  • Validity unknown — signature intact, but Adobe doesn't trust the certificate's root — “Validity unknown.”
  • Not verified — Adobe hasn't validated the signature yet (no trust information) — “Signature not verified.”
  • Invalid — the document was changed after signing (or the signature is broken) — “Signature is invalid.”

So the green tick appears only when the signature is valid and the signer's certificate chains to a root Adobe trusts (the Adobe Approved Trust List, or your organisation's trust). The same ATick appearance shows the question-mark or red-cross state automatically — you don't draw those; Adobe does.

Colour the mark with any Python colour, or a gradient:

mark_color.py
atick.Style(cn="...", mark_color="#E53935")            # hex
atick.Style(cn="...", mark_color="blue")               # CSS name
atick.Style(cn="...", mark_color=(255, 140, 0))        # RGB 0-255 (or 0-1 floats)
atick.Style(cn="...", mark_gradient=["red", "orange", "yellow"])   # axial gradient

Distinguished name

dn.py
atick.Style(cn="Axonate Tech", dn="CN=Axonate Tech, O=Personal, C=IN")

The DN is shown directly under the “Digitally Signed by:” line.

Custom-text-only appearance

Show only your own text — no “Signed by”, no date, no CN structure.\\n starts a new line; *word* makes that run bold.

custom_body.py
atick.Style(body="*APPROVED*\nReviewed by: *Axonate Tech*\nThis document is *legally binding*.")

Invisible signature

A cryptographically valid signature that draws nothing on the page:

invisible.py
atick.sign_pfx(pdf, pfx=pfx, password=pw, style=atick.Style(cn="..."), placements=[])   # empty placements

Fine-tuning the layout

These keyword attributes give you precise control over the box geometry, the validity mark, the text block and the border.

fine_tuning.py
atick.Style(cn="...",
    top_reserve=0.32,            # fraction of the box height reserved at the TOP for the
                                 # logo / validity mark - raise it for a taller logo area
    mark_scale=1.0,              # scale the validity mark (>1 bigger, <1 smaller)
    mark_dx=0.0, mark_dy=0.0,    # nudge the mark horizontally / vertically (points)
    text_dx=0.0,                 # nudge the whole text block horizontally (points)
    text_top=None,              # set the top of the text block (None = automatic)
    border=True,                 # draw a border around the appearance
    border_color=(0, 0, 0),      # border colour - RGB 0-255 (or 0-1 floats)
    border_width=1.0,            # border width in points
    date_format="%d-%b-%Y %I:%M %p",   # strftime format used when "date" is not given explicitly
)
  • top_reserve — fraction (0–1) of the appearance box height kept clear at the top for the logo / validity mark. Default 0.32; raise it when your logo needs more headroom.
  • mark_scale / mark_dx / mark_dy — scale and nudge (x / y offset) the validity mark.
  • text_dx / text_top — nudge the text block horizontally / set its top edge.
  • border_color / border_width — colour and width of the appearance border (used with border=True).
  • date_format — strftime format applied to the automatic date when date is not given explicitly.

Other Style options

font_size, text_dx, text_top, text_color,bg_color, border, border_color, border_width,mark_scale, mark_dx, mark_dy, top_reserve,width, height, heading, ou,text.

Next page →