Nextcloud-App: konvertiere Briefe und Text von .md zu .pdf im File-Browser

Nextcloud-App: konvertiere Briefe und Text von .md zu .pdf im File-Browser

nextcloud-xact xact ist eine Nextcloud-App für das Rechts-Klick-Menü (Drei-Punkte-Menü), welche Markdown .md-Dateien in Portable-Document-Files .pdf wandelt. Grundsätzlich für jedes Markdown geeignet, sind jedoch Spezialfälle für das Schreiben von (DIN-) Briefen eingebaut.

Wichtig - Es wird nur Nextcloud ab Version 33 unterstützt, momentan getestet bis 35. Wenn die API nicht schon wieder im Handumdrehen seitens Nextcloud geändert wird, können höhere Versionen ohne Änderung auch noch funktionieren.

Ursprüngliche Idee zur Erweiterung von mir, da ich keine Lust auf sperrige Office-Anwendungen für einen kleinen Brief hatte. Die Erweiterung basiert auf

https://gitlab.com/vhcsoft-code/md2pdf

sie wurde vor allem an die neue Nextcloud-API ab Version 33 angepasst, so dass das die Action im Rechtsklick-Menü wieder erscheint. Weiterhin wurden Ideen von

https://maennig.de/briefe-markdown

aufgegriffen und eingebaut.


Was muss beachtet werden

Wenn man einen Brief im eingebauten Text-Editor der Nextcloud schreibt, hat das mehrere Vorteile:

  • Markdown-Dateien können jederzeit gelesen und auch in einem anderen Editor geschrieben werden, da sie ein normales Text-File sind
  • Nextcloud bietet Autosave und Versionisierung
  • für so etwas Einfaches braucht es sicher keine schwergewichtigen, komplexen Office-Suiten
  • eine Self-Hosted Nextcloud hat man eh, wenn noch nicht, sollte man sichs mal überlegen :-)

Änderungen zum Standard-Markdown (wenn es sowas gibt): Markdown unterstützt nicht direkt alles, was man für so einen Brief braucht. Deswegen muss es etwas erweitert werden

  • Enter (Zeilenumbruch) ist immer ein Hard-Break, also BR
  • Header 6 H6 wird für kleinere Schriftart verwendet: 8 Punkt
  • weitere Funktionen: H3 ist Linksbündig, H4 ist zentriert, H5 ist rechtsbündig
  • Zeichen Pilgrim ¶ wird für Leerzeile verwendet, sowas geht sonst in Markdown nicht
  • Zeichen Pagebreak ⎘ wird für einen Seitenumbruch verwendet, sowas geht sonst auch in Markdown nicht


Installation der Nextcloud-App

  • xact Downloaden Download xact-0.1.1.tar.gz von github
  • oder xact aus dem Source bauen :-)
  • in Nextcloud installieren, also das .tar.gz nach /apps/ entpacken
  • App aktivieren mit php occ app:enble xact
  • Nextcloud-File-Browser neu laden, auf ein Markdown-File rechts klicken bzw. 3-Punkte-Menü: Als PDF exportieren wie im Bild oben erscheint
  • jedes .md-File kann nun zu PDF konvertiert werden - testen!


Konfiguration

  • Folgendes kann in config/config.inc.php der nextcloud eingestellt werden
  • Ich denke, die Optionen sind selbsterklärend
// xact application config with default values
'xact_format'            =>'A4',
'xact_margin_left'       => 20,
'xact_margin_right'      => 20,
'xact_margin_top'        => 20,
'xact_margin_bottom'     => 20,
'xact_show_window_guide' => true,
'xact_show_fold_marks'   => true,
'xact_show_footer'       => true,


Beispielbrief

Ein DIN-Brief in Markdown kann so aussehen:

###### Wolfgang Goethe

###### Frauenplan 1 | Weimar

###### Telefon 03643 1337 | mobil 0170 1337 | E-Mail w.goethe@weimar.de

¶
¶

