# DOCX Template Server Ein Node.js-Server für die automatische Verarbeitung von DOCX-Templates. ## ✨ Features - 📄 **Automatische DOCX-Template-Verarbeitung** mit docxtemplater - 🎯 **Intelligente Tag-Erkennung** und automatische Demo-Daten-Generierung - 📊 **Tabellen und Listen** - Unterstützung für komplexe Datenstrukturen - 🌐 **Dateifreigabe** - Lesen und Schreiben von Templates und Dokumenten - 🔒 **SSL-Ready** - Vorbereitet für HTTPS mit Let's Encrypt - 🎨 **Web-Interface** - Einfache Bedienung über Browser - 🚀 **Ein-Klick-Start** - Automatische Installation und Konfiguration ## 🚀 Schnellstart ```bash # Server starten ./start.sh # Oder manuell: npm install npm start ``` ## 🌐 Zugriff ### 🌐 **Web-Zugriff:** - **Server:** http://localhost:80/ - **Templates:** http://localhost:80/templates/ - **Dokumente:** http://localhost:80/documents/ ## 📋 Verwendung ### 1. Template erstellen Erstellen Sie ein DOCX-Dokument mit Tags wie: - `{firma}` - wird zu Firmennamen - `{vorname}` `{nachname}` - werden zu Namen - `{email}` `{telefon}` - werden zu Kontaktdaten - `{#items}...{/items}` - wird zu Tabellendaten ### 2. Template hochladen - Über Web-Interface: Datei auswählen und hochladen - Über API: `POST /upload-template` - Über Web-Upload: http://localhost:80/ → "Template hochladen" - Direkt in Ordner: Datei in `/templates/` kopieren ### 3. Automatische Verarbeitung Der Server erkennt automatisch alle Tags und füllt sie mit passenden Demo-Daten: ```json { "firma": "Mustermann GmbH", "vorname": "Max", "nachname": "Mustermann", "email": "max@example.com", "telefon": "+49 123 456789", "items": [ {"items_name": "Produkt 1", "items_value": "100.00", "items_date": "01.01.2024"}, {"items_name": "Produkt 2", "items_value": "200.00", "items_date": "02.01.2024"} ] } ``` ## 🏷️ Unterstützte Tag-Typen ### Einfache Tags | Tag-Pattern | Generierte Daten | Beispiel | |-------------|------------------|----------| | `{name}`, `{vorname}` | Vorname | Max | | `{nachname}`, `{surname}` | Nachname | Mustermann | | `{email}`, `{mail}` | E-Mail | max@example.com | | `{telefon}`, `{phone}` | Telefon | +49 123 456789 | | `{adresse}`, `{address}` | Adresse | Musterstraße 123 | | `{stadt}`, `{city}` | Stadt | Berlin | | `{plz}`, `{postal}` | PLZ | 12345 | | `{datum}`, `{date}` | Datum | 02.10.2025 | | `{betrag}`, `{preis}`, `{amount}` | Geldbetrag | 1.234,56 | | `{firma}`, `{company}` | Firmenname | Mustermann GmbH | | `{nummer}`, `{id}` | Nummer | 123456 | ### Tabellen/Listen Tags ```docx {#items} • {items_name}: {items_value} EUR (vom {items_date}) {/items} ``` Wird zu: ``` • Produkt 1: 100.00 EUR (vom 01.01.2024) • Produkt 2: 200.00 EUR (vom 02.01.2024) • Produkt 3: 300.00 EUR (vom 03.01.2024) ``` ## 🔧 API Endpunkte ### Templates verwalten ```bash # Alle Templates auflisten GET /api/templates # Template hochladen und verarbeiten POST /upload-template Content-Type: multipart/form-data Body: template= # Test-Template erstellen GET /create-test-template ``` ### Dokumente verwalten ```bash # Alle Dokumente auflisten GET /api/documents # Template mit eigenen Daten verarbeiten POST /api/process-template/:templateName Content-Type: application/json Body: { "firma": "Meine Firma", "vorname": "John", "nachname": "Doe", "items": [ {"items_name": "Service A", "items_value": "500.00"} ] } ``` ## 🌐 HTTP-Zugriff ### Direkte HTTP-URLs: Templates und generierte Dokumente sind über HTTP zugänglich: - **Templates:** http://localhost:80/templates/ - **Dokumente:** http://localhost:80/documents/ ## 🔒 SSL/HTTPS Einrichtung ### Automatisches Setup ```bash # SSL-Setup-Assistent starten ./setup-ssl.sh ``` ### Manuelle Konfiguration #### Option 1: Selbstsigniert (für Tests) ```bash openssl req -x509 -newkey rsa:4096 -keyout private-key.pem -out certificate.pem -days 365 -nodes ``` #### Option 2: Let's Encrypt (für Produktion) ```bash # Certbot installieren sudo apt install certbot # Zertifikat anfordern sudo certbot certonly --standalone -d ihre-domain.com # Zertifikate verlinken ln -sf /etc/letsencrypt/live/ihre-domain.com/privkey.pem private-key.pem ln -sf /etc/letsencrypt/live/ihre-domain.com/fullchain.pem certificate.pem ``` #### SSL aktivieren In `server.js` die SSL-Sektion uncommentieren: ```javascript const sslOptions = { key: fs.readFileSync('private-key.pem'), cert: fs.readFileSync('certificate.pem') }; https.createServer(sslOptions, app).listen(443, () => { console.log('HTTPS Server läuft auf Port 443'); }); ``` ## 📁 Verzeichnisstruktur ``` /home/OfficeServerJS/ ├── server.js # Hauptserver-Datei ├── package.json # Node.js Abhängigkeiten ├── start.sh # Server-Start-Script ├── setup-ssl.sh # SSL-Setup-Assistent ├── create_template.js # Template-Erstellungs-Tool ├── templates/ # DOCX-Templates (Eingabe) │ ├── test_template.docx │ └── rechnung_template.docx ├── documents/ # Generierte Dokumente (Ausgabe) │ ├── test_template_ausgefuellt.docx │ └── rechnung_template_ausgefuellt.docx ├── uploads/ # Temporäre Upload-Dateien ├── private-key.pem # SSL Privater Schlüssel (falls SSL aktiviert) └── certificate.pem # SSL Zertifikat (falls SSL aktiviert) ``` ## 🛠️ Anpassungen ### Neue Tag-Typen hinzufügen In `server.js` → `DemoDataGenerator.generateData()`: ```javascript if (lowerTag.includes('neuer_tag') || lowerTag.includes('new_tag')) { data[tag] = 'Ihre eigene Daten-Generierung hier'; } ``` ### Port ändern ```bash export PORT=3000 ./start.sh ``` ### Unterschiedliche Demo-Daten-Sets ```javascript // In server.js const demoDataSets = { 'german': { /* deutsche Demo-Daten */ }, 'english': { /* englische Demo-Daten */ }, 'business': { /* Business Demo-Daten */ } }; ``` ## 🚦 Produktions-Deployment ### 1. Server vorbereiten ```bash # System aktualisieren sudo apt update && sudo apt upgrade -y # Node.js installieren curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # Firewall konfigurieren sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable ``` ### 2. SSL einrichten ```bash ./setup-ssl.sh # Option 2 wählen für Let's Encrypt ``` ### 3. Process Manager (PM2) ```bash npm install -g pm2 # Server mit PM2 starten pm2 start server.js --name docx-server # Auto-Start bei Neustart pm2 startup pm2 save ``` ### 4. Nginx Reverse Proxy (optional) ```nginx server { listen 80; server_name ihre-domain.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ## 🔍 Troubleshooting ### Server startet nicht ```bash # Port-Konflikt prüfen sudo netstat -tlnp | grep :80 # Berechtigungen prüfen ls -la private-key.pem certificate.pem ``` ### Templates werden nicht verarbeitet - DOCX-Datei korrekt formatiert? - Tags richtig geschrieben (`{tag}` nicht `{{tag}}`)? - Datei-Berechtigungen prüfen ### Templates nicht sichtbar Prüfen Sie: - Server läuft: `http://localhost:80/` - Templates-Ordner: `http://localhost:80/templates/` ### SSL-Probleme ```bash # Zertifikat prüfen openssl x509 -in certificate.pem -text -noout # Berechtigungen prüfen chmod 600 private-key.pem chmod 644 certificate.pem ``` ## 📞 Support - **Logs:** `journalctl -u docx-server -f` (bei PM2: `pm2 logs`) - **Status:** `pm2 status` oder `ps aux | grep node` - **Konfiguration:** Alle Einstellungen in `server.js` ## 📄 Lizenz MIT License - Frei verwendbar für kommerzielle und private Projekte.