ScantPaper

A GUI to produce PDFs or DjVus from scanned documents.

Image Screenshot: Main page v3.0.0


Usage

  1. Start the application with python3 scantpaper/app.py. Add --debug|info|warn|error|fatal to enable logging at the required level.
  2. Scan one or several pages with File → Scan.
  3. Create a PDF of selected pages with File → Save.

Command-line Options

scantpaper supports the following options:

Scanning is handled with SANE. PDF conversion uses img2pdf and ocrmypdf. TIFF export uses libtiff.


Diagnostics

To diagnose errors, start scantpaper from the command line with logging enabled:

python3 scantpaper/app.py --debug

Configuration

scantpaper creates a config file at ~/.config/scantpaperrc. The directory can be changed by setting $XDG_CONFIG_HOME. Preferences are usually set via Edit → Preferences.


Dependencies

Required

Optional

Development


Download, Installation & Removal

Debian-based

In either case to remove scantpaper afterwards:

sudo apt remove scantpaper

From a wheel file

Download .whl from Github.

# Install the C-libraries that pip cannot handle:
# For Debian/Ubuntu
sudo apt update
sudo apt install libgirepository-2.0-dev libcairo2-dev pkg-config python3-dev gir1.2-glib-2.0
# For Fedora
sudo dnf install gobject-introspection-devel cairo-devel pkgconf-pkg-config python3-devel
# For Arch
sudo pacman -S gobject-introspection cairo pkgconf python
# For Homebrew
brew install pygobject3 gobject-introspection cairo pkg-config
# Possibly upgrade pip
python3 -m pip install --upgrade pip
# Install from the wheel file, automatically including python dependencies
pip install scantpaper-x.x.x-py3-none-any.whl

If you haven’t already, you will then probably have to add ~/.local/bin to your path in order to find the new executable, after which you can start it with:

scantpaper

To then remove it:

pip uninstall scantpaper

From Tarball

Download .tar.gz from Github.

tar xvfz scantpaper-x.x.x.tar.gz
cd scantpaper-x.x.x
python3 scantpaper/app.py

From the Repository

Browse the code at Github:

git clone https://github.com/carygravel/scantpaper.git
cd scantpaper
python3 scantpaper/app.py

In either of the above two cases, just delete the source directory to remove it.


Support


Reporting Bugs


Translations

gscan2pdf is partly translated into several languages. Contribute via Launchpad Rosetta.

To test updated .po files:

perl Makefile.PL LOCALEDIR=./locale
perl -I lib bin/gscan2pdf --log=log --locale=locale

Set locale variables as needed (e.g., for Russian):

LC_ALL=ru_RU.utf8 LC_MESSAGES=ru_RU.utf8 LC_CTYPE=ru_RU.utf8 LANG=ru_RU.utf8 LANGUAGE=ru_RU.utf8 python3 scantpaper/app.py --log=log --locale=locale

Description

scantpaper provides a GUI for scanning, editing, and saving documents as PDF, DjVu, TIFF, PNG, JPEG, PNM, or GIF. It supports batch scanning, metadata, OCR, and various editing tools.

Main Features

Edit Menu

View Menu

Tools

User-defined Tool Variables


FAQs

Why isn’t option xyz available in the scan window?

It may not be supported by SANE or your scanner. If you see it in scanimage --help but not in scantpaper, send the output to the maintainer.

How do I scan a multipage document with a flatbed scanner?

Enable “Allow batch scanning from flatbed” in Preferences. Some scanners require additional settings.

Why is option xyz ghosted out?

The required package may not be installed (e.g., xdg-email, unpaper, imagemagick).

Why can I not scan from the flatbed of my HP scanner?

Set “# Pages” to “1” and “Batch scan” to “No”.

Why is the list of changes not displayed when updating in Ubuntu?

Only changelogs from official Ubuntu builds are shown.

Why can’t scantpaper find my scanner?

If the scanner is remote and not found automatically, specify the device:

scantpaper --device <device>

How can I search for text in the OCR layer?

Use pdftotext or djvutxt to extract text. Many viewers support searching the embedded text layer.

How can I change the colour of the selection box or OCR output?

Create or edit ~/.config/gtk-3.0/gtk.css:

.rubberband,
rubberband,
flowbox rubberband,
treeview.view rubberband,
.content-view rubberband,
.content-view .rubberband {
    border: 1px solid #2a76c6;
    background-color: rgba(42, 118, 198, 0.2);
}

#scantpaper-ocr-output {
    color: black;
}

What’s in a name?

“scant” (https://en.wiktionary.org/wiki/scant) in this sense means “short (of)”, as I am trying to digitalise my paperwork, and I liked the play on “scan”.


See Also


History

I started writing gscan2pdf as a Perl & Gtk2 project in 2006. Version 2 switched to Gtk3, but kept the basic software architecture. This stored the pages as temporary files with hashed names, which had a couple of major disadvantages:

Therefore I decided in 2022 to completely rewrite gscan2pdf in Python and renamed it for v3 scantpaper. The rewrite:


Author

Jeffrey Ratcliffe (jffry at posteo dot net)


Thanks To


Contributing

Contributions are welcome. Please submit pull requests, ensuring that all the tests pass, that new code is covered by new tests, and that the pylint does not drop.

To run all the tests, just run pytest. To run all the tests in a particular file, pytest scantpaper/tests/test_app.py. To run just one test in a file pytest scantpaper/tests/test_app.py::test_application_init.

Note that the test suite also tests that the code is formatted with black. To fix the formatting black scantpaper.

Similarly to check the linting for one or more files pylint scantpaper/app.py scantpaper/text_layer_control.py



License

Copyright © 2006–2026 Jeffrey Ratcliffe jffry@posteo.net

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Badges

On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.