###### Wolfgang Goethe | Frauenplan 1 | Weimar

>
> Friedrich Schiller
> Hofrath und Professor
> Schillerstraße 12
> Jena

¶
¶

**Neujahrswünsche und Arbeiten**
¶

Ew. Wohlgeboren  
¶

Hier zum neuen Jahr mit den besten Wünschen, ein Pack Schauspiele. Da Sie doch solche mit gutem Humor ansehen, so werfen Sie doch ein Paar Worte aufs Papier über jedes. Am Ende giebts doch ein Resultat. Nicht wahr Oels hat keine Rolle in der Phädra? Er bat um Urlaub den ich ihm um so lieber gebe. Erhalt ich nicht bald ein Paar Akte? Der Termin rückt nun mit jedem Tage näher ins Auge.
¶

Sagen Sie mir, bester Freund, ein Wort von Sich und Ihren Arbeiten. Meine Versuche mich der hohen und schönen Welt zu nähern, sind mir nicht zum Besten gelungen. Wenigstens auf einige Tage bin ich wieder ins Haus zurückgedrängt. Da möcht ich denn etwas erfreuliches von Ihrer Warte her. Und zugleich fragen ob Ihre Dame wohl morgen früh den Donnerstag mit den Freundinnen bei mir feiern möchte. Wohlsein und Stimmung!
¶

Leben Sie recht wohl und gedenken mein in Ihrem Kreise.
¶

Goethe

⎘

Eben höre ich daß die Hoheit uns morgen beglückt. Es wäre recht artig wenn Sie sich entschlössen auch theil zu nehmen. Der Herzog wird, wie man mir sagt, einige Zeit bei uns verweilen, und vielleicht giebt sich daraus Gelegenheit zu einem heiteren Gespräch. Ich hoffe nur, daß die hohe Gegenwart unserer kleinen Gesellschaft nicht zu viel Feierlichkeit auferlegen möge.


Ansicht im Nextcloud-Text-Editor

xact-md-example

Download der md-Datei


Das Endergebnis als PDF

xact-pdf-example

Download der pdf-Datei


Wie gebe ich die Sonderzeichen ein?

  • Es müssten zwei Buttons in den Text-Editor eingebaut werden, einer für Pilgrim und einer für Pagebreak
  • man kann sich das u. U. mit der Firefox-Tampermonkey-Extension in den Editor einbauen
  • Solange kann man ja Hotkeys nutzen
  • Pilgrim ¶ ist bereits standardmäßig auf AltGr + R
  • Pagebreak auf AltGr + P legen:

Unter Linux Mint (MATE Desktop)

Auf Linux ist das Zeichen ⎘ im Standard-Tastaturlayout nicht direkt auf AltGr + P gemappt. Über die MATE-Tastatureinstellungen können Sie ein benutzerdefiniertes Tastenkürzel anlegen.

  • Installieren Sie das kleine Tool xdotool (falls nicht vorhanden): sudo apt install xdotool
  • Öffnen Sie Menü → Einstellungen → Tastaturkurzbefehle.
  • Klicken Sie auf Hinzufügen:
  • Name: Seitenumbruch ⎘
  • Befehl: xdotool type ⎘ Weisen Sie der neuen Aktion die Tastenkombination AltGr + P oder Strg + Alt + P zu.

Unter Windows 10

Windows bietet von Haus aus keine freie Belegung für AltGr-Kombinationen.

  • Installieren Sie die kostenlosen Microsoft PowerToys (aus dem Microsoft Store oder von GitHub).
  • Öffnen Sie PowerToys und wählen Sie den Tastatur-Manager (Keyboard Manager).
  • Klicken Sie auf Tastenkombination neu zuordnen (Remap a shortcut).
  • Einstellungen wählen:
    • Eingabe (Shortcut): AltGr + P (oder Ctrl + Alt + P)
    • Aktion: Wählen Sie Text senden (Send Text) und tragen Sie dort ⎘ ein.


