Thermal Printer Application
Welcome to the Thermal Printer Application! This project provides a flexible and extensible way to interact with networked thermal printers. It supports printing tasks, tickets, small notes, and custom templates through a Command-Line Interface (CLI), Graphical User Interface (GUI), and a web application.
Table of Contents
- Thermal Printer Application
Features
- Multi-Interface Support: Use the application via CLI, GUI, or web interface.
- Template-Based Printing: Define print templates using YAML files with Jinja2 and Markdown support.
- Dynamic Templates: Easily add new templates without changing the code.
- Auto-Update Feature: Automatically check for updates and prompt the user to update.
- Customizable Settings: Configure printer IP, characters per line, special character handling, and update preferences.
- Support for Special Characters: Handle special characters using transliteration.
Getting Started
Installation
You can install the Thermal Printer Application directly from GitHub:
pipx install printerm
Requirements
- Python 3.13 or higher
- Networked Thermal Printer compatible with the python-escpos library
- Optional for GUI: PyQt6
- Optional for Web App: Flask
Usage
Command-Line Interface
After installation, you can use the printerm command:
printerm --help
Printing a Template
List available templates:
printerm print-template
Print using a template:
printerm print-template <template_name>
Example:
printerm print-template task
Updating Settings
Set the printer IP address:
printerm settings set-ip <printer_ip>
Show current settings:
printerm settings show
Manual Update
Manually update the application:
printerm update
Graphical User Interface
Launch the GUI:
printerm gui
Features:
- Select templates and fill in required variables.
- Access settings to configure the application.
- Print directly from the interface.
Web Application
Launch the web server:
printerm web
By default, the web app runs on http://0.0.0.0:5555. Open this URL in your browser.
Features:
- Select and print templates.
- Access and update settings.
- User-friendly interface accessible from any device on the network.
Configuration
The application uses a configuration file config.ini, located in user config directory. You can edit this file directly or through the application interfaces.
Configuration Options
- Printer IP Address: The IP address of your thermal printer.
- Characters Per Line: Number of characters the printer can print per line (default is 32).
- Enable Special Letters: Enable or disable special character handling (True/False).
- Check for Updates: Enable or disable automatic update checks (True/False).
Editing Configuration
Through the CLI
printerm config edit
Manually
Open config.ini in your preferred text editor and modify the settings.
Templates
Templates define what and how the content is printed. They are stored in the printerm/print_templates/ directory as YAML files.
Built-in Templates
- Task: Print a task with a title and text.
- Small Note: Print a blank note with space to write.
- Ticket: Print a ticket with a title, ticket number, and text.
- Weekly Agenda: Print a ready-to-fill agenda for the current week.
Adding New Templates
- Create a YAML file in the printerm/print_templates/ directory.
- Define the template with metadata, variables, and segments.
- Use Jinja2 syntax for dynamic content and Mistune-supported Markdown for formatting.
Example template greeting.yaml:
name: Greeting
description: Print a greeting message.
variables:
- name: name
description: Recipient's Name
required: true
- name: message
description: Personal Message
required: true
segments:
- text: "**Hello**, {{ name }}!\n"
styles:
align: center
bold: true
- text: "{{ message }}\n"
styles:
align: left
Development
Setting Up the Development Environment
- Clone the repository:
git clone https://github.com/AN0DA/printerm.git
- Navigate to the project directory:
cd printerm
- Install the dependencies:
uv sync
Running Tests
We use pytest for testing. To run the tests:
make test
Code Style and Formatting
We follow PEP 8 style guidelines. Please ensure your code passes style checks using tools like flake8 or black.
make lint mypy
Contributing
We welcome contributions! Here’s how you can help:
- Report Bugs: If you find a bug, please create an issue describing the problem.
- Suggest Features: Have an idea? Open an issue to discuss it.
- Submit Pull Requests: Fork the repository, make your changes, and submit a pull request.
Guidelines
- Follow the existing code style.
- Write tests for your changes.
- Update documentation if necessary.
License
We recommend using the MIT License for this project.
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
...
This license is permissive, allowing others to use, modify, and distribute the software with minimal restrictions. It encourages collaboration and sharing while protecting your liability.
See the [LICENSE] file for details.
Credits
Label Printer icon by Icons8
Metadata
Release files for printerm 1.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| printerm-1.3.1.tar.gz | 127.2 kB | With provenance | Details for printerm-1.3.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| printerm-1.3.1-py3-none-any.whl | Python 3 | none | any | Details for printerm-1.3.1-py3-none-any.whl |
Total release size: 196.5 kB
Release files / printerm-1.3.1.tar.gz
| Download URL | printerm-1.3.1.tar.gz |
|---|---|
| Size | 127.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c06c26b0d1efa129d2da5648a36d6d0e1f3a85c59b8f988659fd9ed166fba523
|
|
BLAKE2b-256 checksum How to use checksums |
5626e50208e4491f4a059d192267e163af3663d65223e4f61b591c7bb3383f6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2025.
Transparency logRelease files / printerm-1.3.1-py3-none-any.whl
| Download URL | printerm-1.3.1-py3-none-any.whl |
|---|---|
| Size | 69.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
94d0d55ecbdc5320873c56f39c188c57d070148759e18050fde2341e0567eaf6
|
|
BLAKE2b-256 checksum How to use checksums |
fb6be73b14a005d7628f3d8d8b7eba4ca9d2c9a8f9ebcbe0e5282ec84e17b6b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2025.
Transparency logSecurity for printerm 1.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for printerm-1.3.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.