-
+
From f770f0444a3f2415567a3ee6b468e965939b408d Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Mon, 28 Dec 2020 17:49:10 -0800
Subject: [PATCH 10/45] Fix hidden ng-select contents on focus
---
src-ui/src/theme_dark.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss
index 7cb195911..1f8380bad 100644
--- a/src-ui/src/theme_dark.scss
+++ b/src-ui/src/theme_dark.scss
@@ -269,7 +269,7 @@ $border-color-dark-mode: #47494f;
border-color: $border-color-dark-mode;
input:focus {
- background-color: $bg-dark-mode !important;
+ background-color: transparent !important;
}
}
From 4ecd5ada0661a1d256978c5d0d5b54b5db661f32 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Mon, 28 Dec 2020 19:07:12 -0800
Subject: [PATCH 11/45] Semantic correction
---
src-ui/src/app/services/app-view.service.ts | 8 ++++----
src-ui/src/index.html | 2 +-
src-ui/src/theme_dark.scss | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src-ui/src/app/services/app-view.service.ts b/src-ui/src/app/services/app-view.service.ts
index 33b47ce82..b44c8965f 100644
--- a/src-ui/src/app/services/app-view.service.ts
+++ b/src-ui/src/app/services/app-view.service.ts
@@ -19,11 +19,11 @@ export class AppViewService {
let darkModeEnabled = JSON.parse(localStorage.getItem(GENERAL_SETTINGS.DARK_MODE_ENABLED)) || GENERAL_SETTINGS.DARK_MODE_ENABLED_DEFAULT
if (darkModeUseSystem) {
- this.renderer.addClass(this.document.body, 'dark-mode-preferred')
- this.renderer.removeClass(this.document.body, 'dark-mode')
+ this.renderer.addClass(this.document.body, 'color-scheme-system')
+ this.renderer.removeClass(this.document.body, 'color-scheme-dark')
} else {
- this.renderer.removeClass(this.document.body, 'dark-mode-preferred')
- darkModeEnabled ? this.renderer.addClass(this.document.body, 'dark-mode') : this.renderer.removeClass(this.document.body, 'dark-mode')
+ this.renderer.removeClass(this.document.body, 'color-scheme-system')
+ darkModeEnabled ? this.renderer.addClass(this.document.body, 'color-scheme-dark') : this.renderer.removeClass(this.document.body, 'dark-mode')
}
}
diff --git a/src-ui/src/index.html b/src-ui/src/index.html
index f6a313a48..b688b25b5 100644
--- a/src-ui/src/index.html
+++ b/src-ui/src/index.html
@@ -8,7 +8,7 @@
-
+
diff --git a/src-ui/src/theme_dark.scss b/src-ui/src/theme_dark.scss
index 1f8380bad..a122f1d86 100644
--- a/src-ui/src/theme_dark.scss
+++ b/src-ui/src/theme_dark.scss
@@ -319,11 +319,11 @@ $border-color-dark-mode: #47494f;
}
}
-body.dark-mode {
+body.color-scheme-dark {
@include dark-mode;
}
-@media (prefers-color-scheme: dark) {
- body.dark-mode-preferred {
+body.color-scheme-system {
+ @media (prefers-color-scheme: dark) {
@include dark-mode;
}
}
From b8e8bf3dd47d738f2e4c8ca67f14b6e8131071dc Mon Sep 17 00:00:00 2001
From: Jo Vandeginste
Date: Tue, 29 Dec 2020 01:23:40 +0100
Subject: [PATCH 12/45] Add the new paperless_tika parser
This parser will use an external Tika and Gotenberg server to parse
"Office" documents (.doc, .xls, .odt, etc.)
Signed-off-by: Jo Vandeginste
---
Pipfile | 1 +
docker/hub/docker-compose.tika.yml | 43 ++++++++++
docker/local/docker-compose.tika.yml | 43 ++++++++++
docs/configuration.rst | 29 +++++++
src/paperless/settings.py | 5 ++
src/paperless_tika/apps.py | 14 ++++
src/paperless_tika/parsers.py | 118 +++++++++++++++++++++++++++
src/paperless_tika/signals.py | 20 +++++
src/paperless_tika/test.py | 3 +
9 files changed, 276 insertions(+)
create mode 100644 docker/hub/docker-compose.tika.yml
create mode 100644 docker/local/docker-compose.tika.yml
create mode 100644 src/paperless_tika/apps.py
create mode 100644 src/paperless_tika/parsers.py
create mode 100644 src/paperless_tika/signals.py
create mode 100644 src/paperless_tika/test.py
diff --git a/Pipfile b/Pipfile
index 48759307c..f6301b98f 100644
--- a/Pipfile
+++ b/Pipfile
@@ -42,6 +42,7 @@ whoosh="~=2.7.4"
inotifyrecursive = "~=0.3.4"
ocrmypdf = "*"
tqdm = "*"
+tika = "*"
[dev-packages]
coveralls = "*"
diff --git a/docker/hub/docker-compose.tika.yml b/docker/hub/docker-compose.tika.yml
new file mode 100644
index 000000000..04dd3260e
--- /dev/null
+++ b/docker/hub/docker-compose.tika.yml
@@ -0,0 +1,43 @@
+version: "3.4"
+services:
+ broker:
+ image: redis:6.0
+ restart: always
+
+ webserver:
+ image: jonaswinkler/paperless-ng:0.9.9
+ restart: always
+ depends_on:
+ - broker
+ ports:
+ - 8000:8000
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8000"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ volumes:
+ - data:/usr/src/paperless/data
+ - media:/usr/src/paperless/media
+ - ./export:/usr/src/paperless/export
+ - ./consume:/usr/src/paperless/consume
+ env_file: docker-compose.env
+ environment:
+ PAPERLESS_REDIS: redis://broker:6379
+ PAPERLESS_TIKA: 1
+ GOTENBERG_SERVER_ENDPOINT: http://gotenberg:3000
+ TIKA_SERVER_ENDPOINT: http://tika:9998
+
+ gotenberg:
+ image: thecodingmachine/gotenberg
+ restart: unless-stopped
+ environment:
+ DISABLE_GOOGLE_CHROME: 1
+
+ tika:
+ image: apache/tika
+ restart: unless-stopped
+
+volumes:
+ data:
+ media:
diff --git a/docker/local/docker-compose.tika.yml b/docker/local/docker-compose.tika.yml
new file mode 100644
index 000000000..ab901f306
--- /dev/null
+++ b/docker/local/docker-compose.tika.yml
@@ -0,0 +1,43 @@
+version: "3.4"
+services:
+ broker:
+ image: redis:6.0
+ restart: always
+
+ webserver:
+ build: .
+ restart: always
+ depends_on:
+ - broker
+ ports:
+ - 8000:8000
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8000"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ volumes:
+ - data:/usr/src/paperless/data
+ - media:/usr/src/paperless/media
+ - ./export:/usr/src/paperless/export
+ - ./consume:/usr/src/paperless/consume
+ env_file: docker-compose.env
+ environment:
+ PAPERLESS_REDIS: redis://broker:6379
+ PAPERLESS_TIKA: 1
+ GOTENBERG_SERVER_ENDPOINT: http://gotenberg:3000
+ TIKA_SERVER_ENDPOINT: http://tika:9998
+
+ gotenberg:
+ image: thecodingmachine/gotenberg
+ restart: unless-stopped
+ environment:
+ DISABLE_GOOGLE_CHROME: 1
+
+ tika:
+ image: apache/tika
+ restart: unless-stopped
+
+volumes:
+ data:
+ media:
diff --git a/docs/configuration.rst b/docs/configuration.rst
index 5ccb80b3a..f53acb633 100644
--- a/docs/configuration.rst
+++ b/docs/configuration.rst
@@ -277,6 +277,35 @@ PAPERLESS_OCR_USER_ARG=
{"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
+.. _configuration-tika:
+
+Tika settings
+#############
+
+Paperless can make use of `Tika `_ and
+`Gotenberg `_ for parsing and
+converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you
+wish to use this, you must provide a Tika server and a Gotenberg server,
+configure their endpoints, and enable the feature.
+
+If you run paperless on docker, you can add those services to the docker-compose
+file (see the examples provided).
+
+PAPERLESS_TIKA=
+ Enable (or disable) the Tika parser.
+
+ Defaults to false.
+
+TIKA_SERVER_ENDPOINT=
+ Set the endpoint URL were Paperless can reach your Tika server.
+
+ Defaults to "http://localhost:9998".
+
+GOTENBERG_SERVER_ENDPOINT=
+ Set the endpoint URL were Paperless can reach your Gotenberg server.
+
+ Defaults to "http://localhost:3000".
+
Software tweaks
###############
diff --git a/src/paperless/settings.py b/src/paperless/settings.py
index 5af1be85e..219166cf5 100644
--- a/src/paperless/settings.py
+++ b/src/paperless/settings.py
@@ -87,6 +87,7 @@ INSTALLED_APPS = [
"documents.apps.DocumentsConfig",
"paperless_tesseract.apps.PaperlessTesseractConfig",
"paperless_text.apps.PaperlessTextConfig",
+ "paperless_tika.apps.PaperlessTikaConfig",
"paperless_mail.apps.PaperlessMailConfig",
"django.contrib.admin",
@@ -424,3 +425,7 @@ for t in json.loads(os.getenv("PAPERLESS_FILENAME_PARSE_TRANSFORMS", "[]")):
PAPERLESS_FILENAME_FORMAT = os.getenv("PAPERLESS_FILENAME_FORMAT")
THUMBNAIL_FONT_NAME = os.getenv("PAPERLESS_THUMBNAIL_FONT_NAME", "/usr/share/fonts/liberation/LiberationSerif-Regular.ttf")
+
+# Tika settings
+PAPERLESS_TIKA = __get_boolean("PAPERLESS_TIKA", "NO")
+GOTENBERG_SERVER_ENDPOINT = os.getenv("GOTENBERG_SERVER_ENDPOINT", "http://localhost:3000")
diff --git a/src/paperless_tika/apps.py b/src/paperless_tika/apps.py
new file mode 100644
index 000000000..c29586d6a
--- /dev/null
+++ b/src/paperless_tika/apps.py
@@ -0,0 +1,14 @@
+from django.apps import AppConfig
+from django.conf import settings
+from paperless_tika.signals import tika_consumer_declaration
+
+
+class PaperlessTikaConfig(AppConfig):
+ name = "paperless_tika"
+
+ def ready(self):
+ from documents.signals import document_consumer_declaration
+
+ if settings.PAPERLESS_TIKA:
+ document_consumer_declaration.connect(tika_consumer_declaration)
+ AppConfig.ready(self)
diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py
new file mode 100644
index 000000000..5a77681f2
--- /dev/null
+++ b/src/paperless_tika/parsers.py
@@ -0,0 +1,118 @@
+import os
+import subprocess
+import tika
+import requests
+import dateutil.parser
+
+from PIL import ImageDraw, ImageFont, Image
+from django.conf import settings
+
+from documents.parsers import DocumentParser, ParseError, run_convert
+from paperless_tesseract.parsers import RasterisedDocumentParser
+from tika import parser
+
+
+class TikaDocumentParser(DocumentParser):
+ """
+ This parser sends documents to a local tika server
+ """
+
+ def get_thumbnail(self, document_path, mime_type):
+ self.log("info", f"[TIKA_THUMB] Generating thumbnail for{document_path}")
+ archive_path = self.archive_path
+
+ out_path = os.path.join(self.tempdir, "convert.png")
+
+ # Run convert to get a decent thumbnail
+ try:
+ run_convert(
+ density=300,
+ scale="500x5000>",
+ alpha="remove",
+ strip=True,
+ trim=False,
+ input_file="{}[0]".format(archive_path),
+ output_file=out_path,
+ logging_group=self.logging_group,
+ )
+ except ParseError:
+ # if convert fails, fall back to extracting
+ # the first PDF page as a PNG using Ghostscript
+ self.log(
+ "warning",
+ "Thumbnail generation with ImageMagick failed, falling back "
+ "to ghostscript. Check your /etc/ImageMagick-x/policy.xml!",
+ )
+ gs_out_path = os.path.join(self.tempdir, "gs_out.png")
+ cmd = [
+ settings.GS_BINARY,
+ "-q",
+ "-sDEVICE=pngalpha",
+ "-o",
+ gs_out_path,
+ archive_path,
+ ]
+ if not subprocess.Popen(cmd).wait() == 0:
+ raise ParseError("Thumbnail (gs) failed at {}".format(cmd))
+ # then run convert on the output from gs
+ run_convert(
+ density=300,
+ scale="500x5000>",
+ alpha="remove",
+ strip=True,
+ trim=False,
+ input_file=gs_out_path,
+ output_file=out_path,
+ logging_group=self.logging_group,
+ )
+
+ return out_path
+
+ def parse(self, document_path, mime_type):
+ self.log("info", f"[TIKA_PARSE] Sending {document_path} to Tika server")
+
+ try:
+ parsed = parser.from_file(document_path)
+ except requests.exceptions.HTTPError as err:
+ raise ParseError(f"Could not parse {document_path} with tika server: {err}")
+
+ try:
+ content = parsed["content"].strip()
+ except:
+ content = ""
+
+ try:
+ creation_date = dateutil.parser.isoparse(
+ parsed["metadata"]["Creation-Date"]
+ )
+ except:
+ creation_date = None
+
+ archive_path = os.path.join(self.tempdir, "convert.pdf")
+ convert_to_pdf(self, document_path, archive_path)
+
+ self.archive_path = archive_path
+ self.date = creation_date
+ self.text = content
+
+
+def convert_to_pdf(self, document_path, pdf_path):
+ pdf_path = os.path.join(self.tempdir, "convert.pdf")
+ gotenberg_server = settings.GOTENBERG_SERVER_ENDPOINT
+ url = gotenberg_server + "/convert/office"
+
+ self.log("info", f"[TIKA] Converting {document_path} to PDF as {pdf_path}")
+ files = {"files": open(document_path, "rb")}
+ headers = {}
+
+ try:
+ response = requests.post(url, files=files, headers=headers)
+ response.raise_for_status() # ensure we notice bad responses
+ except requests.exceptions.HTTPError as err:
+ raise ParseError(
+ f"Could not contact gotenberg server at {gotenberg_server}: {err}"
+ )
+
+ file = open(pdf_path, "wb")
+ file.write(response.content)
+ file.close()
diff --git a/src/paperless_tika/signals.py b/src/paperless_tika/signals.py
new file mode 100644
index 000000000..409daebe2
--- /dev/null
+++ b/src/paperless_tika/signals.py
@@ -0,0 +1,20 @@
+from .parsers import TikaDocumentParser
+
+
+def tika_consumer_declaration(sender, **kwargs):
+ return {
+ "parser": TikaDocumentParser,
+ "weight": 10,
+ "mime_types": {
+ "application/msword": ".doc",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx",
+ "application/vnd.ms-excel": ".xls",
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ".xlsx",
+ "application/vnd.ms-powerpoint": ".ppt",
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation": ".pptx",
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ".ppsx",
+ "application/vnd.oasis.opendocument.presentation": ".odp",
+ "application/vnd.oasis.opendocument.spreadsheet": ".ods",
+ "application/vnd.oasis.opendocument.text": ".odt",
+ },
+ }
diff --git a/src/paperless_tika/test.py b/src/paperless_tika/test.py
new file mode 100644
index 000000000..0a2885226
--- /dev/null
+++ b/src/paperless_tika/test.py
@@ -0,0 +1,3 @@
+import magic
+m = magic.from_file("/nfsstorage/jo/syncthing/Documenten/20R-309.153.052.pdf")
+print(m)
From a67443c195047cfebf0338e7e071941118497039 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Tue, 29 Dec 2020 16:53:42 -0800
Subject: [PATCH 13/45] Compatability with new settings service
---
src-ui/src/app/services/app-view.service.ts | 14 +++++++++-----
src-ui/src/app/services/settings.service.ts | 6 +++++-
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src-ui/src/app/services/app-view.service.ts b/src-ui/src/app/services/app-view.service.ts
index b44c8965f..6af2e43af 100644
--- a/src-ui/src/app/services/app-view.service.ts
+++ b/src-ui/src/app/services/app-view.service.ts
@@ -1,6 +1,6 @@
import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';
import { DOCUMENT } from '@angular/common';
-import { GENERAL_SETTINGS } from 'src/app/data/storage-keys';
+import { SettingsService, SETTINGS_KEYS } from './settings.service';
@Injectable({
providedIn: 'root'
@@ -8,22 +8,26 @@ import { GENERAL_SETTINGS } from 'src/app/data/storage-keys';
export class AppViewService {
private renderer: Renderer2;
- constructor(rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document) {
+ constructor(
+ private settings: SettingsService,
+ private rendererFactory: RendererFactory2,
+ @Inject(DOCUMENT) private document
+ ) {
this.renderer = rendererFactory.createRenderer(null, null);
this.updateDarkModeSettings()
}
updateDarkModeSettings() {
- let darkModeUseSystem = JSON.parse(localStorage.getItem(GENERAL_SETTINGS.DARK_MODE_USE_SYSTEM)) && GENERAL_SETTINGS.DARK_MODE_USE_SYSTEM_DEFAULT
- let darkModeEnabled = JSON.parse(localStorage.getItem(GENERAL_SETTINGS.DARK_MODE_ENABLED)) || GENERAL_SETTINGS.DARK_MODE_ENABLED_DEFAULT
+ let darkModeUseSystem = this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)
+ let darkModeEnabled = this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)
if (darkModeUseSystem) {
this.renderer.addClass(this.document.body, 'color-scheme-system')
this.renderer.removeClass(this.document.body, 'color-scheme-dark')
} else {
this.renderer.removeClass(this.document.body, 'color-scheme-system')
- darkModeEnabled ? this.renderer.addClass(this.document.body, 'color-scheme-dark') : this.renderer.removeClass(this.document.body, 'dark-mode')
+ darkModeEnabled ? this.renderer.addClass(this.document.body, 'color-scheme-dark') : this.renderer.removeClass(this.document.body, 'color-scheme-dark')
}
}
diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts
index 00e6ff639..7b1cfe9e3 100644
--- a/src-ui/src/app/services/settings.service.ts
+++ b/src-ui/src/app/services/settings.service.ts
@@ -10,12 +10,16 @@ export const SETTINGS_KEYS = {
BULK_EDIT_CONFIRMATION_DIALOGS: 'general-settings:bulk-edit:confirmation-dialogs',
BULK_EDIT_APPLY_ON_CLOSE: 'general-settings:bulk-edit:apply-on-close',
DOCUMENT_LIST_SIZE: 'general-settings:documentListSize',
+ DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system',
+ DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled'
}
const SETTINGS: PaperlessSettings[] = [
{key: SETTINGS_KEYS.BULK_EDIT_CONFIRMATION_DIALOGS, type: "boolean", default: true},
{key: SETTINGS_KEYS.BULK_EDIT_APPLY_ON_CLOSE, type: "boolean", default: false},
- {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}
+ {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50},
+ {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true},
+ {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}
]
@Injectable({
From ebe2ba401d6ba43c6ccb79881ae9e4003216ef3c Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Tue, 29 Dec 2020 16:58:19 -0800
Subject: [PATCH 14/45] Consistent settings screen
---
.../manage/settings/settings.component.html | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html
index d15c7fe2b..93c7c98b4 100644
--- a/src-ui/src/app/components/manage/settings/settings.component.html
+++ b/src-ui/src/app/components/manage/settings/settings.component.html
@@ -39,14 +39,16 @@
-
-
-
Bulk editing
+
Bulk editing
-
-
+
From eb47fb5501de405b7e049d06f60d477d76717457 Mon Sep 17 00:00:00 2001
From: "transifex-integration[bot]"
<43880903+transifex-integration[bot]@users.noreply.github.com>
Date: Wed, 30 Dec 2020 15:35:33 +0000
Subject: [PATCH 15/45] Translate /src-ui/messages.xlf in de_DE
at least 50% translated for the source file '/src-ui/messages.xlf'
on the 'de_DE' language.
Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
---
src-ui/src/locale/messages.de_DE.xlf | 1819 ++++++++++++++++++++++++++
1 file changed, 1819 insertions(+)
create mode 100644 src-ui/src/locale/messages.de_DE.xlf
diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf
new file mode 100644
index 000000000..2b23832df
--- /dev/null
+++ b/src-ui/src/locale/messages.de_DE.xlf
@@ -0,0 +1,1819 @@
+
+
+
+
+ Documents
+ Dokumente
+
+ src/app/components/document-list/document-list.component.ts
+ 38
+
+
+
+ View "" saved successfully.
+ Ansicht "" erfolgreich gespeichert.
+
+ src/app/components/document-list/document-list.component.ts
+ 84
+
+
+
+ View "" created successfully.
+ Ansicht "" erfolgreich erstellt.
+
+ src/app/components/document-list/document-list.component.ts
+ 103
+
+
+
+ Select
+ Auswählen
+
+ src/app/components/document-list/document-list.component.html
+ 7
+
+
+
+ Select none
+ Nichts auswählen
+
+ src/app/components/document-list/document-list.component.html
+ 11
+
+
+
+ Select page
+ Seite auswählen
+
+ src/app/components/document-list/document-list.component.html
+ 12
+
+
+
+ Select all
+ Alles auswählen
+
+ src/app/components/document-list/document-list.component.html
+ 13
+
+
+
+ Sort by
+ Sortieren
+
+ src/app/components/document-list/document-list.component.html
+ 41
+
+
+
+ Views
+ Ansicht
+
+ src/app/components/document-list/document-list.component.html
+ 64
+
+
+
+ Save as...
+ Speichern als...
+
+ src/app/components/document-list/document-list.component.html
+ 72
+
+
+
+ Save ""
+ "" speichern
+
+ src/app/components/document-list/document-list.component.html
+ 71
+
+
+
+ {VAR_PLURAL, plural, =1 {document} other {documents}}
+ {VAR_PLURAL, plural, =1 {Dokument} other {Dokumente}}
+
+ src/app/components/document-list/document-list.component.html
+ 86
+
+
+
+ Selected of
+ von ausgewählt
+
+ src/app/components/document-list/document-list.component.html
+ 86
+
+
+
+ {VAR_PLURAL, plural, =1 {1 document} other { documents}}
+ {VAR_PLURAL, plural, =1 {1 Dokument} other { Dokumente}}
+
+ src/app/components/document-list/document-list.component.html
+ 87
+
+
+
+ ASN
+ ASN
+
+ src/app/components/document-list/document-list.component.html
+ 100
+
+
+
+ Correspondent
+ Korrespondent
+
+ src/app/components/document-list/document-list.component.html
+ 101
+
+
+
+ Title
+ Titel
+
+ src/app/components/document-list/document-list.component.html
+ 102
+
+
+
+ Document type
+ Dokumenttyp
+
+ src/app/components/document-list/document-list.component.html
+ 103
+
+
+
+ Created
+ Erstellt
+
+ src/app/components/document-list/document-list.component.html
+ 104
+
+
+
+ Added
+ Hinzugefügt
+
+ src/app/components/document-list/document-list.component.html
+ 105
+
+
+
+ Confirm delete
+ Löschen bestätigen
+
+ src/app/components/document-detail/document-detail.component.ts
+ 161
+
+
+
+ Do you really want to delete document ''?
+ Möchten Sie das Dokument '' wirklich löschen?
+
+ src/app/components/document-detail/document-detail.component.ts
+ 162
+
+
+
+ The files for this document will be deleted permanently. This operation cannot be undone.
+ Die Dateien dieses Dokuments werden permanent gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.
+
+ src/app/components/document-detail/document-detail.component.ts
+ 163
+
+
+
+ Delete document
+ Dokument löschen
+
+ src/app/components/document-detail/document-detail.component.ts
+ 165
+
+
+
+ Delete
+ Löschen
+
+ src/app/components/document-detail/document-detail.component.html
+ 15
+
+
+
+ Download
+ Herunterladen
+
+ src/app/components/document-detail/document-detail.component.html
+ 23
+
+
+
+ More like this
+ Ähnliche Dokumente
+
+ src/app/components/document-detail/document-detail.component.html
+ 38
+
+
+
+ Close
+ Schließen
+
+ src/app/components/document-detail/document-detail.component.html
+ 44
+
+
+
+ Details
+ Details
+
+ src/app/components/document-detail/document-detail.component.html
+ 56
+
+
+
+ Content
+ Inhalt
+
+ src/app/components/document-detail/document-detail.component.html
+ 76
+
+
+
+ Metadata
+ Metadaten
+
+ src/app/components/document-detail/document-detail.component.html
+ 85
+
+
+
+ Discard
+ Verwerfen
+
+ src/app/components/document-detail/document-detail.component.html
+ 134
+
+
+
+ Save
+ Speichern
+
+ src/app/components/document-detail/document-detail.component.html
+ 136
+
+
+
+ Page
+ Seite
+
+ src/app/components/document-detail/document-detail.component.html
+ 4
+
+
+
+ of
+ von
+
+ src/app/components/document-detail/document-detail.component.html
+ 8
+
+
+
+ Download original
+ Original herunterladen
+
+ src/app/components/document-detail/document-detail.component.html
+ 29
+
+
+
+ Archive serial number
+ Archiv-Seriennummer
+
+ src/app/components/document-detail/document-detail.component.html
+ 61
+
+
+
+ Date created
+ Erstellt am
+
+ src/app/components/document-detail/document-detail.component.html
+ 65
+
+
+
+ Tags
+ Tags
+
+ src/app/components/document-detail/document-detail.component.html
+ 70
+
+
+
+ Date modified
+ Geändert am
+
+ src/app/components/document-detail/document-detail.component.html
+ 91
+
+
+
+ Date added
+ Hinzugefügt am
+
+ src/app/components/document-detail/document-detail.component.html
+ 95
+
+
+
+ Media filename
+ Media-Dateiname
+
+ src/app/components/document-detail/document-detail.component.html
+ 99
+
+
+
+ Original MD5 checksum
+ MD5-Prüfsumme Original
+
+ src/app/components/document-detail/document-detail.component.html
+ 103
+
+
+
+ Original file size
+ Dateigröße Original
+
+ src/app/components/document-detail/document-detail.component.html
+ 107
+
+
+
+ Original mime type
+ MIME-Typ Original
+
+ src/app/components/document-detail/document-detail.component.html
+ 111
+
+
+
+ Archive MD5 checksum
+ MD5-Prüfsumme Archiv
+
+ src/app/components/document-detail/document-detail.component.html
+ 115
+
+
+
+ Archive file size
+ Dateigröße Archiv
+
+ src/app/components/document-detail/document-detail.component.html
+ 119
+
+
+
+ Original document metadata
+ Original-Metadaten
+
+ src/app/components/document-detail/document-detail.component.html
+ 125
+
+
+
+ Archived document metadata
+ Metadaten des archivierten Dokuments
+
+ src/app/components/document-detail/document-detail.component.html
+ 126
+
+
+
+ Save & next
+ Speichern & weiter
+
+ src/app/components/document-detail/document-detail.component.html
+ 135
+
+
+
+ Hello , welcome to Paperless-ng!
+ Hallo , Willkommen zu Paperless-ng
+
+ src/app/components/dashboard/dashboard.component.ts
+ 33
+
+
+
+ Welcome to Paperless-ng!
+ Willkommen zu Paperless-ng!
+
+ src/app/components/dashboard/dashboard.component.ts
+ 35
+
+
+
+ Dashboard
+ Startseite
+
+ src/app/components/dashboard/dashboard.component.html
+ 1
+
+
+
+ Do you really want to delete the tag ""?
+ Möchten Sie das Tag "" wirklich löschen?
+
+ src/app/components/manage/tag-list/tag-list.component.ts
+ 31
+
+
+
+ Create
+ Erstellen
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 2
+
+
+
+ Name
+ Name
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 13
+
+
+
+ Color
+ Farbe
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 14
+
+
+
+ Matching
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 15
+
+
+
+ Document count
+ Anzahl Dokumente
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 16
+
+
+
+ Actions
+ Aktionen
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 17
+
+
+
+ Documents
+ Dokumente
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 32
+
+
+
+ Edit
+ Bearbeiten
+
+ src/app/components/manage/tag-list/tag-list.component.html
+ 37
+
+
+
+ Do you really want to delete the document type ""?
+ Möchten Sie den Dokumenttyp "" wirklich löschen?
+
+ src/app/components/manage/document-type-list/document-type-list.component.ts
+ 26
+
+
+
+ Document types
+ Dokumenttypen
+
+ src/app/components/manage/document-type-list/document-type-list.component.html
+ 1
+
+
+
+ Logs
+ Protokoll
+
+ src/app/components/manage/logs/logs.component.html
+ 1
+
+
+
+ Filter
+ Filtern
+
+ src/app/components/manage/logs/logs.component.html
+ 7
+
+
+
+ Saved view " deleted.
+ Ansicht gelöscht.
+
+ src/app/components/manage/settings/settings.component.ts
+ 52
+
+
+
+ Settings saved successfully.
+ Einstellungen erfolgreich gespeichert.
+
+ src/app/components/manage/settings/settings.component.ts
+ 61
+
+
+
+ Error while storing settings on server:
+ Fehler beim Speichern der Einstellungen auf dem Server:
+
+ src/app/components/manage/settings/settings.component.ts
+ 73
+
+
+
+ General settings
+ Allgemeine Einstellungen
+
+ src/app/components/manage/settings/settings.component.html
+ 10
+
+
+
+ Saved views
+ Gespeicherte Ansichten
+
+ src/app/components/manage/settings/settings.component.html
+ 41
+
+
+
+ Document list
+ Dokumentliste
+
+ src/app/components/manage/settings/settings.component.html
+ 13
+
+
+
+ Items per page
+ Dokumente pro Seite
+
+ src/app/components/manage/settings/settings.component.html
+ 17
+
+
+
+ Bulk editing
+ Massenbearbeitung
+
+ src/app/components/manage/settings/settings.component.html
+ 33
+
+
+
+ Show confirmation dialogs
+ Bestätigungsdialoge anzeigen
+
+ src/app/components/manage/settings/settings.component.html
+ 35
+
+
+
+ Deleting documents will always ask for confirmation.
+ Beim Löschen von Dokumenten wird immer nach einer Bestätigung gefragt.
+
+ src/app/components/manage/settings/settings.component.html
+ 35
+
+
+
+ Apply on close
+ Anwenden beim Schließen
+
+ src/app/components/manage/settings/settings.component.html
+ 36
+
+
+
+ Appears on
+ Erscheint auf
+
+ src/app/components/manage/settings/settings.component.html
+ 53
+
+
+
+ Show on dashboard
+ Auf Startseite zeigen
+
+ src/app/components/manage/settings/settings.component.html
+ 56
+
+
+
+ Show in sidebar
+ In Seitenleiste zeigen
+
+ src/app/components/manage/settings/settings.component.html
+ 60
+
+
+
+ No saved views defined.
+ Keine gespeicherten Ansichten vorhanden.
+
+ src/app/components/manage/settings/settings.component.html
+ 70
+
+
+
+ 404 Not Found
+ 404 Nicht gefunden
+
+ src/app/components/not-found/not-found.component.html
+ 7
+
+
+
+ Do you really want to delete the correspondent ""?
+ Möchten Sie den Korrespondenten "" wirklich löschen?
+
+ src/app/components/manage/correspondent-list/correspondent-list.component.ts
+ 26
+
+
+
+ Correspondents
+ Korrespondenten
+
+ src/app/components/manage/correspondent-list/correspondent-list.component.html
+ 1
+
+
+
+ Last correspondence
+ Letzter Kontakt
+
+ src/app/components/manage/correspondent-list/correspondent-list.component.html
+ 15
+
+
+
+ Confirmation
+ Bestätigung
+
+ src/app/components/common/confirm-dialog/confirm-dialog.component.ts
+ 17
+
+
+
+ Confirm
+ Bestätigen
+
+ src/app/components/common/confirm-dialog/confirm-dialog.component.ts
+ 29
+
+
+
+ Create new correspondent
+ Neuen Korrespondenten erstellen
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts
+ 21
+
+
+
+ Edit correspondent
+ Korrespondenten bearbeiten
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts
+ 25
+
+
+
+ Could not save correspondent:
+ Konnte Korrespondent nicht speichern:
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.ts
+ 29
+
+
+
+ Matching algorithm
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 11
+
+
+
+ Match
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 12
+
+
+
+ Auto matching does not require you to fill in this field.
+ Für Automatische Zuweisung muss dieses Feld nicht ausgefüllt werden.
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 12
+
+
+
+ Case insensitive
+ Groß-/Kleinschreibung irrelevant
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 13
+
+
+
+ Auto matching ignores this option.
+ Automatische Zuweisung beachtet diese Einstellung nicht.
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 13
+
+
+
+ Cancel
+ Abbrechen
+
+ src/app/components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component.html
+ 16
+
+
+
+ Create new tag
+ Neues Tag erstellen
+
+ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts
+ 21
+
+
+
+ Edit tag
+ Tag bearbeiten
+
+ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts
+ 25
+
+
+
+ Could not save tag:
+ Konnte Tag nicht speichern:
+
+ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts
+ 29
+
+
+
+ Inbox tag
+ Posteingangs-Tag
+
+ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html
+ 21
+
+
+
+ Inbox tags are automatically assigned to all consumed documents.
+ Ein Tag mit dieser Option wird automatisch allen neuen Dokumenten zugewiesen.
+
+ src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html
+ 21
+
+
+
+ Create new document type
+ Neuen Dokumenttyp erstellen
+
+ src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts
+ 21
+
+
+
+ Edit document type
+ Dokumenttyp bearbeiten
+
+ src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts
+ 25
+
+
+
+ Could not save document type:
+ Konnte Dokumenttyp nicht speichern:
+
+ src/app/components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component.ts
+ 29
+
+
+
+ Search results
+ Suchergebnisse
+
+ src/app/components/search/search.component.html
+ 1
+
+
+
+ Invalid search query:
+ Ungültige Suchanfrage:
+
+ src/app/components/search/search.component.html
+ 4
+
+
+
+ Showing documents similar to
+ Zeige ähnliche Dokumente zu
+
+ src/app/components/search/search.component.html
+ 7
+
+
+
+ Search query:
+ Suchanfrage:
+
+ src/app/components/search/search.component.html
+ 11
+
+
+
+ Did you mean ""?
+ Meinten Sie ""?
+
+ src/app/components/search/search.component.html
+ 13
+
+
+
+ {VAR_PLURAL, plural, =0 {No results} =1 {One result} other { results}}
+ {VAR_PLURAL, plural, =0 {Keine Ergebnisse} =1 {Ein Ergebnis} other { Ergebnisse}}
+
+ src/app/components/search/search.component.html
+ 18
+
+
+
+ Paperless-ng
+ Paperless-ng
+
+ src/app/components/app-frame/app-frame.component.html
+ 4
+
+ app title
+
+
+ Search for documents
+ Nach Dokumenten suchen
+
+ src/app/components/app-frame/app-frame.component.html
+ 12
+
+
+
+ Manage
+ Verwalten
+
+ src/app/components/app-frame/app-frame.component.html
+ 77
+
+
+
+ Settings
+ Einstellungen
+
+ src/app/components/app-frame/app-frame.component.html
+ 112
+
+
+
+ Admin
+ Administration
+
+ src/app/components/app-frame/app-frame.component.html
+ 119
+
+
+
+ Misc
+ Weiteres
+
+ src/app/components/app-frame/app-frame.component.html
+ 125
+
+
+
+ Documentation
+ Dokumentation
+
+ src/app/components/app-frame/app-frame.component.html
+ 132
+
+
+
+ GitHub
+ GitHub
+
+ src/app/components/app-frame/app-frame.component.html
+ 139
+
+
+
+ Logout
+ Abmelden
+
+ src/app/components/app-frame/app-frame.component.html
+ 146
+
+
+
+ Open documents
+ Geöffnete Dokumente
+
+ src/app/components/app-frame/app-frame.component.html
+ 57
+
+
+
+ Close all
+ Alle schließen
+
+ src/app/components/app-frame/app-frame.component.html
+ 71
+
+
+
+ Correspondent:
+ Korrespondent:
+
+ src/app/components/document-list/filter-editor/filter-editor.component.ts
+ 28
+
+
+
+ Type:
+ Typ:
+
+ src/app/components/document-list/filter-editor/filter-editor.component.ts
+ 31
+
+
+
+ Tag:
+ Tag:
+
+ src/app/components/document-list/filter-editor/filter-editor.component.ts
+ 34
+
+
+
+ Filter by:
+ Filtern nach:
+
+ src/app/components/document-list/filter-editor/filter-editor.component.html
+ 4
+
+
+
+ Filter tags
+ Tags filtern
+
+ src/app/components/document-list/filter-editor/filter-editor.component.html
+ 12
+
+
+
+ Filter correspondents
+ Korrespondenten filtern
+
+ src/app/components/document-list/filter-editor/filter-editor.component.html
+ 19
+
+
+
+ Filter document types
+ Dokumenttypen filtern
+
+ src/app/components/document-list/filter-editor/filter-editor.component.html
+ 25
+
+
+
+ Clear all filters
+ Filter zurücksetzen
+
+ src/app/components/document-list/filter-editor/filter-editor.component.html
+ 47
+
+
+
+ Not assigned
+ Nicht zugewiesen
+
+ src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts
+ 145
+
+ Filter drop down element to filter for documents with no correspondent/type/tag assigned
+
+
+ Apply
+ Anwenden
+
+ src/app/components/common/filterable-dropdown/filterable-dropdown.component.html
+ 28
+
+
+
+ Last 7 days
+ Letzte 7 Tage
+
+ src/app/components/common/date-dropdown/date-dropdown.component.ts
+ 24
+
+
+
+ Last month
+ Letzten Monat
+
+ src/app/components/common/date-dropdown/date-dropdown.component.ts
+ 25
+
+
+
+ Last 3 months
+ Letzte 3 Monate
+
+ src/app/components/common/date-dropdown/date-dropdown.component.ts
+ 26
+
+
+
+ Last year
+ Letztes Jahr
+
+ src/app/components/common/date-dropdown/date-dropdown.component.ts
+ 27
+
+
+
+ After
+ Nach
+
+ src/app/components/common/date-dropdown/date-dropdown.component.html
+ 13
+
+
+
+ Before
+ Vor
+
+ src/app/components/common/date-dropdown/date-dropdown.component.html
+ 29
+
+
+
+ Clear
+ Zurücksetzen
+
+ src/app/components/common/date-dropdown/date-dropdown.component.html
+ 18
+
+
+
+ View
+ Anzeigen
+
+ src/app/components/document-list/document-card-large/document-card-large.component.html
+ 50
+
+
+
+ Score:
+ Relevanz:
+
+ src/app/components/document-list/document-card-large/document-card-large.component.html
+ 61
+
+
+
+ Created:
+ Erstellt:
+
+ src/app/components/document-list/document-card-large/document-card-large.component.html
+ 65
+
+
+
+ Filter by correspondent
+ Nach Korrespondent filtern
+
+ src/app/components/document-list/document-card-large/document-card-large.component.html
+ 20
+
+
+
+ Filter by tag
+ Nach Tag filtern
+
+ src/app/components/document-list/document-card-large/document-card-large.component.html
+ 24
+
+
+
+ View in browser
+ Im Browser anzeigen
+
+ src/app/components/document-list/document-card-small/document-card-small.component.html
+ 40
+
+
+
+ "" and ""
+ "" und ""
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 103
+
+ This is for messages like 'modify "tag1" and "tag2"'
+
+
+ ""
+ ""
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 105
+
+
+
+ ,
+ ,
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 105
+
+ this is used to separate enumerations and should probably be a comma and a whitespace in most languages
+
+
+ and ""
+ und ""
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 106
+
+ this is for messages like 'modify "tag1", "tag2" and "tag3"'
+
+
+ Confirm tags assignment
+ Tag-Zuweisung bestätigen
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 115
+
+
+
+ This operation will add the tag "" to all selected document(s).
+ Diese Aktion wird das Tag "" allen ausgewählten Dokumenten hinzufügen.
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 118
+
+
+
+ This operation will add the tags to all selected document(s).
+ Diese Aktion wird die Tags allen ausgewählten Dokumenten hinzufügen.
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 120
+
+
+
+ This operation will remove the tag "" from all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 123
+
+
+
+ This operation will remove the tags from all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 125
+
+
+
+ This operation will add the tags and remove the tags on all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 127
+
+
+
+ Confirm correspondent assignment
+ Korrespondent-Zuweisung bestätigen
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 157
+
+
+
+ This operation will assign the correspondent "" to all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 159
+
+
+
+ This operation will remove the correspondent from all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 161
+
+
+
+ Confirm document type assignment
+ Dokumenttyp-Zuweisung bestätigen
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 190
+
+
+
+ This operation will assign the document type "" to all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 192
+
+
+
+ This operation will remove the document type from all selected document(s).
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 194
+
+
+
+ Delete confirm
+ Löschen bestätigen
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 219
+
+
+
+ This operation will permanently delete all selected document(s).
+ Diese Aktion wird alle ausgewählte(n) Dokument(e) entgültig löschen.
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 220
+
+
+
+ This operation cannot be undone.
+ Diese Aktion kann nicht rückgängig gemacht werden.
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 221
+
+
+
+ Delete document(s)
+ Dokument(e) löschen
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+ 223
+
+
+
+ Select:
+ Auswählen:
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.html
+ 11
+
+
+
+ All
+ Alle
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.html
+ 21
+
+
+
+ Edit:
+ Bearbeiten:
+
+ src/app/components/document-list/bulk-editor/bulk-editor.component.html
+ 28
+
+
+
+ Save current view
+ Aktuelle Ansicht speichern
+
+ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html
+ 3
+
+
+
+ Show all
+ Alle anzeigen
+
+ src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html
+ 3
+
+
+
+ Statistics
+ Statistiken
+
+ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
+ 1
+
+
+
+ Documents in inbox:
+ Dokumente im Posteingang:
+
+ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
+ 3
+
+
+
+ Total documents:
+ Anzahl Dokumente gesamt:
+
+ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html
+ 4
+
+
+
+ The document has been uploaded and will be processed by the consumer shortly.
+ Das Dokument wurde hochgeladen und wird in Kürze durch Paperless-ng verarbeitet.
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts
+ 63
+
+
+
+ There was an error while uploading the document:
+ Konnte Dokument nicht hochladen:
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts
+ 71
+
+
+
+ An error has occurred while uploading the document. Sorry!
+ Beim Hochladen trat ein Fehler auf. Entschuldigung!
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts
+ 75
+
+
+
+ Upload new documents
+ Neue Dokumente hochladen
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html
+ 1
+
+
+
+ Drop documents here or
+ Dokumente hier ablegen oder
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html
+ 5
+
+
+
+ Browse files
+ Datei auswählen
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html
+ 5
+
+
+
+ {VAR_PLURAL, plural, =1 {file} =other { files}}
+ {VAR_PLURAL, plural, =1 {Datei} =other { Dateien}}
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html
+ 13
+
+
+
+ Uploading ...
+ Lade hoch...
+
+ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html
+ 13
+
+
+
+ First steps
+ Erste Schritte
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 1
+
+
+
+ Paperless is running! :)
+ Paperless ist startbereit! :)
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 5
+
+
+
+ You can start uploading documents by dropping them in the file upload box to the right or by dropping them in the configured consumption folder and they'll start showing up in the documents list. After you've added some metadata to your documents, use the filtering mechanisms of paperless to create custom views (such as 'Recently added', 'Tagged TODO') and have they will be shown on the dashboard instead of this message.
+ Sie können Ihre Dokumente hochladen, indem Sie sie in die Hochladebox auf der rechten Seite ziehen oder in den konfigurierten Ablageordner kopieren/verschieben. Danach werden sie inder Dokumentliste erscheinen. Nachdem Sie den Dokumenten einige Metadaten zugewiesen haben, können Sie die Filtermechanismen zur Erstellung individueller Ansichten benutzen (zum Beispiel "Kürzlich hinzugefügt" oder "Mit TODO markiert") und die Ansichten werden auf der Startseite erscheinen und diese Nachricht ersetzen.
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 6,7
+
+
+
+ Paperless offers some more features that try to make your life easier:
+ Paperless bietet darüber hinaus einige erweiterte Funktionen:
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 8
+
+
+
+ Once you've got a couple documents in paperless and added metadata to them, paperless can assign that metadata to new documents automatically.
+ Nachdem Sie einige Dokumente hochgeladen und mit Metadatebn haben, kann Paperless diese Metadaten automatisch passenden neuen Dokumenten zuweisen.
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 10
+
+
+
+ You can configure paperless to read your mails and add documents from attached files.
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 11
+
+
+
+ Consult the documentation on how to use these features. The section on basic usage also has some information on how to use paperless in general.
+
+ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html
+ 13
+
+
+
+ Metadata
+ Metadaten
+
+ src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts
+ 18
+
+
+
+ Select
+ Auswählen
+
+ src/app/components/common/select-dialog/select-dialog.component.ts
+ 18
+
+
+
+ Please select an object
+ Bitte wählen Sie ein Element aus
+
+ src/app/components/common/select-dialog/select-dialog.component.ts
+ 21
+
+
+
+ Yes
+ Ja
+
+ src/app/pipes/yes-no.pipe.ts
+ 9
+
+
+
+ No
+ Nein
+
+ src/app/pipes/yes-no.pipe.ts
+ 9
+
+
+
+ (no title)
+ (kein Titel)
+
+ src/app/pipes/document-title.pipe.ts
+ 12
+
+
+
+ Error
+ Fehler
+
+ src/app/services/toast.service.ts
+ 31
+
+
+
+ Information
+ Information
+
+ src/app/services/toast.service.ts
+ 35
+
+
+
+ Correspondent
+ Korrespondent
+
+ src/app/services/rest/document.service.ts
+ 16
+
+
+
+ Document type
+ Dokumenttyp
+
+ src/app/services/rest/document.service.ts
+ 17
+
+
+
+ Title
+ Titel
+
+ src/app/services/rest/document.service.ts
+ 18
+
+
+
+ ASN
+ ASN
+
+ src/app/services/rest/document.service.ts
+ 19
+
+
+
+ Created
+ Erstellt am
+
+ src/app/services/rest/document.service.ts
+ 20
+
+
+
+ Added
+ Hinzugefügt am
+
+ src/app/services/rest/document.service.ts
+ 21
+
+
+
+ Modified
+ Geändert am
+
+ src/app/services/rest/document.service.ts
+ 22
+
+
+
+ Light blue
+ Hellblau
+
+ src/app/data/paperless-tag.ts
+ 6
+
+
+
+ Blue
+ Blau
+
+ src/app/data/paperless-tag.ts
+ 7
+
+
+
+ Light green
+ Hellgrün
+
+ src/app/data/paperless-tag.ts
+ 8
+
+
+
+ Green
+ Grün
+
+ src/app/data/paperless-tag.ts
+ 9
+
+
+
+ Light red
+ Hellrot
+
+ src/app/data/paperless-tag.ts
+ 10
+
+
+
+ Red
+ Rot
+
+ src/app/data/paperless-tag.ts
+ 11
+
+
+
+ Light orange
+ Hellorange
+
+ src/app/data/paperless-tag.ts
+ 12
+
+
+
+ Orange
+ Orange
+
+ src/app/data/paperless-tag.ts
+ 13
+
+
+
+ Light violet
+ Hellviolet
+
+ src/app/data/paperless-tag.ts
+ 14
+
+
+
+ Violet
+ Violet
+
+ src/app/data/paperless-tag.ts
+ 15
+
+
+
+ Brown
+ Braun
+
+ src/app/data/paperless-tag.ts
+ 16
+
+
+
+ Black
+ Schwarz
+
+ src/app/data/paperless-tag.ts
+ 17
+
+
+
+ Light grey
+ Hellgrau
+
+ src/app/data/paperless-tag.ts
+ 18
+
+
+
+ Create new item
+ Neues Element erstellen
+
+ src/app/components/common/edit-dialog/edit-dialog.component.ts
+ 38
+
+
+
+ Edit item
+ Element bearbeiten
+
+ src/app/components/common/edit-dialog/edit-dialog.component.ts
+ 42
+
+
+
+ Could not save element:
+ Konnte Element nicht speichern:
+
+ src/app/components/common/edit-dialog/edit-dialog.component.ts
+ 46
+
+
+
+ Automatic
+ Automatisch
+
+ src/app/components/manage/generic-list/generic-list.component.ts
+ 31
+
+
+
+ Do you really want to delete this element?
+ Möchten Sie dieses Element wirklich löschen?
+
+ src/app/components/manage/generic-list/generic-list.component.ts
+ 88
+
+
+
+ Associated documents will not be deleted.
+ Assoziierte Dokumente werden nicht gelöscht.
+
+ src/app/components/manage/generic-list/generic-list.component.ts
+ 95
+
+
+
+ Delete
+ Löschen
+
+ src/app/components/manage/generic-list/generic-list.component.ts
+ 97
+
+
+
+ Any
+
+ src/app/data/matching-model.ts
+ 12
+
+
+
+ All
+
+ src/app/data/matching-model.ts
+ 13
+
+
+
+ Literal
+
+ src/app/data/matching-model.ts
+ 14
+
+
+
+ Regular expression
+ Regulärer Ausdruck
+
+ src/app/data/matching-model.ts
+ 15
+
+
+
+ Fuzzy match
+
+ src/app/data/matching-model.ts
+ 16
+
+
+
+ Auto
+ Automatisch
+
+ src/app/data/matching-model.ts
+ 17
+
+
+
+
+
\ No newline at end of file
From 020696fb176bc262469d9a78f10814feabb724bb Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 30 Dec 2020 23:16:30 -0800
Subject: [PATCH 16/45] Fix overflowing document titles on homepage mobile view
---
.../saved-view-widget/saved-view-widget.component.scss | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss
index e69de29bb..40d1c836b 100644
--- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss
+++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss
@@ -0,0 +1,7 @@
+table {
+ overflow-wrap: anywhere;
+}
+
+th:first-child {
+ min-width: 5rem;
+}
From d42c13a9c6d71edb083f6e8162b30f1c197be969 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 30 Dec 2020 23:39:07 -0800
Subject: [PATCH 17/45] Reorganized navbar
Updated search field, new user menu
---
.../app-frame/app-frame.component.html | 58 +++++++++++--------
.../app-frame/app-frame.component.scss | 45 ++++++++++----
2 files changed, 70 insertions(+), 33 deletions(-)
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html
index d191ec0de..9d6c4924f 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.html
+++ b/src-ui/src/app/components/app-frame/app-frame.component.html
@@ -1,17 +1,43 @@
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss
index 5ace8a2ff..433fe3054 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.scss
+++ b/src-ui/src/app/components/app-frame/app-frame.component.scss
@@ -72,17 +72,42 @@
padding-top: .75rem;
padding-bottom: .75rem;
font-size: 1rem;
- background-color: rgba(0, 0, 0, .25);
- box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
}
-.navbar .navbar-toggler {
- top: .25rem;
- right: 1rem;
-}
+.navbar .search-form-container {
+ max-width: 550px;
+ position: relative;
-.navbar .form-control {
- padding: .75rem 1rem;
- border-width: 0;
- border-radius: 0;
+ svg {
+ position: absolute;
+ left: 1.8em;
+ color: rgba(255, 255, 255, 0.6);
+ }
+
+ &:focus-within {
+ svg {
+ display: none;
+ }
+ }
+
+ .form-control {
+ color: rgba(255, 255, 255, 0.5);
+ background-color: rgba(0, 0, 0, 0.2);
+ padding-left: 1.8rem;
+ border-color: rgba(255, 255, 255, 0.5);
+ transition: flex 0.3s ease;
+ max-width: 600px;
+ min-width: 300px; // 1/2 max
+
+ &::placeholder {
+ color: rgba(255, 255, 255, 0.5);
+ }
+
+ &:focus {
+ background-color: #fff;
+ color: initial;
+ flex-grow: 1;
+ padding-left: 0.5rem;
+ }
+ }
}
From 2e544326e57fadd108c8473e3c6b6c0ec3ff9b4e Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Thu, 31 Dec 2020 00:35:54 -0800
Subject: [PATCH 18/45] Toggle caret tweaks
---
.../app-frame/app-frame.component.scss | 48 ++++++++++---------
1 file changed, 25 insertions(+), 23 deletions(-)
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.scss b/src-ui/src/app/components/app-frame/app-frame.component.scss
index 433fe3054..44b1531b1 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.scss
+++ b/src-ui/src/app/components/app-frame/app-frame.component.scss
@@ -1,23 +1,19 @@
-
@import "/src/theme";
-
- /*
+/*
* Sidebar
*/
-
- .sidebar {
+.sidebar {
position: fixed;
top: 0;
bottom: 0;
left: 0;
z-index: 100; /* Behind the navbar */
- padding: 48px 0 0; /* Height of navbar */
+ padding: 50px 0 0; /* Height of navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
}
-
@media (max-width: 767.98px) {
.sidebar {
- top: 3rem;
+ top: 3.5rem;
}
}
@@ -26,11 +22,11 @@
top: 0;
/* height: calc(100vh - 48px); */
height: 100%;
- padding-top: .5rem;
+ padding-top: 0.5rem;
overflow-x: hidden;
- overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
+ overflow-y: auto;
+ /* Scrollable contents if viewport is shorter than content. */
}
-
@supports ((position: -webkit-sticky) or (position: sticky)) {
.sidebar-sticky {
position: -webkit-sticky;
@@ -53,27 +49,33 @@
font-weight: bold;
}
-.sidebar .nav-link:hover .sidebaricon,
-.sidebar .nav-link.active .sidebaricon {
+.sidebar .nav-link.active .sidebaricon,
+.sidebar .nav-link:hover .sidebaricon {
color: inherit;
}
.sidebar-heading {
- font-size: .75rem;
+ font-size: 0.75rem;
text-transform: uppercase;
}
-
/*
* Navbar
*/
-
- .navbar-brand {
- padding-top: .75rem;
- padding-bottom: .75rem;
+.navbar-brand {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
font-size: 1rem;
}
+.navbar-toggler {
+}
+
+.dropdown-toggle::after {
+ margin-left: 0.4em;
+ vertical-align: 0.155em;
+}
+
.navbar .search-form-container {
max-width: 550px;
position: relative;
@@ -91,16 +93,16 @@
}
.form-control {
- color: rgba(255, 255, 255, 0.5);
- background-color: rgba(0, 0, 0, 0.2);
+ color: rgba(255, 255, 255, 0.3);
+ background-color: rgba(0, 0, 0, 0.15);
padding-left: 1.8rem;
- border-color: rgba(255, 255, 255, 0.5);
+ border-color: rgba(255, 255, 255, 0.2);
transition: flex 0.3s ease;
max-width: 600px;
min-width: 300px; // 1/2 max
&::placeholder {
- color: rgba(255, 255, 255, 0.5);
+ color: rgba(255, 255, 255, 0.4);
}
&:focus {
From 5236f4e58d26508a4c4d06c1b2e8a4a18822fc2f Mon Sep 17 00:00:00 2001
From: Jo Vandeginste
Date: Thu, 31 Dec 2020 14:41:47 +0100
Subject: [PATCH 19/45] Refactor after feedback:
- rename PAPERLESS_TIKA to PAPERLESS_TIKA_ENABLED
- all other env params now start with PAPERLESS_TIKA
- convert_to_pdf as class instance method
- smaller details
Signed-off-by: Jo Vandeginste
---
docker/hub/docker-compose.tika.yml | 6 +--
docker/local/docker-compose.tika.yml | 6 +--
docs/configuration.rst | 6 +--
src/paperless/settings.py | 7 ++-
src/paperless_tika/apps.py | 2 +-
src/paperless_tika/parsers.py | 65 +++++++++++++---------------
src/paperless_tika/test.py | 3 --
7 files changed, 46 insertions(+), 49 deletions(-)
delete mode 100644 src/paperless_tika/test.py
diff --git a/docker/hub/docker-compose.tika.yml b/docker/hub/docker-compose.tika.yml
index 04dd3260e..af8f575a0 100644
--- a/docker/hub/docker-compose.tika.yml
+++ b/docker/hub/docker-compose.tika.yml
@@ -24,9 +24,9 @@ services:
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
- PAPERLESS_TIKA: 1
- GOTENBERG_SERVER_ENDPOINT: http://gotenberg:3000
- TIKA_SERVER_ENDPOINT: http://tika:9998
+ PAPERLESS_TIKA_ENABLED: 1
+ PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
+ PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
diff --git a/docker/local/docker-compose.tika.yml b/docker/local/docker-compose.tika.yml
index ab901f306..889713908 100644
--- a/docker/local/docker-compose.tika.yml
+++ b/docker/local/docker-compose.tika.yml
@@ -24,9 +24,9 @@ services:
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
- PAPERLESS_TIKA: 1
- GOTENBERG_SERVER_ENDPOINT: http://gotenberg:3000
- TIKA_SERVER_ENDPOINT: http://tika:9998
+ PAPERLESS_TIKA_ENABLED: 1
+ PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
+ PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
diff --git a/docs/configuration.rst b/docs/configuration.rst
index f53acb633..49c95bff1 100644
--- a/docs/configuration.rst
+++ b/docs/configuration.rst
@@ -291,17 +291,17 @@ configure their endpoints, and enable the feature.
If you run paperless on docker, you can add those services to the docker-compose
file (see the examples provided).
-PAPERLESS_TIKA=
+PAPERLESS_TIKA_ENABLED=
Enable (or disable) the Tika parser.
Defaults to false.
-TIKA_SERVER_ENDPOINT=
+PAPERLESS_TIKA_ENDPOINT=
Set the endpoint URL were Paperless can reach your Tika server.
Defaults to "http://localhost:9998".
-GOTENBERG_SERVER_ENDPOINT=
+PAPERLESS_TIKA_GOTENBERG_ENDPOINT=
Set the endpoint URL were Paperless can reach your Gotenberg server.
Defaults to "http://localhost:3000".
diff --git a/src/paperless/settings.py b/src/paperless/settings.py
index 219166cf5..caa1b9b18 100644
--- a/src/paperless/settings.py
+++ b/src/paperless/settings.py
@@ -427,5 +427,8 @@ PAPERLESS_FILENAME_FORMAT = os.getenv("PAPERLESS_FILENAME_FORMAT")
THUMBNAIL_FONT_NAME = os.getenv("PAPERLESS_THUMBNAIL_FONT_NAME", "/usr/share/fonts/liberation/LiberationSerif-Regular.ttf")
# Tika settings
-PAPERLESS_TIKA = __get_boolean("PAPERLESS_TIKA", "NO")
-GOTENBERG_SERVER_ENDPOINT = os.getenv("GOTENBERG_SERVER_ENDPOINT", "http://localhost:3000")
+PAPERLESS_TIKA_ENABLED = __get_boolean("PAPERLESS_TIKA_ENABLED", "NO")
+PAPERLESS_TIKA_ENDPOINT = os.getenv("PAPERLESS_TIKA_ENDPOINT", "http://localhost:9998")
+PAPERLESS_TIKA_GOTENBERG_ENDPOINT = os.getenv(
+ "PAPERLESS_TIKA_GOTENBERG_ENDPOINT", "http://localhost:3000"
+)
diff --git a/src/paperless_tika/apps.py b/src/paperless_tika/apps.py
index c29586d6a..5cab21427 100644
--- a/src/paperless_tika/apps.py
+++ b/src/paperless_tika/apps.py
@@ -9,6 +9,6 @@ class PaperlessTikaConfig(AppConfig):
def ready(self):
from documents.signals import document_consumer_declaration
- if settings.PAPERLESS_TIKA:
+ if settings.PAPERLESS_TIKA_ENABLED:
document_consumer_declaration.connect(tika_consumer_declaration)
AppConfig.ready(self)
diff --git a/src/paperless_tika/parsers.py b/src/paperless_tika/parsers.py
index 5a77681f2..81f213a6b 100644
--- a/src/paperless_tika/parsers.py
+++ b/src/paperless_tika/parsers.py
@@ -70,49 +70,46 @@ class TikaDocumentParser(DocumentParser):
def parse(self, document_path, mime_type):
self.log("info", f"[TIKA_PARSE] Sending {document_path} to Tika server")
+ tika_server = settings.PAPERLESS_TIKA_ENDPOINT
try:
- parsed = parser.from_file(document_path)
+ parsed = parser.from_file(document_path, tika_server)
except requests.exceptions.HTTPError as err:
- raise ParseError(f"Could not parse {document_path} with tika server: {err}")
-
- try:
- content = parsed["content"].strip()
- except:
- content = ""
-
- try:
- creation_date = dateutil.parser.isoparse(
- parsed["metadata"]["Creation-Date"]
+ raise ParseError(
+ f"Could not parse {document_path} with tika server at {tika_server}: {err}"
)
+
+ try:
+ self.text = parsed["content"].strip()
except:
- creation_date = None
+ pass
+
+ try:
+ self.date = dateutil.parser.isoparse(parsed["metadata"]["Creation-Date"])
+ except:
+ pass
archive_path = os.path.join(self.tempdir, "convert.pdf")
- convert_to_pdf(self, document_path, archive_path)
-
+ convert_to_pdf(document_path, archive_path)
self.archive_path = archive_path
- self.date = creation_date
- self.text = content
+ def convert_to_pdf(document_path, pdf_path):
+ pdf_path = os.path.join(self.tempdir, "convert.pdf")
+ gotenberg_server = settings.PAPERLESS_TIKA_GOTENBERG_ENDPOINT
+ url = gotenberg_server + "/convert/office"
-def convert_to_pdf(self, document_path, pdf_path):
- pdf_path = os.path.join(self.tempdir, "convert.pdf")
- gotenberg_server = settings.GOTENBERG_SERVER_ENDPOINT
- url = gotenberg_server + "/convert/office"
+ self.log("info", f"[TIKA] Converting {document_path} to PDF as {pdf_path}")
+ files = {"files": open(document_path, "rb")}
+ headers = {}
- self.log("info", f"[TIKA] Converting {document_path} to PDF as {pdf_path}")
- files = {"files": open(document_path, "rb")}
- headers = {}
+ try:
+ response = requests.post(url, files=files, headers=headers)
+ response.raise_for_status() # ensure we notice bad responses
+ except requests.exceptions.HTTPError as err:
+ raise ParseError(
+ f"Could not contact gotenberg server at {gotenberg_server}: {err}"
+ )
- try:
- response = requests.post(url, files=files, headers=headers)
- response.raise_for_status() # ensure we notice bad responses
- except requests.exceptions.HTTPError as err:
- raise ParseError(
- f"Could not contact gotenberg server at {gotenberg_server}: {err}"
- )
-
- file = open(pdf_path, "wb")
- file.write(response.content)
- file.close()
+ file = open(pdf_path, "wb")
+ file.write(response.content)
+ file.close()
diff --git a/src/paperless_tika/test.py b/src/paperless_tika/test.py
deleted file mode 100644
index 0a2885226..000000000
--- a/src/paperless_tika/test.py
+++ /dev/null
@@ -1,3 +0,0 @@
-import magic
-m = magic.from_file("/nfsstorage/jo/syncthing/Documenten/20R-309.153.052.pdf")
-print(m)
From aa7e2594e2c747dedefd113e88ad28464c5a3747 Mon Sep 17 00:00:00 2001
From: Stefan
Date: Thu, 31 Dec 2020 15:07:35 +0100
Subject: [PATCH 20/45] self serve pdf.worker.min.js
---
src-ui/angular.json | 6 +++++-
src-ui/src/app/app.component.ts | 3 ++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src-ui/angular.json b/src-ui/angular.json
index ce2dd82f7..db8c66b19 100644
--- a/src-ui/angular.json
+++ b/src-ui/angular.json
@@ -27,7 +27,11 @@
"assets": [
"src/favicon.ico",
"src/assets",
- "src/manifest.webmanifest"
+ "src/manifest.webmanifest", {
+ "glob": "pdf.worker.min.js",
+ "input": "node_modules/pdfjs-dist/build/",
+ "output": "/assets/js/"
+ }
],
"styles": [
"src/styles.scss"
diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts
index 84c173a18..330f8f157 100644
--- a/src-ui/src/app/app.component.ts
+++ b/src-ui/src/app/app.component.ts
@@ -6,8 +6,9 @@ import { Component } from '@angular/core';
styleUrls: ['./app.component.scss']
})
export class AppComponent {
-
+
constructor () {
+ (window as any).pdfWorkerSrc = '/assets/js/pdf.worker.min.js';
}
From be7bf5288b698359849552469a3114c13a44104e Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Thu, 31 Dec 2020 07:52:14 -0800
Subject: [PATCH 21/45] Fix alignment
---
src-ui/src/app/components/app-frame/app-frame.component.html | 2 +-
src-ui/src/app/components/app-frame/app-frame.component.scss | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html
index 9d6c4924f..8029edc98 100644
--- a/src-ui/src/app/components/app-frame/app-frame.component.html
+++ b/src-ui/src/app/components/app-frame/app-frame.component.html
@@ -8,7 +8,7 @@
Paperless-ng
-
diff --git a/src-ui/src/app/components/manage/generic-list/generic-list.component.ts b/src-ui/src/app/components/manage/generic-list/generic-list.component.ts
index 1f9cc65f9..b31231bc8 100644
--- a/src-ui/src/app/components/manage/generic-list/generic-list.component.ts
+++ b/src-ui/src/app/components/manage/generic-list/generic-list.component.ts
@@ -30,7 +30,7 @@ export abstract class GenericListComponent implements On
if (o.matching_algorithm == MATCH_AUTO) {
return $localize`Automatic`
} else if (o.match && o.match.length > 0) {
- return `${o.match} (${MATCHING_ALGORITHMS.find(a => a.id == o.matching_algorithm).name})`
+ return `${MATCHING_ALGORITHMS.find(a => a.id == o.matching_algorithm).shortName}: ${o.match}`
} else {
return "-"
}
diff --git a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html
index bbb96fb6b..7efaac4b9 100644
--- a/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html
+++ b/src-ui/src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html
@@ -20,7 +20,7 @@
-
+