pp.server - Produce & Publish Server
Project description
pp.server is a FastAPI based server implementation and implements the server side functionality of the Produce & Publish platform. It is known as the Produce & Publish Server.
The Produce & Publish Server provided web service APIs for converting HTML/XML + assets to PDF using one of the following external PDF converters:
PrinceXML (www.princexml.com, commercial)
PDFreactor (www.realobjects.com, commercial)
Speedata Publisher (www.speedata.de, open-source, experimental support)
WKHTMLTOPDF (www.wkhtmltopdf.org, open-source, experimental support)
Vivliostyle Formatter (www.vivliostyle.com, commercial, experimental support)
VersaType Formatter (www.trim-marks.com, commercial, experimental support)
Antennahouse 7 (www.antennahouse.com, commercial)
Weasyprint (free, unsupported)
Typeset.sh (www.typeset.sh, commercial)
PagedJS (www.pagedjs.org, free)
In addition there is experimental support for generating EPUB documents using Calibre (www.calibre.org, open-source).
The web service provides only synchronous operation.
Requirements
Python 3.12 or higher, no support for Python 2.x
the external binaries
PrinceXML: prince,
PDFreactor: pdfreactor.py,
Speedata Publisher: sp
Calibre: ebook-convert
WKHTMLTOPDF: wkhtmltopdf
Vivliostyle: vivliostyle-formatter
VersaType : versatype-converter
Weasyprint: weasyprint
Antennahouse: run.sh
Typeset.sh: typeset.sh.phar
PageJS: pagedjs-cli
must be in the $PATH. Please refer to the installation documentation of the individual products.
Installation
This project uses uv as package and virtualenv manager.
create a Python 3 virtual environment using:
python3 -m venv .venv
install dependencies using uv:
.venv/bin/uv pip install -e .
run the Produce & Publish server using the pp-server script:
.venv/bin/pp-server --host 0.0.0.0 --port 8000
The pp-server script provides options for setting the host and port, and for enabling auto-reloading of the server on code changes.
or under control of gunicorn:
.venv/bin/gunicorn pp.server.server:app -w 2 -k uvicorn.workers.UvicornWorker
For running the Produce & Publisher server under control of the process manager circus, generate the circusd.ini file using:
.venv/bin/pp-server-templates
and start it in background:
.venv/bin/circusd circusd.ini --daemon
Converter requirements
For the PDF conversion the related converter binaries or scripts must be included in the $PATH of your server.
prince for PrinceXML
pdfreactor-legacy for PDFreactor <= 11
pdfreactor for PDFreactor 12 or highter
wkhtmltopdf for WKHTMLToPDF
ebook-convert for Calibre
sp for the Speedata Publisher
vivliostyle for the Vivliostyle formatter
versatype for the Versatype converter
weasyprint for Weasyprint
antennahouse for the Antennahouse
pagedjs for the PagedJS
typesetsh for the Typeset.sh
API documentation
All API methods are available through a REST api following API URL endpoint:
http://host:port/<command>
With the default server configuration this translates to:
http://localhost:8000/convert
REST API Introspection
pp.server is implemented based on the FastAPI framework for Python. You can access the REST API documentation directly through
Environment variables
pp.server uses the var folder of the installation directory by default as temporary folder for conversion data. Set the environment variable PP_SPOOL_DIRECTORY if you need different spool directory instead.
If you run PDFreactor 10 or higher under Docker then you must set the environment variable PP_PDFREACTOR_DOCKER=1 in order to generated a proper file:///docs/… URI for pdfreactor.py.
PDF conversion API
Remember that all converters use HTML or XML as input for the conversion. All input data (HTML/XML, images, stylesheets, fonts etc.) must be stored in ZIP archive. The filename of the content must be named index.html.
You have to POST the data to the
with the following parameters:
data - the ZIP archive (as base64 encoded string)
converter - a string that determines the the PDF converter to be used (either princexml, pdfreactor, phantomjs, vivliostyle, versatype, or calibre for generating EPUB content)
cmd_options - an optional string of command line parameters added as given to the calls of the externals converters
Returns:
The API returns its result as JSON structure with the following key-value pairs:
status - either OK or ERROR
data- the generated PDF file encoded as base64 encoded byte string
output - the conversion transcript (output of the converter run)
Introspection API methods
Produce & Publish server version:
returns:
{“version”: “3.0.0”, “module”: “pp.server”}
Installed/available converters:
returns:
{“pdfreactor”: true, “phantomjs”: false, “calibre”: true, “prince”: true}
Versions of installed converter:
returns:
{‘prince’: ‘Version x.y’, ‘pdfreactor: ‘Version a.b.c’, …}
Other API methods
Cleanup of the queue directory (removes conversion data older than one day)
returns:
{“directories_removed”: 22}
Source code
Bug tracker
Support
Support for Produce & Publish Server is currently only available on a project basis.
License
pp.server is published under the GNU Public License V2 (GPL 2).
Contact
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 pp_server-3.5.7.tar.gz.
File metadata
- Download URL: pp_server-3.5.7.tar.gz
- Upload date:
- Size: 115.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da89f6cdb90ec7357d0a700f7d025b3259d3ef84c0638d432beb08ebe143f114
|
|
| MD5 |
da6e707428be8a2f96b4d2f2c11b8b5b
|
|
| BLAKE2b-256 |
9288f38f5452e2e1da2f93ea23b2148cac421fdbac951962716349776466232b
|
File details
Details for the file pp_server-3.5.7-py3-none-any.whl.
File metadata
- Download URL: pp_server-3.5.7-py3-none-any.whl
- Upload date:
- Size: 112.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c611e38aa8b8be1e0a1e5422097e066eeef2a28adf63cf3bba56aeb07bab92
|
|
| MD5 |
c377d1959c66000dbb5a20769aad5142
|
|
| BLAKE2b-256 |
e0b5b7275fea828e42c7365cb8769ab4716829d7a26992adf33a345e1c12092e
|