Skip to main content

DuplexPDF

DuplexPDF is a simple FTP relay server which allows you to generate duplex scans (front and backed scanned) if your scanner at least support to upload to a FTP server. It works best if you have a ADF (automatic document feeder) which can scan a range of documents fast, but can't scan them on both sides. While designed for Synology DSM and the included Container Manager, you can make it work on any system.

To start, please first make sure you fullfill therequirements:

  • You have a printer that can scan FDPs to FTP
  • You have a FTP server to upload the merged files
  • Your printer is able to name your scans with the 'Duplex1_' or 'Duplex2_' literal followed by the datetime in the following format: YYYYMMDD_hhmmss (for example Duplex1_20251217_135916.pdf)
  • You can run python3 and pip in a Docker container (for example supported by most Synology NAS)

DuplexPDF is configured by environment variables to be easly run in a Docker container

  • duplexPDF_cache: path for cache directory (e.g. /usr/duplexPDF/cache)
  • duplexPDF_log: path for the log directory (e.g. /usr/duplexPDF/log)
  • duplexPDF_incoming_addr: the ip adress and port for the FTP server. IMPORTANT: If your container is running behind a NAT, set here the address you are accessing your NAS. (e.g. 192.168.178.46:1487)
  • duplexPDF_incoming_passive_port_range: the range for PASV commands (e.g. 32000-32005)
  • duplexPDF_incoming_password: the password for the relay FTP server your printer uploads the scanned files to. The username is 'duplexPDF'
  • duplexPDF_outgoing_addr: the ip adress and port for your destination FTP server where the merged files will be send (e.g. 127.0.0.1:21)
  • duplexPDF_outgoing_username: the username for your destination FTP server
  • duplexPDF_outgoing_password: the password for your destination FTP server
  • duplexPDF_outgoing_dir: into this path the merged files will be send
  • duplexPDF_source_port: The port duplexPDF uses to communicate to the destination FTP server (e.g. 1488)

Some important notes:

  • You need to open the ports you specified in the config, usually the duplexPDF_source_port, duplexPDF_incoming_addr (port) and every port in the range of duplexPDF_incoming_passive_port_range
  • DuplexPDF supports FTPS, but can fallback to FTP
  • The cache is only cleared on startup. Everything inside of it except the '.cache', 'ftpd.cert' and 'ftpd.key' can be safely deleted while the container is running

Example configuration on a Synology NAS


You should create a folder for the logs, the cache and the script (run.py)


You need to download the run.py script which installs and runs duplexPDF from PIP


Creating the container in DSM (You don't need to change the IP adress here)


Network settings and the command to execute


Port settings in DSM


Volume settings in DSM


Environment settings in DSM

Release files for DuplexPDF 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for DuplexPDF 1.0.3
File Size Uploaded
duplexpdf-1.0.3.tar.gz 93.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for DuplexPDF 1.0.3
File Interpreter ABI Platform
duplexpdf-1.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 103.2 kB

Release files / duplexpdf-1.0.3.tar.gz

Download URL duplexpdf-1.0.3.tar.gz
Size 93.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3efaa5c401ae70c7b2eb42301f53b26a9a5c03f8546e77d15ab56a4173784f01
BLAKE2b-256 checksum
How to use checksums
f84d9323a14c65d07451eb8b383270bdecd203396013ae0bd23ed95fb9a05e7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.7

Release files / duplexpdf-1.0.3-py3-none-any.whl

Download URL duplexpdf-1.0.3-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
981a441e46c5f31b57b1bb34ffa6c4cee3076fbee008a6afef10e20a72fbb1cd
BLAKE2b-256 checksum
How to use checksums
3d0236b260116216ffaeef8f7d03ad4556d481430ce43f312dc2a222e0df4e18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

1.0.3 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page