A Django app to export PDFs from admin actions
Project description
Django PDF Actions
A Django application that adds PDF export capabilities to your Django admin interface. Export your model data to PDF documents with customizable layouts and styling.
Prerequisites
Before installing Django PDF Export, ensure you have:
- Python 3.8 or higher
- Django 3.2 or higher
- pip (Python package installer)
Features
📊 Export Capabilities
- Export any Django model data to PDF directly from the admin interface
- Support for both portrait and landscape orientations
- Automatic pagination with configurable items per page
- Smart table layouts with automatic column width adjustment
- Support for Django model fields from list_display
- Batch export multiple records at once
- Professional table styling with grid lines and backgrounds
🎨 Design & Customization
Through the ExportPDFSettings model, you can configure:
- Page Layout:
- Items per page (1-50)
- Page margins (5-50mm)
- Automatic column width calculation
- Smart pagination handling
- Font Settings:
- Custom font support (TTF files)
- Configurable header and body font sizes
- Default DejaVu Sans font included
- Visual Settings:
- Company logo integration with flexible positioning
- Header background color customization
- Grid line color and width control
- Professional table styling
- Display Options:
- Toggle header visibility
- Toggle logo visibility
- Toggle export timestamp
- Toggle page numbers
- Customizable header and footer information
- Alignment Options:
- Customizable title alignment (left, center, right)
- Customizable header alignment (left, center, right)
- Customizable content alignment (left, center, right)
- Automatic RTL alignment for right-to-left languages
- Table Settings:
- Cell spacing and padding control
- Text wrapping with configurable character limits
- Grid line customization
- Header row styling
🌍 International Support
- Complete Unicode compatibility for all languages
- Arabic text support with automatic reshaping
- Bidirectional text handling
- Multi-language content support in the same document
- RTL (Right-to-Left) text support
- Enhanced RTL support with proper text alignment and bidirectional text handling
- Configurable RTL support that can be enabled/disabled as needed
- Column order reversal for proper RTL table display
- Uses model verbose_name for proper localized headings
- Customizable alignment options for RTL content
Quick Start
1. Installation
Using pip (Recommended)
pip install django-pdf-actions
From Source
If you want to install the latest development version:
git clone https://github.com/ibrahimroshdy/django-pdf-actions.git
cd django-pdf-actions
pip install -e .
2. Add to INSTALLED_APPS
Add 'django_pdf_actions' to your INSTALLED_APPS setting:
INSTALLED_APPS = [
...
'django_pdf_actions'
]
3. Run Migrations
python manage.py migrate
4. Set up Fonts
The package uses fonts from your project's static/assets/fonts directory. The default font is DejaVu Sans, which provides excellent Unicode support.
To use custom fonts:
- Create the fonts directory if it doesn't exist:
mkdir -p static/assets/fonts
- Install the default font (DejaVu Sans):
python manage.py setup_fonts
- Add custom fonts (optional):
# Example: Installing Roboto font python manage.py setup_fonts --font-url "https://github.com/google/fonts/raw/main/apache/roboto/Roboto-Regular.ttf" --font-name "Roboto-Regular.ttf" # Example: Installing Cairo font for Arabic support python manage.py setup_fonts --font-url "https://github.com/google/fonts/raw/main/ofl/cairo/Cairo-Regular.ttf" --font-name "Cairo-Regular.ttf"
Font Directory Structure
After setup, your project should have this structure:
your_project/
├── static/
│ └── assets/
│ └── fonts/
│ ├── DejaVuSans.ttf
│ ├── Roboto-Regular.ttf (optional)
│ └── Cairo-Regular.ttf (optional)
5. Verify Installation
To verify the installation:
- Start your Django development server
- Navigate to the Django admin interface
- Select any model with list view
- You should see "Export to PDF (Portrait)" and "Export to PDF (Landscape)" in the actions dropdown
6. Add to Your Models
Import and use the PDF export actions in your admin.py:
from django.contrib import admin
from django_pdf_actions.actions import export_to_pdf_landscape, export_to_pdf_portrait
from .models import YourModel
@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
list_display = ('field1', 'field2', ...) # Your fields here
actions = [export_to_pdf_landscape, export_to_pdf_portrait]
Configuration
PDF Export Settings
Access the Django admin interface to configure PDF export settings:
- Go to Admin > Django PDF > Export PDF Settings
- Create a new configuration with your desired settings
- Mark it as active (only one configuration can be active at a time)
The active configuration will be used for all PDF exports across your admin interface.
Available Settings
| Setting | Description | Default | Range |
|---|---|---|---|
| Page Size | PDF page size | A4 | A4, A3, A2, A1 |
| Items Per Page | Rows per page | 10 | 1-50 |
| Page Margin | Page margins | 15mm | 5-50mm |
| Font Name | TTF font to use | DejaVuSans.ttf | Any installed TTF |
| Header Font Size | Header text size | 10 | 6-24 |
| Body Font Size | Content text size | 7 | 6-18 |
| Logo | Company logo | Optional | Image file |
| Header Background | Header color | #F0F0F0 | Hex color |
| Grid Line Color | Table lines color | #000000 | Hex color |
| Grid Line Width | Table line width | 0.25 | 0.1-2.0 |
| Table Spacing | Cell padding | 1.0mm | 0.5-5.0mm |
| Max Chars Per Line | Text wrapping | 45 | 20-100 |
| RTL Support | Right-to-left text | Disabled | Enabled/Disabled |
| Title Alignment | Title text alignment | Center | Left/Center/Right |
| Header Alignment | Column headers alignment | Center | Left/Center/Right |
| Content Alignment | Table content alignment | Center | Left/Center/Right |
Page Sizes
The package supports multiple standard page sizes:
- A4: 210mm × 297mm (default)
- A3: 297mm × 420mm
- A2: 420mm × 594mm
- A1: 594mm × 841mm
The page size affects:
- Available space for content
- Number of rows per page
- Table column widths
- Overall document dimensions
Technical Details
- Python Compatibility: Python 3.8 or higher
- Django Compatibility: Django 3.2, 4.0, 4.1, 4.2, 5.0
- Dependencies: Automatically handled by pip
- PDF Engine: ReportLab
- Character Encoding: UTF-8
- Paper Size: A4 (default)
Development
Setting Up Development Environment
- Clone the repository:
git clone https://github.com/ibrahimroshdy/django-pdf-actions.git
cd django-pdf-actions
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install development dependencies:
pip install -e ".[dev]"
- Run tests:
pytest
Documentation
For more detailed information, check out our documentation:
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
If you are having issues, please let us know by:
- Opening an issue in our issue tracker
- Checking our documentation
Common Issues
-
Font Installation
- Ensure your fonts directory exists at
static/assets/fonts/ - Verify font files are in TTF format
- Check file permissions
- Ensure your fonts directory exists at
-
PDF Generation
- Ensure your model fields are properly defined in list_display
- Check that an active PDF Export Settings configuration exists
- Verify logo file paths if using custom logos
- Check for any errors in the Django admin console
-
RTL Text Support
- For Arabic, Persian, or other RTL languages, enable the RTL Support option
- Use a font that supports the language (e.g., Cairo for Arabic)
- Install appropriate fonts using the
setup_fontscommand - Text alignment and directionality will automatically adjust when RTL is enabled
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_pdf_actions-0.1.51.tar.gz.
File metadata
- Download URL: django_pdf_actions-0.1.51.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba4344abf2f1760baa01b3f9063ea852487e8b6b5f532423ca163ed6062375a2
|
|
| MD5 |
8b4298cba130f5e061232fa6009b612e
|
|
| BLAKE2b-256 |
46a84ed472d774d93b8d84f2618a9b3deed3e6c56b4a2e0125ae005c9aef9373
|
File details
Details for the file django_pdf_actions-0.1.51-py3-none-any.whl.
File metadata
- Download URL: django_pdf_actions-0.1.51-py3-none-any.whl
- Upload date:
- Size: 26.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.11.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06e85dd1c401cdcb9fbd455de8529bf46d5b3051f9e31aa86f409751a646beea
|
|
| MD5 |
7f5c9d67b99c8306950ae2037d368edb
|
|
| BLAKE2b-256 |
24e384c661a1e36f07f506bba472d53447ab9b533a1faeb8fba7b2aa6f78bbb5
|