Running in Docker

In this guide, you’ll learn how to run GroupDocs.Signature for Python via .NET inside a Docker container using simple code examples.

Limitations

Currently, not all GroupDocs Python APIs support Linux. This limitation will be addressed in upcoming releases.

APIs that support Linux are the following:

Warning
GroupDocs.Signature for Python via .NET Linux support is currently limited. Please check the System Requirements page for the latest supported platforms. Full Linux support will be available in upcoming releases.

This guide demonstrates how to use GroupDocs.Signature for Python via .NET in a Docker container, assuming Linux support is available in your version.

Dependencies

When using the GroupDocs Python SDK in a Linux environment, make sure the following packages are installed, as they are required for proper library operation:

  • libicu β€” ICU library (must not exceed version 70)
  • libssl1.1 β€” OpenSSL library required by .NET Core 3.1

Basic Example

This is the most basic example that shows how to run GroupDocs.Signature for Python via .NET in Docker. The example demonstrates how to sign a PDF file with a text signature using GroupDocs.Signature in a Docker container.

Note
You can download this sample application from here.

Project Structure

The sample application has the following folder structure:

πŸ“‚ basic-example/
β”œβ”€β”€ πŸ“‚ output/                   # Output directory for signed files
β”œβ”€β”€ πŸ“„ .dockerignore             # Files to exclude from Docker build context
β”œβ”€β”€ πŸ“„ sample.pdf                # Sample input document to sign
β”œβ”€β”€ πŸ“„ Dockerfile                # Docker container definition
β”œβ”€β”€ πŸ“„ GroupDocs.Signature.PythonViaNET.lic  # License file (optional)
β”œβ”€β”€ πŸ“„ sign_pdf_with_text.py     # Main application code
β”œβ”€β”€ πŸ“„ README.md                 # Build and run instructions
└── πŸ“„ requirements.txt          # Application dependencies

We’re using a Python 3.11 slim image and installing required .NET dependencies libicu and libssl1.1 manually. Here are the most essential parts:

# Use Python 3.11 slim base image which is smaller than the default base image
FROM python:3.11-slim

# Install prerequisites from a reliable source
ENV SNAPSHOT_DATE=20220328T000000Z
RUN echo "deb [trusted=yes] http://snapshot.debian.org/archive/debian/${SNAPSHOT_DATE} bullseye main" \
        > /etc/apt/sources.list.d/debian-archive.list && \
    apt-get -o Acquire::Check-Valid-Until=false update && \
    apt-get install -y --no-install-recommends \
        libicu67 \
        libssl1.1 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Set workdir 
WORKDIR /app

# Install Python dependencies
COPY requirements.txt ./
RUN pip install -r requirements.txt

# Copy the rest of the app
COPY . .

# Run the app
CMD ["python", "sign_pdf_with_text.py"]
import os
import groupdocs.signature as gs
import groupdocs.signature.options as gso

def sign_pdf_with_text_signature():
    # Get license file absolute path
    license_path = os.path.abspath("./GroupDocs.Signature.PythonViaNET.lic")

    if os.path.exists(license_path):
        # Create License and set the path
        license = gs.License()
        license.set_license(license_path)

    # Ensure output directory exists
    os.makedirs("./output", exist_ok=True)

    # The path to the input PDF file
    sample_pdf = "./sample.pdf"
    
    # The path to the output directory
    output_file_path = "./output/signed_sample.pdf"

    # Sign document with text signature
    with gs.Signature(sample_pdf) as signature:
        text_sign_options = gso.TextSignOptions("Hello from Docker!")
        signature.sign(output_file_path, text_sign_options)

    print(f"\nSource document signed successfully.\nFile saved at {output_file_path}")

if __name__ == "__main__":
    sign_pdf_with_text_signature()
groupdocs-signature-net>=25.4

Sample input file sample.pdf.

Building and Running the Application

To create the Docker image, run the following command in the directory containing the Dockerfile:

docker build -t groupdocs-signature-net:basic-example .

To run the application and mount the output directory:

docker run -it --rm -v ${PWD}/output:/app/output groupdocs-signature-net:basic-example

Command Explanation

  • -it: Runs the container in interactive mode
  • --rm: Automatically removes the container when it exits
  • -v: Mounts the host directory to the container directory for file output

App Output

The app creates the signed PDF file signed_sample.pdf in the output folder.

Troubleshooting

Font Issues

If you encounter font-related errors:

# Install additional fonts
RUN apt-get update && apt-get install -y fonts-liberation fonts-dejavu-core

Exceptions

In case you experience any other exceptions when running the application please contact us using the GroupDocs Free Support Forum and we’ll be happy to help.