From f2dbb74d447a42d9952981288f5ebdbdfd25c8b9 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Fri, 13 Nov 2020 18:46:19 +0100 Subject: [PATCH] reworking the documentation. --- docs/_static/Screenshot_first_logged.png | Bin 61336 -> 0 bytes docs/_static/Screenshot_first_run_login.png | Bin 26481 -> 0 bytes .../_static/Screenshot_upload_and_scanned.png | Bin 115989 -> 0 bytes docs/administration.rst | 354 +++++++++++ docs/advanced_usage.rst | 244 ++++++++ docs/api.rst | 9 +- docs/changelog.rst | 73 +++ docs/changelog_jonaswinkler.rst | 15 - docs/conf.py | 5 +- docs/consumption.rst | 255 -------- docs/customising.rst | 42 -- docs/guesswork.rst | 131 ----- docs/index.rst | 30 +- docs/migrating.rst | 109 ---- docs/requirements.rst | 125 ---- docs/requirements.txt | 0 docs/scanners.rst | 12 +- docs/screenshots.rst | 16 - docs/setup.rst | 549 ++++-------------- docs/usage_overview.rst | 216 +++++++ docs/utilities.rst | 284 --------- 21 files changed, 1042 insertions(+), 1427 deletions(-) delete mode 100644 docs/_static/Screenshot_first_logged.png delete mode 100644 docs/_static/Screenshot_first_run_login.png delete mode 100644 docs/_static/Screenshot_upload_and_scanned.png create mode 100644 docs/administration.rst create mode 100644 docs/advanced_usage.rst delete mode 100644 docs/changelog_jonaswinkler.rst delete mode 100644 docs/consumption.rst delete mode 100644 docs/customising.rst delete mode 100644 docs/guesswork.rst delete mode 100644 docs/migrating.rst delete mode 100644 docs/requirements.rst delete mode 100644 docs/requirements.txt delete mode 100644 docs/screenshots.rst create mode 100644 docs/usage_overview.rst delete mode 100644 docs/utilities.rst diff --git a/docs/_static/Screenshot_first_logged.png b/docs/_static/Screenshot_first_logged.png deleted file mode 100644 index 9b9c6072be11894c3ef2e969c16e54bf73f01b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61336 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

