-
released this
2026-09-10 00:08:49 +02:00 | 51 commits to main since this releaseEigene Rechtezeile: PDF-Formulare
Ein ausgefuelltes Formular abzulegen hing bisher am Recht Anlegen -- wie ein
Upload. Jetzt gibt es dafuer eine eigene Zeile im Bereich Dateifreigaben:Bedeutung R Ansehen in der Vorschau ausfuellen (ohne Speichern) C Anlegen ausgefuellt speichern -- abgeschlossen, Felder gesperrt U Bearbeiten ausgefuellt speichern -- weiter ausfuellbar, inklusive Bild Damit ist das Formularrecht vom Umbenennen getrennt: wer nur anlegen darf, legt
nur endgueltige Fassungen ab. Wer bearbeiten darf, hat beide Wege.Geprueft wird die Datei, nicht das Auswahlfeld im Browser: traegt das
hochgeladene PDF noch Formularfelder und das Recht fehlt, wird es abgewiesen.Ohne Ausfuellrecht zeigt die Vorschau das Dokument, wie es ist -- mit den Marken
aus der Datei statt der Bedienelemente des Browsers.Herunterladen ist Exportieren
Dateifreigaben bekommt die Spalte E. Eine Vorschau bleibt im Haus, eine
heruntergeladene Datei nicht -- genau die Bedeutung aus der Legende der Matrix.Migration
Jede Gruppe behaelt ihre bisherige Reichweite:
fileshare.viewbringt
fileshare.exportundfileshare_pdf.view,fileshare.createbringt
fileshare_pdf.create,fileshare.editbringtfileshare_pdf.edit. Ohne
diesen Schritt koennte nach dem Update niemand mehr herunterladen oder
speichern, obwohl sich an den Gruppen nichts geaendert hat.Downloads
-
released this
2026-09-09 23:43:51 +02:00 | 52 commits to main since this releaseZwei Arten zu speichern
In der Speicherzeile steht jetzt, was aus dem Formular werden soll:
- Formular -- weiter ausfuellbar (Vorgabe): alle Felder bleiben, und das
Foto wird das Aussehen des Bildknopfes. Damit ist es sichtbar und laesst
sich beim naechsten Oeffnen austauschen. Vorher wurde es in die Seite
gestempelt und der Knopf entfernt -- danach ging kein neues Bild mehr. - Abgeschlossen -- Felder gesperrt: alle Felder werden Teil der Seite.
Heraus kommt ein PDF ohne Formular; nichts laesst sich mehr verstellen, gut
zum Ablegen und Drucken.
Ohne Bild und ohne Abschluss bleibt pdf-lib ungeladen -- der haeufige Fall
kostet nichts.Downloads
- Formular -- weiter ausfuellbar (Vorgabe): alle Felder bleiben, und das
-
released this
2026-09-09 23:36:09 +02:00 | 53 commits to main since this releaseNamen ohne Endung
Beim Umbenennen und beim Speichern eines ausgefuellten Formulars steht
nur noch der Name im Feld -- die Endung kommt von der Datei selbst. Eine Datei,
die auf.pdf.txtoder auf gar nichts endet, oeffnet auf einer Freigabe nichts
mehr. Wer die Endung mittippt, bekommt sie nicht doppelt; Verzeichnisse behalten
ihren Namen unveraendert.Ankreuzfelder sind wieder lesbar
pdf.js malt Formularfelder mit Systemfarben und ueberlaesst Ankreuzfelder dem
Browser. Im dunklen Design heisstCanvasTextweiss -- auf weissem Papier
also unsichtbar. Ein PDF ist immer heller Grund; fuer diesen Ausschnitt gilt
jetzt das helle Schema.Die farbigen Originale (rotes Kreuz, gruener Haken) bleiben, wo sie zaehlen: in
der Datei. Beim Ausfuellen ersetzt pdf.js die Felder durch Bedienelemente des
Browsers -- anders liessen sie sich nicht anfassen --, die gespeicherte Datei
traegt aber weiter die Darstellung aus dem Dokument.Hochkant mehr Hoehe
Die Obergrenze von 760 Pixeln passt zu einem Querformat-Monitor; auf einem
Tablet oder einem hochkant stehenden Schirm verschenkte sie den halben
Bildschirm. Dort nimmt die Vorschau jetzt die Hoehe, die da ist -- auf
820x1180 sind das 926 statt 760 Pixel, auf 1080x1920 sogar 1655. Im Querformat
bleibt alles wie bisher.Downloads
-
released this
2026-09-09 23:11:55 +02:00 | 54 commits to main since this releaseFormularfelder sitzen jetzt an ihren Kaesten
Die Felder waren nach rechts unten verschoben, immer weiter je weiter unten sie
lagen. Ursache: die Seite von pdf.js traegt einen 9-Pixel-Rahmen, und das
globalebox-sizing: border-boxder Oberflaeche rechnete ihn nach innen -- die
Leinwand wurde 18 Pixel schmaler als die Ebene mit den Feldern.Das Bildfeld ist benutzbar
Der Kasten fuer das Foto ist in solchen Formularen ein Acrobat-Knopf mit der
AktionbuttonImportIcon. Kein Browser fuehrt die aus, auch Edge nicht.Solche Knoepfe bekommen jetzt eine eigene Schaltflaeche Bild einsetzen -- auf
einem iPad bietet sie Kamera oder Fotos an. Das Bild erscheint sofort im Kasten
und wird beim Speichern in die Datei gestempelt; in der ausgefuellten Kopie
faellt der Knopf weg, damit nichts das Foto verdeckt. Die Vorlage bleibt
unberuehrt.Das Foto geht durch eine Leinwand: daraus wird ein JPEG (auf einem iPad also
auch aus HEIC), und ein 12-Megapixel-Bild wird auf ein Mass verkleinert, das ein
Formular nicht sprengt. pdf-lib (MIT) liegt dafuer im Paket und wird erst
geladen, wenn wirklich ein Bild eingesetzt wird.Kleinigkeit
Ein leeres Ordnerfeld beim Speichern heisst jetzt Wurzelverzeichnis -- so wie es
daneben steht.Downloads
-
released this
2026-09-09 22:41:12 +02:00 | 55 commits to main since this releaseAusgefuellte Formulare: Ordner und Name waehlen
Bisher landete das ausgefuellte Formular ohne Rueckfrage neben dem Original. Ein
ausgefuellter Fehlerbericht gehoert aber eher in den Ordner des Vorgangs als
neben die leere Vorlage.Die Vorschau fragt jetzt nach Ordner und Dateiname und schlaegt beides
vor: der Ordner, in dem man gerade ist, und der Name der Vorlage mit dem Zusatz
-ausgefuellt. Die Ordner der Freigabe stehen als Liste bereit; ein Pfad darf
auch getippt werden. Eine vorhandene Datei wird nur ueberschrieben, wenn
Vorhandene ersetzen angekreuzt ist.Drei Fehler aus der Praxis
- Nachgeladene Dateien trugen keine Version. nginx liefert
/core-assets/
mitexpires 7d-- nach einem Update lief also tagelang der alte Betrachter
weiter.viewer.jsbekommt jetzt die Version vonapp.js, pdf.js die seiner
eigenen Adresse. - Der PDF-Bereich rechnete mit genau einer Leiste. Die neue Speicherzeile lag
damit unter dem Dialogrand. - Der Aufraeumfaden der Dateifreigaben lief nie:
timewar nicht importiert,
der erstesleepwarf einen NameError, und weil der vor demtrystand, starb
der Faden still -- abgelaufene Einbindungen wurden nie geloest.
Der Hinweis beim Rueckfall nennt jetzt zusaetzlich den Grund, den der Browser
meldet. Wenn die Formularansicht auf einem Geraet nicht laedt, steht dort, woran
es liegt.Downloads
- Nachgeladene Dateien trugen keine Version. nginx liefert
-
released this
2026-09-09 22:06:25 +02:00 | 56 commits to main since this releaseFormularfelder erscheinen jetzt wirklich
In 2.2.0 blieben sie auf einer echten Installation aus -- in Safari wie in
Chromium. Der Grund lag nicht in pdf.js: diemime.typesvon nginx kennen die
Endung.mjsnicht und liefernapplication/octet-stream. Ein
<script type="module">und ein Modul-Worker lehnen das ab, also wurde pdf.js
nie geladen und die Vorschau fiel auf den einfachen Rahmen zurueck -- und dort
gibt es keine Formularfelder.Im Test fiel das nicht auf, weil dort Flask die Dateien ausliefert: Python kennt
.mjs. Erst durch nginx trat es auf.Die Dateien heissen deshalb jetzt
.js. Am Inhalt aendert das nichts, und ein
Hygienetest verbietet ab jetzt jede.mjsim Paket.Ausserdem: der Hinweis "Formularansicht liess sich nicht laden" landete in
einer Leiste, die derselbe Aufruf gerade verborgen hatte -- der Fehlschlag war
unsichtbar. Jetzt steht er da, wo man ihn liest.Downloads
-
released this
2026-09-09 21:48:41 +02:00 | 57 commits to main since this releaseVorschau: Bilder zoomen, PDF-Formulare ausfuellen
Bisher lief jede Vorschau durch einen Rahmen, und der Browser entschied selbst.
Auf einem iPad heisst das: ein Foto ist 4032 Pixel breit und wird 1:1 gezeigt,
also als Ausschnitt aus der Mitte. Ein PDF ist dort nur ein Standbild der ersten
Seite -- Formularfelder lassen sich nicht anfassen.Jetzt waehlt die Vorschau die Anzeige nach der Art der Datei:
- Bilder passen sich der Flaeche an und lassen sich zoomen und verschieben:
zwei Finger, Mausrad, Doppeltippen oder die Knoepfe unten links. - PDFs rendert pdf.js mit Formularmodus -- Felder sind echte Eingabefelder,
auch in Safari. Ausgefuellt speichern legt das ausgefuellte Formular als
eigene Datei neben das Original (vorlage-ausgefuellt.pdf); die leere
Vorlage bleibt leer. - Alles andere bleibt beim Rahmen. Faellt pdf.js aus, faellt die Anzeige
ebenfalls dorthin zurueck -- kein weisses Feld.
HEIC ist neu in der Vorschau: das Format, in dem ein iPad fotografiert.
Safari zeigt es; andere Browser bekommen den Hinweis, dass sie es nicht koennen.pdf.js (4.10.38, Apache-2.0) liegt im Paket -- TESM laeuft in abgeschotteten
Netzen. Geladen wird es erst beim ersten PDF.Herunterladen laedt herunter
iOS Safari entscheidet nach dem MIME-Typ und oeffnete eine
application/pdfim
Browser, obwohl sie als Anhang ausgeliefert wurde. Ein ausdruecklicher Download
bekommt jetzt den neutralen Typ; angesehen wird die Datei in der Vorschau.Eine Uploadgrenze statt drei
Wirksam war bisher die kleinste (64 MB aus einer Umgebungsvariablen), sichtbar
die groesste (512 MB auf der Freigabeseite), und nginx hatte eine dritte. Jetzt
gilt eine Zahl, einstellbar unter Einstellungen -> Webserver und TLS:- die Anwendung liest sie pro Anfrage -- keine Aenderung braucht einen
Neustart, - nginx bekommt beim Uebernehmen 16 MB mehr, damit die Anwendung die
Fehlermeldung schreiben darf, - und die Meldung nennt die Grenze und wo sie steht.
Downloads
- Bilder passen sich der Flaeche an und lassen sich zoomen und verschieben:
-
released this
2026-09-09 00:27:05 +02:00 | 58 commits to main since this releaseEin Sub-Paket kommt nicht mehr auf eine Wurzelinstanz
Die Pruefung sah bisher nur nach, ob im Zielverzeichnis das Teilpaket
tesm_license/masterliegt. Jede Master-Installation, die vor 2.1.0
eingerichtet wurde, kennt es aber noch nicht -- dort waere ein Paket der
Sub-Ausgabe anstandslos durchgelaufen, und die Wurzelinstanz haette danach
keinen Weg mehr zu einer Master-Lizenz.Jetzt entscheidet zusaetzlich die Rolle der eingespielten Lizenz. Ist sie
masterund das Paket die Sub-Ausgabe, brichtinstall.shvor dem ersten
Schreibzugriff ab und nennt das passende Repositorium.Wer eine Wurzelinstanz betreibt, aktualisiert sie aus
tesm-license-master:sudo bash /srv/tesm-license/deploy/update.sh tesm-license latest --yesupdate.sherkennt die Ausgabe selbst; den Zugriffstoken fuer das private
Repositorium erwartet es inTESM_RELEASE_TOKENoder/etc/tesm-release.token.Downloads
-
released this
2026-09-09 00:20:47 +02:00 | 59 commits to main since this releaseNachtrag zu 2.1.0 -- eine Zeile, die im Betrieb zaehlt.
update.sh endet nicht mehr still
Ohne Terminal las die Rueckfrage EOF, die Antwort blieb leer, und das Skript
endete mit 0: aus einem anderen Skript oder per SSH aufgerufen sah das nach
einem erledigten Update aus, obwohl nichts passiert war.Jetzt gilt dasselbe wie bei
install.shundupgrade.sh:sudo bash /srv/tesm/deploy/update.sh tesm latest --yesOhne Terminal und ohne
--yesbricht es mit Code 3 ab und sagt, warum.Downloads
-
released this
2026-09-09 00:13:11 +02:00 | 60 commits to main since this releaseRueckweg bei jedem Fehlschlag
Aktualisierung und Upgrade rollen jetzt bei jedem Fehlschlag zurueck, nicht
nur bei dem einen, der abgefangen war: Export, Uebersetzen, Einspielen, nginx,
Systempakete, ein Ctrl-C. Der Rueckweg haengt an einer EXIT-Falle. Eine
Neuinstallation loescht nichts -- im Zielverzeichnis kann eine Fassung 1.x
liegen, deren Sicherungupgrade.shhaelt.Anlass war ein echter Abbruch: install.sh scheiterte an einer sudoers-Datei,
die ein neueres visudo ablehnte. Der alte Dienst war zu diesem Zeitpunkt schon
gestoppt und deaktiviert, der neue existierte nicht.Eine Datei genuegt
install.shliegt oben im Paket und funktioniert auch allein -- ohne Paket
drumherum laedt es sich das aktuelle Release selbst:curl -fsSLO https://gitea.int.eertmoed.net/alientim/tesm-license/raw/branch/main/install.sh sudo bash install.sh --app tesm-license --httpsDamit gilt fuer alle drei Wege dasselbe:
install.sh,update.sh,
upgrade.sh-- eine Datei auf das Ziel legen, ausfuehren, fertig.Jede Instanz mit eigenem Port
Bisher bekam jede Instanz denselben internen Port (Basis+100). Die zweite
startete deshalb nie ("Address already in use") -- und weil die
Gesundheitspruefung genau diesen Port fragte, antwortete die erste, und die
Installation meldete "Fertig" ueber einen toten Dienst. Jetzt wird der naechste
freie Port gesucht, und die Pruefung sieht zusaetzlich den Dienst selbst an.Zwei Ausgaben des Lizenzservers
Die Rolle
masterentsteht an genau einer Stelle im Code, und die liegt jetzt
im Teilpakettesm_license/master. Ueber Tickets ist sie auf jedem Server
abgewiesen -- eine Vertrauenswurzel laesst sich nicht delegieren.Ausgabe Teilpaket masterRepository Wurzelinstanz ja, stellt beim Installieren die eigene Lizenz aus tesm-license-master(privat)Sub-Lizenzserver nein -- kein Code fuer diese Rolle tesm-licenseDer Signaturschluessel ist etwas anderes: mit ihm signiert jeder
Lizenzserver seine Kundenlizenzen. Er entsteht ab jetzt beim Installieren --
auch auf einem Sub-Lizenzserver -- und wird bei einer Aktualisierung nie
angetastet. Sofort sichern.Ein Paket der Sub-Ausgabe auf eine Master-Installation weist
install.shab:
der Abgleich laeuft mit--deleteund wuerde das Teilpaket entfernen. Geprueft
wird das vor dem ersten Schreibzugriff.Downloads