Stylesheet

  • Markdown-Anpassungen durch CSS: Mann will, dass Text-Editor fast genauso aussieht wie das PDF
  • dieses CSS wird bei der PDF-Konvertierung verwendet
<style>
h1 { font-size: 22pt; border-bottom: 2px solid #eee; padding-bottom: 8px; }
h2 { font-size: 18pt; border-bottom: 1px solid #eee; padding-bottom: 4px; }
h3 { font-size: 14pt; }
code { background: #f5f5f5; border: 1px solid #e0e0e0; padding: 2px 4px; font-size: 10pt; border-radius: 3px; }
pre { background: #f5f5f5; border: 1px solid #e0e0e0; padding: 12px; overflow-x: auto; border-radius: 4px; }
pre code { border: none; padding: 0; background: none; }

table { border-collapse: collapse; width: 100%; margin: 10px 0; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background: #f5f5f5; }
a { color: #0066cc; }
ol, ul { margin: 0 0 10px; padding-left: 24px; }
hr { border: none; border-top: 1px solid #eee; margin: 20px 0; }
img { max-width: 100%; }

body {
    margin:0;
    font-family: "OfficinaSanITC", "ITC Officina Sans", "ITC Officina Sans", sans-serif;
/* font-size: 12pt */
}
/* align left */
h3 {
    font-family: "OfficinaSanITC", "ITC Officina Sans", "ITC Officina Sans", sans-serif;
    font-size: 12pt;
    text-align: left;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
/* align center */
h4 {
    font-family: "OfficinaSanITC", "ITC Officina Sans", "ITC Officina Sans", sans-serif;
    font-size: 12pt;
    text-align: center;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
/* align right */
h5 {
    font-family: "OfficinaSanITC", "ITC Officina Sans", "ITC Officina Sans", sans-serif;
    font-size: 12pt;
    text-align: right;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
/* small */
h6 {
    font-family: "OfficinaSanITC", "ITC Officina Sans", "ITC Officina Sans", sans-serif;
    font-size: 8pt;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
strong {
    font-family: "OfficinaSanITCBol", "ITC Officina Sans Bol", "ITC Officina Sans", sans-serif;
}
em {
    font-family: "OfficinaSanITCIta"
}
ul, ol {
    padding-left: 20pt
}
blockquote {
    border-inline-start: none;
    color: black;
    margin-left: 20pt;
    font-family: "OfficinaSanITCIta"
}
</style>

Download dieser css-Datei

  • Integrieren des CSS im Nextcloud-Text-Editor
  • dieses abgeänderte CSS herunterladen

Download der RichTextReader-css-Datei

  • das CSS kann im Browser mittels der Firefox-Extension Stylus verwendet werden
  • man kann es einfach auf dem Nextcloud-Server an das vorhandene RichTextReader CSS anhängen, so habe ichs gemacht
  • hält nur bis zum nächsten Update :-)
cat ~/RichTextReader-xact.css >> nextcloud/apps/text/css/RichTextReader-BC3LzKxu.chunk.css
  • TODO: man müsste das als konfigurierbare Erweiterung im Editor einbauen, abschaltbar


Ergebnis gedruckt

  • Drucker: HP LaserJet Professional M1132 MFP
  • der Drucker ist leider immer noch ein Endgegner! Treiber-Skalierung abschalten bzw. exact 100%
  • mit Leerzeilen versuchen, auszugleichen. Mann kann auch kleine Leerzeilen machen: H6 Pilgrim
  • Je nach Drucker u. U. Position der Faltmarken / Sichtfenstermarken im Sourcecode verändern

xact-realworld1

xact-realworld2


Git-Repository

Das git-Repository ist hier

https://github.com/chris-x-tra/xact

  • Wenn jemand eine Anmerkung hat, kann er dort eine Issue anlegen
  • Es kann auch ein Pull-Request für Bugs oder Features erzeugt werden


Markdown Cheat Sheet

Artikel erstellt am: 07.09.2026, aktualisiert am 08.09.2026.