9VD{Nc|#42Hdb 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 diff --git a/docs/_static/Screenshot_first_run_login.png b/docs/_static/Screenshot_first_run_login.png deleted file mode 100644 index d704f168229a220297e5fd97f206e0ce85596f54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26481 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 Uynin^A%V`HG5@L5=<4l%0t4u?MF0Q* diff --git a/docs/_static/Screenshot_upload_and_scanned.png b/docs/_static/Screenshot_upload_and_scanned.png deleted file mode 100644 index 7b433b2ca6f2a164f0c7b7bc91d5fe0434791eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115989 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%0AZx-W6Sl7T_FLXbEaItb-Wbpa) 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 diff --git a/docs/administration.rst b/docs/administration.rst new file mode 100644 index 000000000..881d31135 --- /dev/null +++ b/docs/administration.rst @@ -0,0 +1,354 @@ + +************** +Administration +************** + + +Making backups +############## + +.. warning:: + + This section is not updated yet. + +So you're bored of this whole project, or you want to make a remote backup of +your files for whatever reason. This is easy to do, simply use the +:ref:`exporter ` to dump your documents and database out +into an arbitrary directory. + + +.. _migrating-restoring: + +Restoring +========= + +Restoring your data is just as easy, since nearly all of your data exists either +in the file names, or in the contents of the files themselves. You just need to +create an empty database (just follow the +:ref:`installation instructions ` again) and then import the +``tags.json`` file you created as part of your backup. Lastly, copy your +exported documents into the consumption directory and start up the consumer. + +.. code-block:: shell-session + + $ cd /path/to/project + $ rm data/db.sqlite3 # Delete the database + $ cd src + $ ./manage.py migrate # Create the database + $ ./manage.py createsuperuser + $ ./manage.py loaddata /path/to/arbitrary/place/tags.json + $ cp /path/to/exported/docs/* /path/to/consumption/dir/ + $ ./manage.py document_consumer + +Importing your data if you are :ref:`using Docker ` +is almost as simple: + +.. code-block:: shell-session + + # Stop and remove your current containers + $ docker-compose stop + $ docker-compose rm -f + + # Recreate them, add the superuser + $ docker-compose up -d + $ docker-compose run --rm webserver createsuperuser + + # Load the tags + $ cat /path/to/arbitrary/place/tags.json | docker-compose run --rm webserver loaddata_stdin - + + # Load your exported documents into the consumption directory + # (How you do this highly depends on how you have set this up) + $ cp /path/to/exported/docs/* /path/to/mounted/consumption/dir/ + +After loading the documents into the consumption directory the consumer will +immediately start consuming the documents. + +.. _administration-updating: + +Updating paperless +################## + +.. warning:: + + This section is not updated yet. + +For the most part, all you have to do to update Paperless is run ``git pull`` +on the directory containing the project files, and then use Django's +``migrate`` command to execute any database schema updates that might have been +rolled in as part of the update: + +.. code-block:: shell-session + + $ cd /path/to/project + $ git pull + $ pip install -r requirements.txt + $ cd src + $ ./manage.py migrate + +Note that it's possible (even likely) that while ``git pull`` may update some +files, the ``migrate`` step may not update anything. This is totally normal. + +Additionally, as new features are added, the ability to control those features +is typically added by way of an environment variable set in ``paperless.conf``. +You may want to take a look at the ``paperless.conf.example`` file to see if +there's anything new in there compared to what you've got in ``/etc``. + +If you are :ref:`using Docker ` the update process +is similar: + +.. code-block:: shell-session + + $ cd /path/to/project + $ git pull + $ docker build -t paperless . + $ docker-compose run --rm consumer migrate + $ docker-compose up -d + +If ``git pull`` doesn't report any changes, there is no need to continue with +the remaining steps. + +This depends on the route you've chosen to run paperless. + + a. If you are not using docker, update python requirements. Paperless uses + `Pipenv`_ for managing dependencies: + + .. code:: bash + + $ pip install --upgrade pipenv + $ cd /path/to/paperless + $ pipenv install + + This creates a new virtual environment (or uses your existing environment) + and installs all dependencies into it. Running commands inside the environment + is done via + + .. code:: bash + + $ cd /path/to/paperless/src + $ pipenv run python3 manage.py my_command + + You will also need to build the frontend each time a new update is pushed. + See updating paperless for more information. TODO REFERENCE + + b. If you are using docker, build the docker image. + + .. code:: bash + + $ docker build -t jonaswinkler/paperless-ng:latest . + + Copy either docker-compose.yml.example or docker-compose.yml.sqlite.example + to docker-compose.yml and adjust the consumption directory. + +Management utilities +#################### + +Paperless comes with some management commands that perform various maintenance +tasks on your paperless instance. You can invoce these commands either by + +.. code:: bash + + $ cd /path/to/paperless + $ docker-compose run --rm webserver + +or + +.. code:: bash + + $ cd /path/to/paperless/src + $ pipenv run python manage.py + +depending on whether you use docker or not. + +All commands have built-in help, which can be accessed by executing them with +the argument ``--help``. + +Document exporter +================= + +The document exporter exports all your data from paperless into a folder for +backup or migration to another DMS. + +.. code:: + + document_exporter target + +``target`` is a folder to which the data gets written. This includes documents, +thumbnails and a ``manifest.json`` file. The manifest contains all metadata from +the database (correspondents, tags, etc). + +When you use the provided docker compose script, specify ``../export`` as the +target. This path inside the container is automatically mounted on your host on +the folder ``export``. + + +.. _utilities-importer: + +Document importer +================= + +The document importer takes the export produced by the `Document exporter`_ and +imports it into paperless. + +The importer works just like the exporter. You point it at a directory, and +the script does the rest of the work: + +.. code:: + + document_importer source + +When you use the provided docker compose script, put the export inside the +``export`` folder in your paperless source directory. Specify ``../export`` +as the ``source``. + + +.. _utilities-retagger: + +Document retagger +================= + +Say you've imported a few hundred documents and now want to introduce +a tag or set up a new correspondent, and apply its matching to all of +the currently-imported docs. This problem is common enough that +there are tools for it. + +.. code:: + + document_retagger [-h] [-c] [-T] [-t] [-i] [--use-first] [-f] + + optional arguments: + -c, --correspondent + -T, --tags + -t, --document_type + -i, --inbox-only + --use-first + -f, --overwrite + +Run this after changing or adding matching rules. It'll loop over all +of the documents in your database and attempt to match documents +according to the new rules. + +Specify any combination of ``-c``, ``-T`` and ``-t`` to have the +retagger perform matching of the specified metadata type. If you don't +specify any of these options, the document retagger won't do anything. + +Specify ``-i`` to have the document retagger work on documents tagged +with inbox tags only. This is useful when you don't want to mess with +your already processed documents. + +When multiple document types or correspondents match a single document, +the retagger won't assign these to the document. Specify ``--use-first`` +to override this behaviour and just use the first correspondent or type +it finds. This option does not apply to tags, since any amount of tags +can be applied to a document. + +Finally, ``-f`` specifies that you wish to overwrite already assigned +correspondents, types and/or tags. The default behaviour is to not +assign correspondents and types to documents that have this data already +assigned. ``-f`` works differently for tags: By default, only additional tags get +added to documents, no tags will be removed. With ``-f``, tags that don't +match a document anymore get removed as well. + + +Managing the Automatic matching algorithm +========================================= + +The *Auto* matching algorithm requires a trained neural network to work. +This network needs to be updated whenever somethings in your data +changes. The docker image takes care of that automatically with the task +scheduler. You can manually renew the classifier by invoking the following +management command: + +.. code:: + + document_create_classifier + +This command takes no arguments. + + +Managing the document search index +================================== + +The document search index is responsible for delivering search results for the +website. The document index is automatically updated whenever documents get +added to, changed, or removed from paperless. However, if the search yields +non-existing documents or won't find anything, you may need to recreate the +index manually. + +.. code:: + + document_index {reindex,optimize} + +Specify ``reindex`` to have the index created from scratch. This may take some +time. + +Specify ``optimize`` to optimize the index. This updates certain aspects of +the index and usually makes queries faster and also ensures that the +autocompletion works properly. This command is regularly invoked by the task +scheduler. + + +Managing filenames +================== + +.. warning:: + + TBD + +.. code:: + + document_renamer + + +.. _utilities-encyption: + +Managing encrpytion +=================== + +Documents can be stored in Paperless using GnuPG encryption. + +.. danger:: + + Decryption is depreceated since paperless-ng 1.0 and doesn't really provide any + additional security, since you have to store the passphrase in a configuration + file on the same system as the encrypted documents for paperless to work. Also, + paperless provides transparent access to your encrypted documents. + + Consider running paperless on an encrypted filesystem instead, which will then + at least provide security against physical hardware theft. + +.. code:: + + change_storage_type [--passphrase PASSPHRASE] {gpg,unencrypted} {gpg,unencrypted} + + positional arguments: + {gpg,unencrypted} The state you want to change your documents from + {gpg,unencrypted} The state you want to change your documents to + + optional arguments: + --passphrase PASSPHRASE + +Enabling encryption +------------------- + +Basic usage to enable encryption of your document store (**USE A MORE SECURE PASSPHRASE**): + +(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here) + +.. code:: + + change_storage_type [--passphrase SECR3TP4SSPHRA$E] unencrypted gpg + + +Disabling encryption +-------------------- + +Basic usage to enable encryption of your document store: + +(Note: Again, if ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here) + +.. code:: + + change_storage_type [--passphrase SECR3TP4SSPHRA$E] gpg unencrypted + + +.. _Pipenv: https://pipenv.pypa.io/en/latest/ \ No newline at end of file diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst new file mode 100644 index 000000000..7faba180a --- /dev/null +++ b/docs/advanced_usage.rst @@ -0,0 +1,244 @@ +*************** +Advanced topics +*************** + +Paperless offers a couple features that automate certain tasks and make your life +easier. + +Guesswork +######### + + +Any document you put into the consumption directory will be consumed, but if +you name the file right, it'll automatically set some values in the database +for you. This is is the logic the consumer follows: + +1. Try to find the correspondent, title, and tags in the file name following + the pattern: ``Date - Correspondent - Title - tag,tag,tag.pdf``. Note that + the format of the date is **rigidly defined** as ``YYYYMMDDHHMMSSZ`` or + ``YYYYMMDDZ``. The ``Z`` refers "Zulu time" AKA "UTC". + The tags are optional, so the format ``Date - Correspondent - Title.pdf`` + works as well. +2. If that doesn't work, we skip the date and try this pattern: + ``Correspondent - Title - tag,tag,tag.pdf``. +3. If that doesn't work, we try to find the correspondent and title in the file + name following the pattern: ``Correspondent - Title.pdf``. +4. If that doesn't work, just assume that the name of the file is the title. + +So given the above, the following examples would work as you'd expect: + +* ``20150314000700Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` +* ``20150314Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` +* ``Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` +* ``Another Company - Letter of Reference.jpg`` +* ``Dad's Recipe for Pancakes.png`` + +These however wouldn't work: + +* ``2015-03-14 00:07:00 UTC - Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` +* ``2015-03-14 - Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` +* ``Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` +* ``Another Company- Letter of Reference.jpg`` + +Do I have to be so strict about naming? +======================================= + +Rather than using the strict document naming rules, one can also set the option +``PAPERLESS_FILENAME_DATE_ORDER`` in ``paperless.conf`` to any date order +that is accepted by dateparser_. Doing so will cause ``paperless`` to default +to any date format that is found in the title, instead of a date pulled from +the document's text, without requiring the strict formatting of the document +filename as described above. + +.. _dateparser: https://github.com/scrapinghub/dateparser/blob/v0.7.0/docs/usage.rst#settings + +Transforming filenames for parsing +================================== + +Some devices can't produce filenames that can be parsed by the default +parser. By configuring the option ``PAPERLESS_FILENAME_PARSE_TRANSFORMS`` in +``paperless.conf`` one can add transformations that are applied to the filename +before it's parsed. + +The option contains a list of dictionaries of regular expressions (key: +``pattern``) and replacements (key: ``repl``) in JSON format, which are +applied in order by passing them to ``re.subn``. Transformation stops +after the first match, so at most one transformation is applied. The general +syntax is + +.. code:: python + + [{"pattern":"pattern1", "repl":"repl1"}, {"pattern":"pattern2", "repl":"repl2"}, ..., {"pattern":"patternN", "repl":"replN"}] + +The example below is for a Brother ADS-2400N, a scanner that allows +different names to different hardware buttons (useful for handling +multiple entities in one instance), but insists on adding ``_`` +to the filename. + +.. code:: python + + # Brother profile configuration, support "Name_Date_Count" (the default + # setting) and "Name_Count" (use "Name" as tag and "Count" as title). + PAPERLESS_FILENAME_PARSE_TRANSFORMS=[{"pattern":"^([a-z]+)_(\\d{8})_(\\d{6})_([0-9]+)\\.", "repl":"\\2\\3Z - \\4 - \\1."}, {"pattern":"^([a-z]+)_([0-9]+)\\.", "repl":" - \\2 - \\1."}] + + +Matching tags, correspondents and document types +################################################ + +After the consumer has tried to figure out what it could from the file name, +it starts looking at the content of the document itself. It will compare the +matching algorithms defined by every tag and correspondent already set in your +database to see if they apply to the text in that document. In other words, +if you defined a tag called ``Home Utility`` that had a ``match`` property of +``bc hydro`` and a ``matching_algorithm`` of ``literal``, Paperless will +automatically tag your newly-consumed document with your ``Home Utility`` tag +so long as the text ``bc hydro`` appears in the body of the document somewhere. + +The matching logic is quite powerful, and supports searching the text of your +document with different algorithms, and as such, some experimentation may be +necessary to get things right. + +In order to have a tag, correspondent or type assigned automatically to newly +consumed documents, assign a match and matching algorithm using the web +interface. These settings define when to assign correspondents, tags and types +to documents. + +The following algorithms are available: + +* **Any:** Looks for any occurrence of any word provided in match in the PDF. + If you define the match as ``Bank1 Bank2``, it will match documents containing + either of these terms. +* **All:** Requires that every word provided appears in the PDF, albeit not in the + order provided. +* **Literal:** Matches only if the match appears exactly as provided in the PDF. +* **Regular expression:** Parses the match as a regular expression and tries to + find a match within the document. +* **Fuzzy match:** I dont know. Look at the source. +* **Auto:** Tries to automatically match new documents. This does not require you + to set a match. See the notes below. + +When using the "any" or "all" matching algorithms, you can search for terms +that consist of multiple words by enclosing them in double quotes. For example, +defining a match text of ``"Bank of America" BofA`` using the "any" algorithm, +will match documents that contain either "Bank of America" or "BofA", but will +not match documents containing "Bank of South America". + +Then just save your tag/correspondent and run another document through the +consumer. Once complete, you should see the newly-created document, +automatically tagged with the appropriate data. + + +Automatic matching +================== + +Paperless-ng comes with a new matching algorithm called *Auto*. This matching +algorithm tries to assign tags, correspondents and document types to your +documents based on how you have assigned these on existing documents. It +uses a neural network under the hood. + +If, for example, all your bank statements of your account 123 at the Bank of +America are tagged with the tag "bofa_123" and the matching algorithm of this +tag is set to *Auto*, this neural network will examine your documents and +automatically learn when to assign this tag. + +There are a couple caveats you need to keep in mind when using this feature: + +* Changes to your documents are not immediately reflected by the matching + algorithm. The neural network needs to be *trained* on your documents after + changes. Paperless periodically (default: once each hour) checks for changes + and does this automatically for you. +* The Auto matching algorithm only takes documents into account which are NOT + placed in your inbox (i.e., have inbox tags assigned to them). This ensures + that the neural network only learns from documents which you have correctly + tagged before. +* The matching algorithm can only work if there is a correlation between the + tag, correspondent or document type and the document itself. Your bank + statements usually contain your bank account number and the name of the bank, + so this works reasonably well, However, tags such as "TODO" cannot be + automatically assigned. +* The matching algorithm needs a reasonable number of documents to identify when + to assign tags, correspondents, and types. If one out of a thousand documents + has the correspondent "Very obscure web shop I bought something five years + ago", it will probably not assign this correspondent automatically if you buy + something from them again. The more documents, the better. + +Hooking into the consumption process +#################################### + +Sometimes you may want to do something arbitrary whenever a document is +consumed. Rather than try to predict what you may want to do, Paperless lets +you execute scripts of your own choosing just before or after a document is +consumed using a couple simple hooks. + +Just write a script, put it somewhere that Paperless can read & execute, and +then put the path to that script in ``paperless.conf`` with the variable name +of either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or +``PAPERLESS_POST_CONSUME_SCRIPT``. + +.. TODO HYPEREF TO CONFIG + +.. important:: + + These scripts are executed in a **blocking** process, which means that if + a script takes a long time to run, it can significantly slow down your + document consumption flow. If you want things to run asynchronously, + you'll have to fork the process in your script and exit. + + +Pre-consumption script +====================== + +Executed after the consumer sees a new document in the consumption folder, but +before any processing of the document is performed. This script receives exactly +one argument: + +* Document file name + +A simple but common example for this would be creating a simple script like +this: + +``/usr/local/bin/ocr-pdf`` + +.. code:: bash + + #!/usr/bin/env bash + pdf2pdfocr.py -i ${1} + +``/etc/paperless.conf`` + +.. code:: bash + + ... + PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf" + ... + +This will pass the path to the document about to be consumed to ``/usr/local/bin/ocr-pdf``, +which will in turn call `pdf2pdfocr.py`_ on your document, which will then +overwrite the file with an OCR'd version of the file and exit. At which point, +the consumption process will begin with the newly modified file. + +.. _pdf2pdfocr.py: https://github.com/LeoFCardoso/pdf2pdfocr + + +.. _consumption-director-hook-variables-post: + +Post-consumption script +======================= + +Executed after the consumer has successfully processed a document and has moved it +into paperless. It receives the following arguments: + +* Document id +* Generated file name +* Source path +* Thumbnail path +* Download URL +* Thumbnail URL +* Correspondent +* Tags + +The script can be in any language you like, but for a simple shell script +example, you can take a look at ``post-consumption-example.sh`` in the +``scripts`` directory in this project. + +The post consumption script cannot cancel the consumption process. diff --git a/docs/api.rst b/docs/api.rst index d08826a33..a561de89d 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,7 +1,12 @@ .. _api: +************ The REST API -############ +************ + +.. warning:: + + This section is not updated yet. Paperless makes use of the `Django REST Framework`_ standard API interface because of its inherent awesomeness. Conveniently, the system is also @@ -15,7 +20,7 @@ installation. .. _api-uploading: Uploading ---------- +========= File uploads in an API are hard and so far as I've been able to tell, there's no standard way of accepting them, so rather than crowbar file uploads into the diff --git a/docs/changelog.rst b/docs/changelog.rst index 8a0528a88..b2fc8692c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,79 @@ +.. _paperless_changelog: + Changelog ######### +paperless-ng 1.0 +================ + +* **Deprecated:** GnuPG. Don't use it. If you're still using it, be aware that it + offers no protection at all, since the passphrase is stored alongside with the + encrypted documents itself. This features will most likely be removed in future + versions. + +* **Added:** New frontend. Features: + + * Single page application: It's much more responsive than the django admin pages. + * Dashboard. Shows recently scanned documents, or todos, or other documents + at wish. Allows uploading of documents. Shows basic statistics. + * Better document list with multiple display options. + * Full text search with result highlighting, auto completion and scoring based + on the query. It uses a document search index in the background. + * Saveable filters. + * Better log viewer. + +* **Added:** Document types. Assign these to documents just as correspondents. + They may be used in the future to perform automatic operations on documents + depending on the type. +* **Added:** Inbox tags. Define an inbox tag and it will automatically be + assigned to any new document scanned into the system. +* **Added:** Automatic matching. A new matching algorithm that automatically + assigns tags, document types and correspondents to your documents. It uses + a neural network trained on your data. +* **Added:** Archive serial numbers. Assign these to quickly find documents stored in + physical binders. +* **Added:** Enabled the internal user management of django. This isn't really a + multi user solution, however, it allows more than one user to access the website + and set some basic permissions / renew passwords. + +* **Modified [breaking]:** REST Api changes: + + * New filters added, other filters removed (case sensitive filters, slug filters) + * Endpoints for thumbnails, previews and downloads replace the old ``/fetch/`` urls. Redirects are in place. + * Endpoint for document uploads replaces the old ``/push`` url. Redirects are in place. + * Foreign key relationships are now served as IDs, not as urls. + +* **Modified [breaking]:** PostgreSQL: + + * If ``PAPERLESS_DBHOST`` is specified in the settings, paperless uses postgresql instead of sqlite. + Username, database and password all default to ``paperless`` if not specified. + * **docker-compose.yml uses PostgreSQL by default.** + +* **Modified [breaking]:** document_retagger management command rework. See TODO hyperref +* **Removed [breaking]:** Reminders. +* **Removed:** All customizations made to the django admin pages. + +* **Internal changes:** Mostly code cleanup, including: + + * Rework of the code of the tesseract parser. This is now a lot cleaner. + * Rework of the filename handling code. It was a mess. + * Fixed some issues with the document exporter not exporting all documents when encountering duplicate filenames. + * Consumer rework: now uses the excellent watchdog library, lots of code removed. + * Added a task scheduler that takes care of checking mail, training the classifier and maintaining the document search index. + * Updated dependencies. Now uses Pipenv all around. + * Updated Dockerfile and docker-compose. Now uses ``supervisord`` to run everything paperless-related in a single container. + +* **Settings:** + + * ``PAPERLESS_FORGIVING_OCR`` is now default and gone. Reason: Even if ``langdetect`` fails to detect + a language, tesseract still does a very good job at ocr'ing a document with the default language. + Certain language specifics such as umlauts may not get picked up properly. + * ``PAPERLESS_DEBUG`` defaults to ``false``. + * The presence of ``PAPERLESS_DBHOST`` now determines whether to use PostgreSQL or + sqlite. + +* Many more small changes here and there. The usual stuff. + 2.7.0 ===== diff --git a/docs/changelog_jonaswinkler.rst b/docs/changelog_jonaswinkler.rst deleted file mode 100644 index 35824198f..000000000 --- a/docs/changelog_jonaswinkler.rst +++ /dev/null @@ -1,15 +0,0 @@ -Changelog (jonaswinkler) -######################## - -1.0.0 -===== - -* First release based on paperless 2.6.0 -* Added: Automatic document classification using neural networks (replaces - regex-based tagging) -* Added: Document types -* Added: Archive serial number allows easy referencing of physical document - copies -* Added: Inbox tags (added automatically to newly consumed documents) -* Added: Document viewer on document edit page -* Database backend is now configurable diff --git a/docs/conf.py b/docs/conf.py index eb6720dbb..7ebc82ea7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,7 +54,7 @@ source_suffix = '.rst' master_doc = 'index' # General information about the project. -project = u'Paperless' +project = u'Paperless-ng' copyright = u'2015, Daniel Quinn' # The version info for the project you're documenting, acts as replacement for @@ -205,7 +205,8 @@ try: import sphinx_rtd_theme html_theme = "sphinx_rtd_theme" html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -except ImportError: +except ImportError as e: + print("error " + str(e)) pass # -- Options for LaTeX output --------------------------------------------- diff --git a/docs/consumption.rst b/docs/consumption.rst deleted file mode 100644 index 15f6c6393..000000000 --- a/docs/consumption.rst +++ /dev/null @@ -1,255 +0,0 @@ -.. _consumption: - -Consumption -########### - -Once you've got Paperless setup, you need to start feeding documents into it. -Currently, there are three options: the consumption directory, IMAP (email), and -HTTP POST. - - -.. _consumption-directory: - -The Consumption Directory -========================= - -The primary method of getting documents into your database is by putting them in -the consumption directory. The ``document_consumer`` script runs in an infinite -loop looking for new additions to this directory and when it finds them, it goes -about the process of parsing them with the OCR, indexing what it finds, and -encrypting the PDF (if ``PAPERLESS_PASSPHRASE`` is set), storing it in the -media directory. - -Getting stuff into this directory is up to you. If you're running Paperless -on your local computer, you might just want to drag and drop files there, but if -you're running this on a server and want your scanner to automatically push -files to this directory, you'll need to setup some sort of service to accept the -files from the scanner. Typically, you're looking at an FTP server like -`Proftpd`_ or `Samba`_. - -.. _Proftpd: http://www.proftpd.org/ -.. _Samba: http://www.samba.org/ - -So where is this consumption directory? It's wherever you define it. Look for -the ``CONSUMPTION_DIR`` value in ``settings.py``. Set that to somewhere -appropriate for your use and put some documents in there. When you're ready, -follow the :ref:`consumer ` instructions to get it running. - - -.. _consumption-directory-hook: - -Hooking into the Consumption Process ------------------------------------- - -Sometimes you may want to do something arbitrary whenever a document is -consumed. Rather than try to predict what you may want to do, Paperless lets -you execute scripts of your own choosing just before or after a document is -consumed using a couple simple hooks. - -Just write a script, put it somewhere that Paperless can read & execute, and -then put the path to that script in ``paperless.conf`` with the variable name -of either ``PAPERLESS_PRE_CONSUME_SCRIPT`` or -``PAPERLESS_POST_CONSUME_SCRIPT``. The script will be executed before or -or after the document is consumed respectively. - -.. important:: - - These scripts are executed in a **blocking** process, which means that if - a script takes a long time to run, it can significantly slow down your - document consumption flow. If you want things to run asynchronously, - you'll have to fork the process in your script and exit. - - -.. _consumption-directory-hook-variables: - -What Can These Scripts Do? -.......................... - -It's your script, so you're only limited by your imagination and the laws of -physics. However, the following values are passed to the scripts in order: - - -.. _consumption-director-hook-variables-pre: - -Pre-consumption script -:::::::::::::::::::::: - -* Document file name - -A simple but common example for this would be creating a simple script like -this: - -``/usr/local/bin/ocr-pdf`` - -.. code:: bash - - #!/usr/bin/env bash - pdf2pdfocr.py -i ${1} - -``/etc/paperless.conf`` - -.. code:: bash - - ... - PAPERLESS_PRE_CONSUME_SCRIPT="/usr/local/bin/ocr-pdf" - ... - -This will pass the path to the document about to be consumed to ``/usr/local/bin/ocr-pdf``, -which will in turn call `pdf2pdfocr.py`_ on your document, which will then -overwrite the file with an OCR'd version of the file and exit. At which point, -the consumption process will begin with the newly modified file. - -.. _pdf2pdfocr.py: https://github.com/LeoFCardoso/pdf2pdfocr - - -.. _consumption-director-hook-variables-post: - -Post-consumption script -::::::::::::::::::::::: - -* Document id -* Generated file name -* Source path -* Thumbnail path -* Download URL -* Thumbnail URL -* Correspondent -* Tags - -The script can be in any language you like, but for a simple shell script -example, you can take a look at ``post-consumption-example.sh`` in the -``scripts`` directory in this project. - - -.. _consumption-imap: - -IMAP (Email) -============ - -Another handy way to get documents into your database is to email them to -yourself. The typical use-case would be to be out for lunch and want to send a -copy of the receipt back to your system at home. Paperless can be taught to -pull emails down from an arbitrary account and dump them into the consumption -directory where the process :ref:`above ` will follow the -usual pattern on consuming the document. - -Some things you need to know about this feature: - -* It's disabled by default. By setting the values below it will be enabled. -* It's been tested in a limited environment, so it may not work for you (please - submit a pull request if you can!) -* It's designed to **delete mail from the server once consumed**. So don't go - pointing this to your personal email account and wonder where all your stuff - went. -* Currently, only one photo (attachment) per email will work. - -So, with all that in mind, here's what you do to get it running: - -1. Setup a new email account somewhere, or if you're feeling daring, create a - folder in an existing email box and note the path to that folder. -2. In ``/etc/paperless.conf`` set all of the appropriate values in - ``PATHS AND FOLDERS`` and ``SECURITY``. - If you decided to use a subfolder of an existing account, then make sure you - set ``PAPERLESS_CONSUME_MAIL_INBOX`` accordingly here. You also have to set - the ``PAPERLESS_EMAIL_SECRET`` to something you can remember 'cause you'll - have to include that in every email you send. -3. Restart the :ref:`consumer `. The consumer will check - the configured email account at startup and from then on every 10 minutes - for something new and pulls down whatever it finds. -4. Send yourself an email! Note that the subject is treated as the file name, - so if you set the subject to ``Correspondent - Title - tag,tag,tag``, you'll - get what you expect. Also, you must include the aforementioned secret - string in every email so the fetcher knows that it's safe to import. - Note that Paperless only allows the email title to consist of safe characters - to be imported. These consist of alpha-numeric characters and ``-_ ,.'``. -5. After a few minutes, the consumer will poll your mailbox, pull down the - message, and place the attachment in the consumption directory with the - appropriate name. A few minutes later, the consumer will import it like any - other file. - - -.. _consumption-http: - -HTTP POST -========= - -You can also submit a document via HTTP POST, so long as you do so after -authenticating. To push your document to Paperless, send an HTTP POST to the -server with the following name/value pairs: - -* ``correspondent``: The name of the document's correspondent. Note that there - are restrictions on what characters you can use here. Specifically, - alphanumeric characters, `-`, `,`, `.`, and `'` are ok, everything else is - out. You also can't use the sequence ` - ` (space, dash, space). -* ``title``: The title of the document. The rules for characters is the same - here as the correspondent. -* ``document``: The file you're uploading - -Specify ``enctype="multipart/form-data"``, and then POST your file with:: - - Content-Disposition: form-data; name="document"; filename="whatever.pdf" - -An example of this in HTML is a typical form: - -.. code:: html - -

- - - - - - -But a potentially more useful way to do this would be in Python. Here we use -the requests library to handle basic authentication and to send the POST data -to the URL. - -.. code:: python - - import os - - from hashlib import sha256 - - import requests - from requests.auth import HTTPBasicAuth - - # You authenticate via BasicAuth or with a session id. - # We use BasicAuth here - username = "my-username" - password = "my-super-secret-password" - - # Where you have Paperless installed and listening - url = "http://localhost:8000/push" - - # Document metadata - correspondent = "Test Correspondent" - title = "Test Title" - - # The local file you want to push - path = "/path/to/some/directory/my-document.pdf" - - - with open(path, "rb") as f: - - response = requests.post( - url=url, - data={"title": title, "correspondent": correspondent}, - files={"document": (os.path.basename(path), f, "application/pdf")}, - auth=HTTPBasicAuth(username, password), - allow_redirects=False - ) - - if response.status_code == 202: - - # Everything worked out ok - print("Upload successful") - - else: - - # If you don't get a 202, it's probably because your credentials - # are wrong or something. This will give you a rough idea of what - # happened. - - print("We got HTTP status code: {}".format(response.status_code)) - for k, v in response.headers.items(): - print("{}: {}".format(k, v)) diff --git a/docs/customising.rst b/docs/customising.rst deleted file mode 100644 index 0d8e428cd..000000000 --- a/docs/customising.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. _customising: - -Customising Paperless -##################### - -Currently, the Paperless' interface is just the default Django admin, which -while powerful, is rather boring. If you'd like to give the site a bit of a -face-lift, or if you simply want to adjust the colours, contrast, or font size -to make things easier to read, you can do that by adding your own CSS or -Javascript quite easily. - - -.. _customising-overrides: - -Overrides -========= - -On every page load, Paperless looks for two files in your media root directory -(the directory defined by your ``PAPERLESS_MEDIADIR`` configuration variable or -the default, ``/media/``) for two files: - -* ``overrides.css`` -* ``overrides.js`` - -If it finds either or both of those files, they'll be loaded into the page: the -CSS in the ````, and the Javascript stuffed into the last line of the -````. - - -.. _customising-overrides-note: - -An important note about customisation -------------------------------------- - -Any changes you make to the site with your CSS or Javascript are likely to -depend on the structure of the current HTML and/or the existing CSS rules. For -the most part it's safe to assume that these bits won't change, but *sometimes -they do* as features are added or bugs are fixed. - -If you make a change that you think others would appreciate though, submit it -as a pull request and maybe we can find a way to work it into the project by -default! \ No newline at end of file diff --git a/docs/guesswork.rst b/docs/guesswork.rst deleted file mode 100644 index c12ecd0c4..000000000 --- a/docs/guesswork.rst +++ /dev/null @@ -1,131 +0,0 @@ -.. _guesswork: - -Guesswork -######### - -During the consumption process, Paperless tries to guess some of the attributes -of the document it's looking at. To do this it uses two approaches: - - -.. _guesswork-naming: - -File Naming -=========== - -Any document you put into the consumption directory will be consumed, but if -you name the file right, it'll automatically set some values in the database -for you. This is is the logic the consumer follows: - -1. Try to find the correspondent, title, and tags in the file name following - the pattern: ``Date - Correspondent - Title - tag,tag,tag.pdf``. Note that - the format of the date is **rigidly defined** as ``YYYYMMDDHHMMSSZ`` or - ``YYYYMMDDZ``. The ``Z`` refers "Zulu time" AKA "UTC". - The tags are optional, so the format ``Date - Correspondent - Title.pdf`` - works as well. -2. If that doesn't work, we skip the date and try this pattern: - ``Correspondent - Title - tag,tag,tag.pdf``. -3. If that doesn't work, we try to find the correspondent and title in the file - name following the pattern: ``Correspondent - Title.pdf``. -4. If that doesn't work, just assume that the name of the file is the title. - -So given the above, the following examples would work as you'd expect: - -* ``20150314000700Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` -* ``20150314Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` -* ``Some Company Name - Invoice 2016-01-01 - money,invoices.pdf`` -* ``Another Company - Letter of Reference.jpg`` -* ``Dad's Recipe for Pancakes.png`` - -These however wouldn't work: - -* ``2015-03-14 00:07:00 UTC - Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` -* ``2015-03-14 - Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` -* ``Some Company Name, Invoice 2016-01-01, money, invoices.pdf`` -* ``Another Company- Letter of Reference.jpg`` - -Do I have to be so strict about naming? ---------------------------------------- -Rather than using the strict document naming rules, one can also set the option -``PAPERLESS_FILENAME_DATE_ORDER`` in ``paperless.conf`` to any date order -that is accepted by dateparser_. Doing so will cause ``paperless`` to default -to any date format that is found in the title, instead of a date pulled from -the document's text, without requiring the strict formatting of the document -filename as described above. - -.. _dateparser: https://github.com/scrapinghub/dateparser/blob/v0.7.0/docs/usage.rst#settings - -Transforming filenames for parsing ----------------------------------- -Some devices can't produce filenames that can be parsed by the default -parser. By configuring the option ``PAPERLESS_FILENAME_PARSE_TRANSFORMS`` in -``paperless.conf`` one can add transformations that are applied to the filename -before it's parsed. - -The option contains a list of dictionaries of regular expressions (key: -``pattern``) and replacements (key: ``repl``) in JSON format, which are -applied in order by passing them to ``re.subn``. Transformation stops -after the first match, so at most one transformation is applied. The general -syntax is - -.. code:: python - - [{"pattern":"pattern1", "repl":"repl1"}, {"pattern":"pattern2", "repl":"repl2"}, ..., {"pattern":"patternN", "repl":"replN"}] - -The example below is for a Brother ADS-2400N, a scanner that allows -different names to different hardware buttons (useful for handling -multiple entities in one instance), but insists on adding ``_`` -to the filename. - -.. code:: python - - # Brother profile configuration, support "Name_Date_Count" (the default - # setting) and "Name_Count" (use "Name" as tag and "Count" as title). - PAPERLESS_FILENAME_PARSE_TRANSFORMS=[{"pattern":"^([a-z]+)_(\\d{8})_(\\d{6})_([0-9]+)\\.", "repl":"\\2\\3Z - \\4 - \\1."}, {"pattern":"^([a-z]+)_([0-9]+)\\.", "repl":" - \\2 - \\1."}] - -.. _guesswork-content: - -Reading the Document Contents -============================= - -After the consumer has tried to figure out what it could from the file name, -it starts looking at the content of the document itself. It will compare the -matching algorithms defined by every tag and correspondent already set in your -database to see if they apply to the text in that document. In other words, -if you defined a tag called ``Home Utility`` that had a ``match`` property of -``bc hydro`` and a ``matching_algorithm`` of ``literal``, Paperless will -automatically tag your newly-consumed document with your ``Home Utility`` tag -so long as the text ``bc hydro`` appears in the body of the document somewhere. - -The matching logic is quite powerful, and supports searching the text of your -document with different algorithms, and as such, some experimentation may be -necessary to get things Just Right. - - -.. _guesswork-content-howto: - -How Do I Set Up These Matching Algorithms? ------------------------------------------- - -Setting up of the algorithms is easily done through the admin interface. When -you create a new correspondent or tag, there are optional fields for matching -text and matching algorithm. From the help info there: - -.. note:: - - Which algorithm you want to use when matching text to the OCR'd PDF. Here, - "any" looks for any occurrence of any word provided in the PDF, while "all" - requires that every word provided appear in the PDF, albeit not in the - order provided. A "literal" match means that the text you enter must - appear in the PDF exactly as you've entered it, and "regular expression" - uses a regex to match the PDF. If you don't know what a regex is, you - probably don't want this option. - -When using the "any" or "all" matching algorithms, you can search for terms -that consist of multiple words by enclosing them in double quotes. For example, -defining a match text of ``"Bank of America" BofA`` using the "any" algorithm, -will match documents that contain either "Bank of America" or "BofA", but will -not match documents containing "Bank of South America". - -Then just save your tag/correspondent and run another document through the -consumer. Once complete, you should see the newly-created document, -automatically tagged with the appropriate data. diff --git a/docs/index.rst b/docs/index.rst index 75046b3a4..531a9ae04 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,8 +4,8 @@ Paperless ========= Paperless is a simple Django application running in two parts: -a :ref:`consumer ` (the thing that does the indexing) and -the :ref:`webserver ` (the part that lets you search & +a *Consumer* (the thing that does the indexing) and +the *Web server* (the part that lets you search & download already-indexed documents). If you want to learn more about its functions keep on reading after the installation section. @@ -25,26 +25,34 @@ finding stuff again. I feed documents right from the post box into the scanner and then shred them. Perhaps you might find it useful too. +Paperless-ng +============ + +I wanted to make big changes to the project that will impact the way it is used +by its users greatly. Among the users who currently use paperless in production +there are probably many that don't want these changes right away. I also wanted +to have more control over what goes into the code and what does not. Therefore, +paperless-ng was created. NG stands for both Angular (the framework used for the +Frontend) and next-gen. Publishing this project under a different name also +avoids confusion between paperless and paperless-ng. + +It would be great if this project could eventually merge back into the main +repository, but it needs a lot more work before that can happen. Contents ======== .. toctree:: - :maxdepth: 2 + :maxdepth: 1 - requirements setup - consumption + usage_overview + advanced_usage + administration api - utilities - guesswork - migrating - customising extending troubleshooting contributing scanners - screenshots changelog - changelog_jonaswinkler diff --git a/docs/migrating.rst b/docs/migrating.rst deleted file mode 100644 index c3e702bd5..000000000 --- a/docs/migrating.rst +++ /dev/null @@ -1,109 +0,0 @@ -.. _migrating: - -Migrating, Updates, and Backups -=============================== - -As Paperless is still under active development, there's a lot that can change -as software updates roll out. You should backup often, so if anything goes -wrong during an update, you at least have a means of restoring to something -usable. Thankfully, there are automated ways of backing up, restoring, and -updating the software. - - -.. _migrating-backup: - -Backing Up ----------- - -So you're bored of this whole project, or you want to make a remote backup of -your files for whatever reason. This is easy to do, simply use the -:ref:`exporter ` to dump your documents and database out -into an arbitrary directory. - - -.. _migrating-restoring: - -Restoring ---------- - -Restoring your data is just as easy, since nearly all of your data exists either -in the file names, or in the contents of the files themselves. You just need to -create an empty database (just follow the -:ref:`installation instructions ` again) and then import the -``tags.json`` file you created as part of your backup. Lastly, copy your -exported documents into the consumption directory and start up the consumer. - -.. code-block:: shell-session - - $ cd /path/to/project - $ rm data/db.sqlite3 # Delete the database - $ cd src - $ ./manage.py migrate # Create the database - $ ./manage.py createsuperuser - $ ./manage.py loaddata /path/to/arbitrary/place/tags.json - $ cp /path/to/exported/docs/* /path/to/consumption/dir/ - $ ./manage.py document_consumer - -Importing your data if you are :ref:`using Docker ` -is almost as simple: - -.. code-block:: shell-session - - # Stop and remove your current containers - $ docker-compose stop - $ docker-compose rm -f - - # Recreate them, add the superuser - $ docker-compose up -d - $ docker-compose run --rm webserver createsuperuser - - # Load the tags - $ cat /path/to/arbitrary/place/tags.json | docker-compose run --rm webserver loaddata_stdin - - - # Load your exported documents into the consumption directory - # (How you do this highly depends on how you have set this up) - $ cp /path/to/exported/docs/* /path/to/mounted/consumption/dir/ - -After loading the documents into the consumption directory the consumer will -immediately start consuming the documents. - - -.. _migrating-updates: - -Updates -------- - -For the most part, all you have to do to update Paperless is run ``git pull`` -on the directory containing the project files, and then use Django's -``migrate`` command to execute any database schema updates that might have been -rolled in as part of the update: - -.. code-block:: shell-session - - $ cd /path/to/project - $ git pull - $ pip install -r requirements.txt - $ cd src - $ ./manage.py migrate - -Note that it's possible (even likely) that while ``git pull`` may update some -files, the ``migrate`` step may not update anything. This is totally normal. - -Additionally, as new features are added, the ability to control those features -is typically added by way of an environment variable set in ``paperless.conf``. -You may want to take a look at the ``paperless.conf.example`` file to see if -there's anything new in there compared to what you've got in ``/etc``. - -If you are :ref:`using Docker ` the update process -is similar: - -.. code-block:: shell-session - - $ cd /path/to/project - $ git pull - $ docker build -t paperless . - $ docker-compose run --rm consumer migrate - $ docker-compose up -d - -If ``git pull`` doesn't report any changes, there is no need to continue with -the remaining steps. diff --git a/docs/requirements.rst b/docs/requirements.rst deleted file mode 100644 index 54f0d9216..000000000 --- a/docs/requirements.rst +++ /dev/null @@ -1,125 +0,0 @@ -.. _requirements: - -Requirements -============ - -You need a Linux machine or Unix-like setup (theoretically an Apple machine -should work) that has the following software installed: - -* `Python3`_ (with development libraries, pip and virtualenv) -* `GNU Privacy Guard`_ -* `Tesseract`_, plus its language files matching your document base. -* `Imagemagick`_ version 6.7.5 or higher -* `unpaper`_ -* `libpoppler-cpp-dev`_ PDF rendering library -* `optipng`_ - -.. _Python3: https://python.org/ -.. _GNU Privacy Guard: https://gnupg.org -.. _Tesseract: https://github.com/tesseract-ocr -.. _Imagemagick: http://imagemagick.org/ -.. _unpaper: https://github.com/unpaper/unpaper -.. _libpoppler-cpp-dev: https://poppler.freedesktop.org/ -.. _optipng: http://optipng.sourceforge.net/ - -Notably, you should confirm how you access your Python3 installation. Many -Linux distributions will install Python3 in parallel to Python2, using the -names ``python3`` and ``python`` respectively. The same goes for ``pip3`` and -``pip``. Running Paperless with Python2 will likely break things, so make sure -that you're using the right version. - -For the purposes of simplicity, ``python`` and ``pip`` is used everywhere to -refer to their Python3 versions. - -In addition to the above, there are a number of Python requirements, all of -which are listed in a file called ``requirements.txt`` in the project root -directory. - -If you're not working on a virtual environment (like Docker), you -should probably be using a virtualenv, but that's your call. The reasons why -you might choose a virtualenv or not aren't really within the scope of this -document. Needless to say if you don't know what a virtualenv is, you should -probably figure that out before continuing. - - -.. _requirements-apple: - -Problems with Imagemagick & PDFs --------------------------------- - -Some users have `run into problems`_ with getting ImageMagick to do its thing -with PDFs. Often this is the case with Apple systems using HomeBrew, but other -Linuxes have been a problem as well. The solution appears to be to install -ghostscript as well as ImageMagick: - -.. _run into problems: https://github.com/the-paperless-project/paperless/issues/25 - -.. code:: bash - - $ brew install ghostscript - $ brew install imagemagick - $ brew install libmagic - - -.. _requirements-baremetal: - -Python-specific Requirements: No Virtualenv -------------------------------------------- - -If you don't care to use a virtual env, then installation of the Python -dependencies is easy: - -.. code:: bash - - $ pip install --user --requirement /path/to/paperless/requirements.txt - -This will download and install all of the requirements into -``${HOME}/.local``. Remember that your distribution may be using ``pip3`` as -mentioned above. - - -.. _requirements-virtualenv: - -Python-specific Requirements: Virtualenv ----------------------------------------- - -Using a virtualenv for this is pretty straightforward: create a virtualenv, -enter it, and install the requirements using the ``requirements.txt`` file: - -.. code:: bash - - $ virtualenv --python=/path/to/python3 /path/to/arbitrary/directory - $ . /path/to/arbitrary/directory/bin/activate - $ pip install --requirement /path/to/paperless/requirements.txt - -Now you're ready to go. Just remember to enter (activate) your virtualenv -whenever you want to use Paperless. - - -.. _requirements-documentation: - -Documentation -------------- - -As generation of the documentation is not required for the use of Paperless, -dependencies for this process are not included in ``requirements.txt``. If -you'd like to generate your own docs locally, you'll need to: - -.. code:: bash - - $ pip install sphinx - -and then cd into the ``docs`` directory and type ``make html``. - -If you are using Docker, you can use the following commands to build the -documentation and run a webserver serving it on `port 8001`_: - -.. code:: bash - - $ pwd - /path/to/paperless - - $ docker build -t paperless:docs -f docs/Dockerfile . - $ docker run --rm -it -p "8001:8000" paperless:docs - -.. _port 8001: http://127.0.0.1:8001 diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/scanners.rst b/docs/scanners.rst index 9815637b1..7e41ecd53 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -1,7 +1,8 @@ .. _scanners: -Scanner Recommendations -======================= +*********************** +Scanner recommendations +*********************** As Paperless operates by watching a folder for new files, doesn't care what scanner you use, but sometimes finding a scanner that will write to an FTP, @@ -23,16 +24,19 @@ that works right for you based on recommentations from other Paperless users. +---------+----------------+-----+-----+-----+----------------+ | Fujitsu | `ix500`_ | yes | | yes | `eonist`_ | +---------+----------------+-----+-----+-----+----------------+ +| Fujitsu | `S1300i`_ | yes | | yes | `jonaswinkler`_| ++---------+----------------+-----+-----+-----+----------------+ .. _ADS-1500W: https://www.brother.ca/en/p/ads1500w .. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW .. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw .. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn -.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/ +.. _ix500: https://www.fujitsu.com/global/products/computing/peripheral/scanners/scansnap/ix500/ +.. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/ .. _danielquinn: https://github.com/danielquinn .. _ayounggun: https://github.com/ayounggun .. _bmsleight: https://github.com/bmsleight .. _eonist: https://github.com/eonist .. _REOLDEV: https://github.com/REOLDEV - +.. _jonaswinkler: https://github.com/jonaswinkler diff --git a/docs/screenshots.rst b/docs/screenshots.rst deleted file mode 100644 index 53f564dd6..000000000 --- a/docs/screenshots.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. _screenshots: - -Screenshots -=========== - -Once everything is set-up login to paperless using the web front-end - -.. image:: ./_static/Screenshot_first_run_login.png - -Nice clean interface - -.. image:: ./_static/Screenshot_first_logged.png - -Some documents loaded in via ftp or using the scanners ftp. - -.. image:: ./_static/Screenshot_upload_and_scanned.png diff --git a/docs/setup.rst b/docs/setup.rst index 9b8e3a548..67b65951e 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -1,500 +1,187 @@ -.. _setup: +***** Setup -===== - -Paperless isn't a very complicated app, but there are a few components, so some -basic documentation is in order. If you follow along in this document and -still have trouble, please open an `issue on GitHub`_ so I can fill in the -gaps. - -.. _issue on GitHub: https://github.com/the-paperless-project/paperless/issues - - -.. _setup-download: +***** Download --------- +######## The source is currently only available via GitHub, so grab it from there, -either by using ``git``: +by using ``git``: .. code:: bash - $ git clone https://github.com/the-paperless-project/paperless.git + $ git clone https://github.com/jonaswinkler/paperless-ng.git $ cd paperless -or just download the tarball and go that route: - -.. code:: bash - - $ cd to the directory where you want to run Paperless - $ wget https://github.com/the-paperless-project/paperless/archive/master.zip - $ unzip master.zip - $ cd paperless-master - - -.. _setup-installation: - -Installation & Configuration ----------------------------- +Installation +############ You can go multiple routes with setting up and running Paperless: - * The `bare metal route`_ - * The `docker route`_ - * A suggested `linux containers route`_ +* The `docker route`_ +* The `bare metal route`_ +The recommended setup route is docker, since it takes care of all dependencies +for you. The `docker route`_ is quick & easy. -The `bare metal route`_ is a bit more complicated to setup but makes it easier +The `bare metal route`_ is more complicated to setup but makes it easier should you want to contribute some code back. -The `linux containers route`_ is quick, but makes alot of assumptions on the -set-up, on the other hand the script could be used to install on a base -debian or ubuntu server. +Docker Route +============ -.. _docker route: setup-installation-docker_ -.. _bare metal route: setup-installation-bare-metal_ -.. _Docker Machine: https://docs.docker.com/machine/ +1. Install `Docker`_ and `docker-compose`_. [#compose]_ -.. _setup-installation-bare-metal: + .. caution:: -Standard (Bare Metal) -+++++++++++++++++++++ + If you want to use the included ``docker-compose.yml.example`` file, you + need to have at least Docker version **17.09.0** and docker-compose + version **1.17.0**. -1. Install the requirements as per the :ref:`requirements ` page. -2. Within the extract of master.zip go to the ``src`` directory. -3. Copy ``../paperless.conf.example`` to ``/etc/paperless.conf`` and open it in - your favourite editor. As this file contains passwords. It should only be - readable by user root and paperless! Set the values for: + See the `Docker installation guide`_ on how to install the current + version of Docker for your operating system or Linux distribution of + choice. To get an up-to-date version of docker-compose, follow the + `docker-compose installation guide`_ if your package repository doesn't + include it. - Set the values for: + .. _Docker installation guide: https://docs.docker.com/engine/installation/ + .. _docker-compose installation guide: https://docs.docker.com/compose/install/ - * ``PAPERLESS_CONSUMPTION_DIR``: this is where your documents will be - dumped to be consumed by Paperless. - * ``PAPERLESS_OCR_THREADS``: this is the number of threads the OCR process - will spawn to process document pages in parallel. - * ``PAPERLESS_PASSPHRASE``: this is only required if you want to use GPG to - encrypt your document files. This is the passphrase Paperless uses to - encrypt/decrypt the original documents. Don't worry about defining this - if you don't want to use encryption (the default). +2. Create a copy of ``docker-compose.yml.example`` as ``docker-compose.yml`` + and a copy of ``docker-compose.env.example`` as ``docker-compose.env``. + You'll be editing both these files: taking a copy ensures that you can + ``git pull`` to receive updates without risking merge conflicts with your + modified versions of the configuration files. +3. Modify ``docker-compose.yml`` to your preferences. You should change the path + to the consumption directory in this file. Find the line that specifies where + to mount the consumption directory: - Note also that if you're using the ``runserver`` as mentioned below, you - should make sure that PAPERLESS_DEBUG="true" or is just commented out as - this is the default. + .. code:: + + - ./consume:/usr/src/paperless/consume + + Replace the part BEFORE the colon with a local directory of your choice: -4. Initialise the SQLite database with ``./manage.py migrate``. -5. Collect the static files for the webserver with ``./manage.py collectstatic``. -6. Create a user for your Paperless instance with - ``./manage.py createsuperuser``. Follow the prompts to create your user. -7. Start the webserver with ``./manage.py runserver :``. - If no specific IP or port is given, the default is ``127.0.0.1:8000`` also - known as http://localhost:8000/. - You should now be able to visit your (empty) installation at - `Paperless webserver`_ or whatever you chose before. You can login with the - user/pass you created in #5. + .. code:: -8. In a separate window, change to the ``src`` directory in this repo again, - but this time, you should start the consumer script with - ``./manage.py document_consumer``. -9. Scan something or put a file into the ``CONSUMPTION_DIR``. -10. Wait a few minutes -11. Visit the document list on your webserver, and it should be there, indexed - and downloadable. - -.. caution:: - - This installation is not secure. Once everything is working head over to - `Making things more permanent`_ - -.. _Paperless webserver: http://127.0.0.1:8000 -.. _Making things more permanent: setup-permanent_ - -.. _setup-installation-docker: - -Docker Method -+++++++++++++ - -1. Install `Docker`_. - - .. caution:: - - As mentioned earlier, this guide assumes that you use Docker natively - under Linux. If you are using `Docker Machine`_ under Mac OS X or - Windows, you will have to adapt IP addresses, volume-mounting, command - execution and maybe more. - -2. Install `docker-compose`_. [#compose]_ - - .. caution:: - - If you want to use the included ``docker-compose.yml.example`` file, you - need to have at least Docker version **1.12.0** and docker-compose - version **1.9.0**. - - See the `Docker installation guide`_ on how to install the current - version of Docker for your operating system or Linux distribution of - choice. To get an up-to-date version of docker-compose, follow the - `docker-compose installation guide`_ if your package repository doesn't - include it. - - .. _Docker installation guide: https://docs.docker.com/engine/installation/ - .. _docker-compose installation guide: https://docs.docker.com/compose/install/ - -3. Create a copy of ``docker-compose.yml.example`` as ``docker-compose.yml`` - and a copy of ``docker-compose.env.example`` as ``docker-compose.env``. - You'll be editing both these files: taking a copy ensures that you can - ``git pull`` to receive updates without risking merge conflicts with your - modified versions of the configuration files. -4. Modify ``docker-compose.yml`` to your preferences, following the - instructions in comments in the file. The only change that is a hard - requirement is to specify where the consumption directory should - mount.[#dockercomposeyml]_ - - .. caution:: - - If you are using NFS mounts for the consume directory you also need to - change the command to turn off inotify as it doesn't work with NFS - - ``command: ["document_consumer", "--no-inotify"]`` + - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume + + Don't change the part after the colon or paperless wont find your documents. -5. Modify ``docker-compose.env`` and adapt the following environment variables: +4. Modify ``docker-compose.env``, following the comments in the file. The + most important change is to set ``USERMAP_UID`` and ``USERMAP_GID`` + to the uid and gid of your user on the host system. This ensures that + both the docker container and you on the host machine have write access + to the consumption directory. If your UID and GID on the host system is + 1000 (the default for the first normal user on most systems), it will + work out of the box without any modifications. - ``PAPERLESS_PASSPHRASE`` - This is the passphrase Paperless uses to encrypt/decrypt the original - document. If you aren't planning on using GPG encryption, you can just - leave this undefined. - - ``PAPERLESS_OCR_THREADS`` - This is the number of threads the OCR process will spawn to process - document pages in parallel. If the variable is not set, Python determines - the core-count of your CPU and uses that value. - - ``PAPERLESS_OCR_LANGUAGES`` - If you want the OCR to recognize other languages in addition to the - default English, set this parameter to a space separated list of - three-letter language-codes after `ISO 639-2/T`_. For a list of available - languages -- including their three letter codes -- see the - `Alpine packagelist`_. - - ``USERMAP_UID`` and ``USERMAP_GID`` - If you want to mount the consumption volume (directory ``/consume`` within - the containers) to a host-directory -- which you probably want to do -- - access rights might be an issue. The default user and group ``paperless`` - in the containers have an id of 1000. The containers will enforce that the - owning group of the consumption directory will be ``paperless`` to be able - to delete consumed documents. If your host-system has a group with an ID - of 1000 and you don't want this group to have access rights to the - consumption directory, you can use ``USERMAP_GID`` to change the id in the - container and thus the one of the consumption directory. Furthermore, you - can change the id of the default user as well using ``USERMAP_UID``. - - ``PAPERLESS_USE_SSL`` - If you want Paperless to use SSL for the user interface, set this variable - to ``true``. You also need to copy your certificate and key to the ``data`` - directory, named ``ssl.cert`` and ``ssl.key``. - This is not an ideal solution and, if possible, a reverse proxy with nginx - is preferred. - -6. Run ``docker-compose up -d``. This will create and start the necessary +5. Run ``docker-compose up -d``. This will create and start the necessary containers. -7. To be able to login, you will need a super user. To create it, execute the - following command: - .. code-block:: shell-session +6. To be able to login, you will need a super user. To create it, execute the + following command: - $ docker-compose run --rm webserver createsuperuser + .. code-block:: shell-session - This will prompt you to set a username (default ``paperless``), an optional - e-mail address and finally a password. -8. The default ``docker-compose.yml`` exports the webserver on your local port - 8000. If you haven't adapted this, you should now be able to visit your - `Paperless webserver`_ at ``http://127.0.0.1:8000`` (or - ``https://127.0.0.1:8000`` if you enabled SSL). You can login with the - user and password you just created. -9. Add files to consumption directory the way you prefer to. Following are two - possible options: + $ docker-compose run --rm webserver createsuperuser - 1. Mount the consumption directory to a local host path by modifying your - ``docker-compose.yml``: - - .. code-block:: diff - - diff --git a/docker-compose.yml b/docker-compose.yml - --- a/docker-compose.yml - +++ b/docker-compose.yml - @@ -17,9 +18,8 @@ services: - volumes: - - paperless-data:/usr/src/paperless/data - - paperless-media:/usr/src/paperless/media - - - /consume - + - /local/path/you/choose:/consume - - .. danger:: - - While the consumption container will ensure at startup that it can - **delete** a consumed file from a host-mounted directory, it might - not be able to **read** the document in the first place if the access - rights to the file are incorrect. - - Make sure that the documents you put into the consumption directory - will either be readable by everyone (``chmod o+r file.pdf``) or - readable by the default user or group id 1000 (or the one you have - set with ``USERMAP_UID`` or ``USERMAP_GID`` respectively). - - 2. Use ``docker cp`` to copy your files directly into the container: - - .. code-block:: shell-session - - $ # Identify your containers - $ docker-compose ps - Name Command State Ports - ------------------------------------------------------------------------- - paperless_consumer_1 /sbin/docker-entrypoint.sh ... Exit 0 - paperless_webserver_1 /sbin/docker-entrypoint.sh ... Exit 0 - - $ docker cp /path/to/your/file.pdf paperless_consumer_1:/consume - - ``docker cp`` is a one-shot-command, just like ``cp``. This means that - every time you want to consume a new document, you will have to execute - ``docker cp`` again. You can of course automate this process, but option - 1 is generally the preferred one. - - .. danger:: - - ``docker cp`` will change the owning user and group of a copied file - to the acting user at the destination, which will be ``root``. - - You therefore need to ensure that the documents you want to copy into - the container are readable by everyone (``chmod o+r file.pdf``) - before copying them. + This will prompt you to set a username, an optional e-mail address and + finally a password. +7. The default ``docker-compose.yml`` exports the webserver on your local port + 8000. If you haven't adapted this, you should now be able to visit your + Paperless instance at ``http://127.0.0.1:8000``. You can login with the + user and password you just created. .. _Docker: https://www.docker.com/ .. _docker-compose: https://docs.docker.com/compose/install/ -.. _ISO 639-2/T: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes -.. _Alpine packagelist: https://pkgs.alpinelinux.org/packages?name=tesseract-ocr-data*&arch=x86_64 .. [#compose] You of course don't have to use docker-compose, but it simplifies deployment immensely. If you know your way around Docker, feel free to tinker around without using compose! -.. [#dockercomposeyml] If you're upgrading your docker-compose images from - version 1.1.0 or earlier, you might need to change in the - ``docker-compose.yml`` file the ``image: pitkley/paperless`` directive in - both the ``webserver`` and ``consumer`` sections to ``build: ./`` as per the - newer ``docker-compose.yml.example`` file +Bare Metal Route +================ -.. _setup-permanent: +.. warning:: -Making Things a Little more Permanent -------------------------------------- + TBD. User docker for now. -Once you've tested things and are happy with the work flow, you should secure -the installation and automate the process of starting the webserver and -consumer. +Migration to paperless-ng +######################### +At its core, paperless-ng is still paperless and fully compatible. However, some +things have changed under the hood, so you need to adapt your setup depending on +how you installed paperless. The important things to keep in mind are as follows. -.. _setup-permanent-webserver: +* Read the :ref:`paperless_changelog` and take note of breaking changes. +* It is recommended to use postgresql as the database now. The docker-compose + deployment will automatically create a postgresql instance and instruct + paperless to use it. This means that if you use the docker-compose script + with your current paperless media and data volumes and used the default + sqlite database, **it will not use your sqlite database and it may seem + as if your documents are gone**. You may use the provided + ``docker-compose.yml.sqlite.example`` script, which does not use postgresql. +* The task scheduler of paperless, which is used to execute periodic tasks + such as email checking and maintenance, requires a `redis`_ message broker + instance. The docker-compose route takes care of that. +* The layout of the folder structure for your documents and data remains the + same. +* The frontend needs to be built from source. The docker image takes care of + that. -Using a Real Webserver -++++++++++++++++++++++ +Migration to paperless-ng is then performed in a few simple steps: -The default is to use Django's development server, as that's easy and does the -job well enough on a home network. However it is heavily discouraged to use -it for more than that. +1. Do a backup for two purposes: If something goes wrong, you still have your + data. Second, if you don't like paperless-ng, you can switch back to + paperless. -If you want to do things right you should use a real webserver capable of -handling more than one thread. You will also have to let the webserver serve -the static files (CSS, JavaScript) from the directory configured in -``PAPERLESS_STATICDIR``. The default static files directory is ``../static``. +2. Replace the paperless source with paperless-ng. If you're using git, this + is done by: -For that you need to activate your virtual environment and collect the static -files with the command: + .. code:: bash -.. code:: bash + $ git remote set-url origin https://github.com/jonaswinkler/paperless-ng + $ git pull - $ cd /src - $ ./manage.py collectstatic +3. If you are using docker, copy ``docker-compose.yml.example`` to + ``docker-compose.yml`` and ``docker-compose.env.example`` to + ``docker-compose.env``. Make adjustments to these files as necessary. + See `docker route`_ for details. +4. Update paperless. See :ref:`administration-updating` for details. -Apache -~~~~~~ +5. Start paperless-ng. -This is a configuration supplied by `steckerhalter`_ on GitHub. It uses Apache -and mod_wsgi, with a Paperless installation in ``/home/paperless/``: + .. code:: bash -.. code:: apache + $ docker-compose up + + This will also migrate your database as usual. Verify by inspecting the + output that the migration was successfully executed. CTRL-C will then + gracefully stop the container. After that, you can start paperless-ng as + usuall with - - ServerName example.com + .. code:: bash - Alias /static/ /home/paperless/paperless/static/ - - Require all granted - + $ docker-compose up -d - WSGIScriptAlias / /home/paperless/paperless/src/paperless/wsgi.py - WSGIDaemonProcess example.com user=paperless group=paperless threads=5 python-path=/home/paperless/paperless/src:/home/paperless/.env/lib/python3.6/site-packages - WSGIProcessGroup example.com +6. Paperless installed a permanent redirect to ``admin/`` in your browser. This + redirect is still in place and prevents access to the new UI. Clear + everything related to paperless in your browsers data in order to fix + this issue. - - - Require all granted - - - +Moving data from sqlite to postgresql +===================================== -.. _steckerhalter: https://github.com/steckerhalter +.. warning:: + TBD. -Nginx + Gunicorn -~~~~~~~~~~~~~~~~ - -If you're using Nginx, the most common setup is to combine it with a -Python-based server like Gunicorn so that Nginx is acting as a proxy. Below is -a copy of a simple Nginx configuration fragment making use of a gunicorn -instance listening on localhost port 8000. - -.. code:: nginx - - server { - listen 80; - - index index.html index.htm index.php; - access_log /var/log/nginx/paperless_access.log; - error_log /var/log/nginx/paperless_error.log; - - location /static { - - autoindex on; - alias ; - - } - - location / { - - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - - proxy_pass http://127.0.0.1:8000; - } - } - - -The gunicorn server can be started with the command: - -.. code-block:: shell - - $ /bin/gunicorn --pythonpath=/src paperless.wsgi -w 2 - - -.. _setup-permanent-standard-systemd: - -Standard (Bare Metal + Systemd) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If you're running on a bare metal system that's using Systemd, you can use the -service unit files in the ``scripts`` directory to set this up. - -1. You'll need to create a group and user called ``paperless`` (without login) -2. Setup Paperless to be in a place that this new user can read and write to. -3. Ensure ``/etc/paperless`` is readable by the ``paperless`` user. -4. Copy the service file from the ``scripts`` directory to - ``/etc/systemd/system``. - -.. code-block:: bash - - $ cp /path/to/paperless/scripts/paperless-consumer.service /etc/systemd/system/ - $ cp /path/to/paperless/scripts/paperless-webserver.service /etc/systemd/system/ - -5. Edit the service file to point the ``ExecStart`` line to the proper location - of your paperless install, referencing the appropriate Python binary. For - example: - ``ExecStart=/path/to/python3 /path/to/paperless/src/manage.py document_consumer``. -6. Start and enable (so they start on boot) the services. - -.. code-block:: bash - - $ systemctl enable paperless-consumer - $ systemctl enable paperless-webserver - $ systemctl start paperless-consumer - $ systemctl start paperless-webserver - - -.. _setup-permanent-standard-upstart: - -Standard (Bare Metal + Upstart) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Ubuntu 14.04 and earlier use the `Upstart`_ init system to start services -during the boot process. To configure Upstart to run Paperless automatically -after restarting your system: - -1. Change to the directory where Upstart's configuration files are kept: - ``cd /etc/init`` -2. Create a new file: ``sudo nano paperless-server.conf`` -3. In the newly-created file enter:: - - start on (local-filesystems and net-device-up IFACE=eth0) - stop on shutdown - - respawn - respawn limit 10 5 - - script - exec /bin/gunicorn --pythonpath=/src paperless.wsgi -w 2 - end script - - Note that you'll need to replace ``/srv/paperless/src/manage.py`` with the - path to the ``manage.py`` script in your installation directory. - - If you are using a network interface other than ``eth0``, you will have to - change ``IFACE=eth0``. For example, if you are connected via WiFi, you will - likely need to replace ``eth0`` above with ``wlan0``. To see all interfaces, - run ``ifconfig -a``. - - Save the file. - -4. Create a new file: ``sudo nano paperless-consumer.conf`` - -5. In the newly-created file enter:: - - start on (local-filesystems and net-device-up IFACE=eth0) - stop on shutdown - - respawn - respawn limit 10 5 - - script - exec /bin/python /manage.py document_consumer - end script - - Replace the path placeholder and ``eth0`` with the appropriate value and save the file. - -These two configuration files together will start both the Paperless webserver -and document consumer processes when the file system and network interface -specified is available after boot. Furthermore, if either process ever exits -unexpectedly, Upstart will try to restart it a maximum of 10 times within a 5 -second period. - -.. _Upstart: http://upstart.ubuntu.com/ - - -.. _setup-permanent-docker: - -Docker -~~~~~~ - -If you're using Docker, you can set a restart-policy_ in the -``docker-compose.yml`` to have the containers automatically start with the -Docker daemon. - -.. _restart-policy: https://docs.docker.com/engine/reference/commandline/run/#restart-policies-restart - + .. _redis: https://redis.io/ diff --git a/docs/usage_overview.rst b/docs/usage_overview.rst new file mode 100644 index 000000000..719776d92 --- /dev/null +++ b/docs/usage_overview.rst @@ -0,0 +1,216 @@ +************** +Usage Overview +************** + +Paperless is an application that manages your personal documents. With +the help of a document scanner (see :ref:`scanners`), paperless transforms +your wieldy physical document binders into a searchable archive and +provices many utilities for finding and managing your documents. + + +Terms and definitions +##################### + +Paperless esentially consists of two different parts for managing your +documents: + +* The *consumer* watches a specified folder and adds all documents in that + folder to paperless. +* The *web server* provides a UI that you use to manage and search for your + scanned documents. + +Each document has a couple of fields that you can assign to them: + +* A *Document* is a piece of paper that sometimes contains valuable + information. +* The *correspondent* of a document is the person, institution or company that + a document either originates form, or is sent to. +* A *tag* is a label that you can assign to documents. Think of labels as more + powerful folders: Multiple documents can be grouped together with a single + tag, however, a single document can also have multiple tags. This is not + possible with folders. The reason folders are not implemented in paperless + is simply that tags are much more versatile than folders. +* A *document type* is used to demarkate the type of a document such as letter, + bank statement, invoice, contract, etc. It is used to identify what a document + is about. +* The *date added* of a document is the date the document was scanned into + paperless. You cannot and should not change this date. +* The *date created* of a document is the date the document was intially issued. + This can be the date you bought a product, the date you signed a contract, or + the date a letter was sent to you. +* The *archive serial number* (short: ASN) of a document is the identifier of + the document in your physical document binders. See + :ref:`usage-recommended_workflow` below. +* The *content* of a document is the text that was OCR'ed from the document. + This text is fed into the search engine and is used for matching tags, + correspondents and document types. + +.. TODO: hyperref + +Frontend overview +################# + +.. warning:: + + TBD. Add some fancy screenshots! + +Adding documents to paperless +############################# + +Once you've got Paperless setup, you need to start feeding documents into it. +Currently, there are three options: the consumption directory, IMAP (email), and +HTTP POST. + + +The consumption directory +========================= + +The primary method of getting documents into your database is by putting them in +the consumption directory. The consumer runs in an infinite +loop looking for new additions to this directory and when it finds them, it goes +about the process of parsing them with the OCR, indexing what it finds, and storing +it in the media directory. + +Getting stuff into this directory is up to you. If you're running Paperless +on your local computer, you might just want to drag and drop files there, but if +you're running this on a server and want your scanner to automatically push +files to this directory, you'll need to setup some sort of service to accept the +files from the scanner. Typically, you're looking at an FTP server like +`Proftpd`_ or a Windows folder share with `Samba`_. + +.. _Proftpd: http://www.proftpd.org/ +.. _Samba: http://www.samba.org/ + +.. TODO: hyperref to configuration of the location of this magic folder. + + +IMAP (Email) +============ + +Another handy way to get documents into your database is to email them to +yourself. The typical use-case would be to be out for lunch and want to send a +copy of the receipt back to your system at home. Paperless can be taught to +pull emails down from an arbitrary account and dump them into the consumption +directory where the consumer will follow the +usual pattern on consuming the document. + +Some things you need to know about this feature: + +* It's disabled by default. By setting the values below it will be enabled. +* It's been tested in a limited environment, so it may not work for you (please + submit a pull request if you can!) +* It's designed to **delete mail from the server once consumed**. So don't go + pointing this to your personal email account and wonder where all your stuff + went. +* Currently, only one photo (attachment) per email will work. + +So, with all that in mind, here's what you do to get it running: + +1. Setup a new email account somewhere, or if you're feeling daring, create a + folder in an existing email box and note the path to that folder. +2. In ``/etc/paperless.conf`` set all of the appropriate values in + ``PATHS AND FOLDERS`` and ``SECURITY``. + If you decided to use a subfolder of an existing account, then make sure you + set ``PAPERLESS_CONSUME_MAIL_INBOX`` accordingly here. You also have to set + the ``PAPERLESS_EMAIL_SECRET`` to something you can remember 'cause you'll + have to include that in every email you send. +3. Restart paperless. Paperless will check + the configured email account at startup and from then on every 10 minutes + for something new and pulls down whatever it finds. +4. Send yourself an email! Note that the subject is treated as the file name, + so if you set the subject to ``Correspondent - Title - tag,tag,tag``, you'll + get what you expect. Also, you must include the aforementioned secret + string in every email so the fetcher knows that it's safe to import. + Note that Paperless only allows the email title to consist of safe characters + to be imported. These consist of alpha-numeric characters and ``-_ ,.'``. + + +REST API +======== + +You can also submit a document using the REST API, see the API section for details. + + +.. _usage-recommended_workflow: + +The recommended workflow +######################## + +Once you have familiarized yourself with paperless and are ready to use it +for all your documents, the recommended workflow for managing your documents +is as follows. This workflow also takes into account that some documents +have to be kept in physical form, but still ensures that you get all the +advantages for these documents as well. + +Preparations in paperless +========================= + +* Create an inbox tag that gets assigned to all new documents. +* Create a TODO tag. + +Processing of the physical documents +==================================== + +Keep a physical inbox. Whenever you receive a document that you need to +archive, put it into your inbox. Regulary, do the following for all documents +in your inbox: + +1. For each document, decide if you need to keep the document in physical + form. This applies to certain important documents, such as contracts and + certificates. +2. If you need to keep the document, write a running number on the document + before scanning, starting at one and counting upwards. This is the archive + serial number, or ASN in short. +3. Scan the document. +4. If the document has an ASN assigned, store it in a *single* binder, sorted + by ASN. Don't order this binder in any other way. +5. If the document has no ASN, throw it away. Yay! + +Over time, you will notice that your physical binder will fill up. If it is +full, label the binder with the range of ASNs in this binder (i.e., "Documents +1 to 343"), store the binder in your cellar or elsewhere, and start a new +binder. + +The idea behind this process is that you will never have to use the physical +binders to find a document. If you need a specific physical document, you +may find this document by: + +1. Searching in paperless for the document. +2. Identify the ASN of the document, since it appears on the scan. +3. Grab the relevant document binder and get the document. This is easy since + they are sorted by ASN. + +Processing of documents in paperless +==================================== + +Once you have scanned in a document, proceed in paperless as follows. + +1. If the document has an ASN, assign the ASN to the document. +2. Assign a correspondent to the document (i.e., your employer, bank, etc) + This isnt strictly necessary but helps in finding a document when you need + it. +3. Assign a document type (i.e., invoice, bank statement, etc) to the document + This isnt strictly necessary but helps in finding a document when you need + it. +4. Assign a proper title to the document (the name of an item you bought, the + subject of the letter, etc) +5. Check that the date of the document is corrent. Paperless tries to read + the date from the content of the document, but this fails sometimes if the + OCR is bad or multiple dates appear on the document. +6. Remove inbox tags from the documents. + + +Task management +=============== + +Some documents require attention and require you to act on the document. You +may take two different approaches to handle these documents based on how +regularly you intent to use paperless and scan documents. + +* If you scan and process your documents in paperless regularly, assign a + TODO tag to all scanned documents that you need to process. Create a saved + view on the dashboard that shows all documents with this tag. +* If you do not scan documents regularly and use paperless solely for archiving, + create a physical todo box next to your physical inbox and put documents you + need to process in the TODO box. When you performed the task associated with + the document, move it to the inbox. diff --git a/docs/utilities.rst b/docs/utilities.rst deleted file mode 100644 index 3c7e8d542..000000000 --- a/docs/utilities.rst +++ /dev/null @@ -1,284 +0,0 @@ -.. _utilities: - -Utilities -========= - -There's basically three utilities to Paperless: the webserver, consumer, and -if needed, the exporter. They're all detailed here. - - -.. _utilities-webserver: - -The Webserver -------------- - -At the heart of it, Paperless is a simple Django webservice, and the entire -interface is based on Django's standard admin interface. Once running, visiting -the URL for your service delivers the admin, through which you can get a -detailed listing of all available documents, search for specific files, and -download whatever it is you're looking for. - - -.. _utilities-webserver-howto: - -How to Use It -............. - -The webserver is started via the ``manage.py`` script: - -.. code-block:: shell-session - - $ /path/to/paperless/src/manage.py runserver - -By default, the server runs on localhost, port 8000, but you can change this -with a few arguments, run ``manage.py --help`` for more information. - -Add the option ``--noreload`` to reduce resource usage. Otherwise, the server -continuously polls all source files for changes to auto-reload them. - -Note that when exiting this command your webserver will disappear. -If you want to run this full-time (which is kind of the point) -you'll need to have it start in the background -- something you'll need to -figure out for your own system. To get you started though, there are Systemd -service files in the ``scripts`` directory. - - -.. _utilities-consumer: - -The Consumer ------------- - -The consumer script runs in an infinite loop, constantly looking at a directory -for documents to parse and index. The process is pretty straightforward: - -1. Look in ``CONSUMPTION_DIR`` for a document. If one is found, go to #2. - If not, wait 10 seconds and try again. On Linux, new documents are detected - instantly via inotify, so there's no waiting involved. -2. Parse the document with Tesseract -3. Create a new record in the database with the OCR'd text -4. Attempt to automatically assign document attributes by doing some guesswork. - Read up on the :ref:`guesswork documentation` for more - information about this process. -5. Encrypt the document (if you have a passphrase set) and store it in the - ``media`` directory under ``documents/originals``. -6. Go to #1. - - -.. _utilities-consumer-howto: - -How to Use It -............. - -The consumer is started via the ``manage.py`` script: - -.. code-block:: shell-session - - $ /path/to/paperless/src/manage.py document_consumer - -This starts the service that will consume documents as they appear in -``CONSUMPTION_DIR``. - -Note that this command runs continuously, so exiting it will mean your webserver -disappears. If you want to run this full-time (which is kind of the point) -you'll need to have it start in the background -- something you'll need to -figure out for your own system. To get you started though, there are Systemd -service files in the ``scripts`` directory. - -Some command line arguments are available to customize the behavior of the -consumer. By default it will use ``/etc/paperless.conf`` values. Display the -help with: - -.. code-block:: shell-session - - $ /path/to/paperless/src/manage.py document_consumer --help - -.. _utilities-exporter: - -The Exporter ------------- - -Tired of fiddling with Paperless, or just want to do something stupid and are -afraid of accidentally damaging your files? You can export all of your -documents into neatly named, dated, and unencrypted files. - - -.. _utilities-exporter-howto: - -How to Use It -............. - -This too is done via the ``manage.py`` script: - -.. code-block:: shell-session - - $ /path/to/paperless/src/manage.py document_exporter /path/to/somewhere/ - -This will dump all of your unencrypted documents into ``/path/to/somewhere`` -for you to do with as you please. The files are accompanied with a special -file, ``manifest.json`` which can be used to :ref:`import the files -` at a later date if you wish. - - -.. _utilities-exporter-howto-docker: - -Docker -______ - -If you are :ref:`using Docker `, running the -expoorter is almost as easy. To mount a volume for exports, follow the -instructions in the ``docker-compose.yml.example`` file for the ``/export`` -volume (making the changes in your own ``docker-compose.yml`` file, of course). -Once you have the volume mounted, the command to run an export is: - -.. code-block:: shell-session - - $ docker-compose run --rm consumer document_exporter /export - -If you prefer to use ``docker run`` directly, supplying the necessary commandline -options: - -.. code-block:: shell-session - - $ # Identify your containers - $ docker-compose ps - Name Command State Ports - ------------------------------------------------------------------------- - paperless_consumer_1 /sbin/docker-entrypoint.sh ... Exit 0 - paperless_webserver_1 /sbin/docker-entrypoint.sh ... Exit 0 - - $ # Make sure to replace your passphrase and remove or adapt the id mapping - $ docker run --rm \ - --volumes-from paperless_data_1 \ - --volume /path/to/arbitrary/place:/export \ - -e PAPERLESS_PASSPHRASE=YOUR_PASSPHRASE \ - -e USERMAP_UID=1000 -e USERMAP_GID=1000 \ - paperless document_exporter /export - - -.. _utilities-importer: - -The Importer ------------- - -Looking to transfer Paperless data from one instance to another, or just want -to restore from a backup? This is your go-to toy. - - -.. _utilities-importer-howto: - -How to Use It -............. - -The importer works just like the exporter. You point it at a directory, and -the script does the rest of the work: - -.. code-block:: shell-session - - $ /path/to/paperless/src/manage.py document_importer /path/to/somewhere/ - -Docker -______ - -Assuming that you've already gone through the steps above in the -:ref:`export ` section, then the easiest thing -to do is just re-use the ``/export`` path you already setup: - -.. code-block:: shell-session - - $ docker-compose run --rm consumer document_importer /export - -Similarly, if you're not using docker-compose, you can adjust the export -instructions above to do the import. - - -.. _utilities-retagger: - -Re-running your tagging and correspondent matchers --------------------------------------------------- - -Say you've imported a few hundred documents and now want to introduce -a tag or set up a new correspondent, and apply its matching to all of -the currently-imported docs. This problem is common enough that -there are tools for it. - - -.. _utilities-retagger-howto: - -How to Do It -............ - -This too is done via the ``manage.py`` script: - -.. code:: bash - - $ /path/to/paperless/src/manage.py document_retagger - -Run this after changing or adding tagging rules. It'll loop over all -of the documents in your database and attempt to match all of your -tags to them. If one matches, it'll be applied. And don't worry, you -can run this as often as you like, it won't double-tag a document. - -.. code:: bash - - $ /path/to/paperless/src/manage.py document_correspondents - -This is the similar command to run after adding or changing a correspondent. - -.. _utilities-encyption: - -Enabling Encrpytion -------------------- - -Let's say you've imported a few documents to play around with paperless and now -you are using it more seriously and want to enable encryption of your files. - -.. utilities-encryption-howto: - -Basic Syntax -............. - -Again we'll use the ``manage.py`` script, passing ``change_storage_type``: - -.. code:: console - - $ /path/to/paperless/src/manage.py change_storage_type --help - usage: manage.py change_storage_type [-h] [--version] [-v {0,1,2,3}] - [--settings SETTINGS] - [--pythonpath PYTHONPATH] [--traceback] - [--no-color] [--passphrase PASSPHRASE] - {gpg,unencrypted} {gpg,unencrypted} - - This is how you migrate your stored documents from an encrypted state to an - unencrypted one (or vice-versa) - - positional arguments: - {gpg,unencrypted} The state you want to change your documents from - {gpg,unencrypted} The state you want to change your documents to - - optional arguments: - --passphrase PASSPHRASE - If PAPERLESS_PASSPHRASE isn't set already, you need to - specify it here - -Enabling Encryption -................... - -Basic usage to enable encryption of your document store (**USE A MORE SECURE PASSPHRASE**): - -(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here) - -.. code:: bash - - $ /path/to/paperless/src/manage.py change_storage_type [--passphrase SECR3TP4SSPHRA$E] unencrypted gpg - - -Disabling Encryption -.................... - -Basic usage to enable encryption of your document store: - -(Note: Again, if ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here) - -.. code:: bash - - $ /path/to/paperless/src/manage.py change_storage_type [--passphrase SECR3TP4SSPHRA$E] gpg unencrypted