2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-10-05 20:58:02 +02:00
2025-12-08 12:54:46 +01:00
2025-10-05 20:58:02 +02:00

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

# Server starten
./start.sh

# Oder manuell:
npm install
npm start

🌐 Zugriff

🌐 Web-Zugriff:

📋 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:

{
  "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

{#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

# Alle Templates auflisten
GET /api/templates

# Template hochladen und verarbeiten
POST /upload-template
Content-Type: multipart/form-data
Body: template=<file>

# Test-Template erstellen
GET /create-test-template

Dokumente verwalten

# 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:

🔒 SSL/HTTPS Einrichtung

Automatisches Setup

# SSL-Setup-Assistent starten
./setup-ssl.sh

Manuelle Konfiguration

Option 1: Selbstsigniert (für Tests)

openssl req -x509 -newkey rsa:4096 -keyout private-key.pem -out certificate.pem -days 365 -nodes

Option 2: Let's Encrypt (für Produktion)

# 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:

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.jsDemoDataGenerator.generateData():

if (lowerTag.includes('neuer_tag') || lowerTag.includes('new_tag')) {
    data[tag] = 'Ihre eigene Daten-Generierung hier';
}

Port ändern

export PORT=3000
./start.sh

Unterschiedliche Demo-Daten-Sets

// In server.js
const demoDataSets = {
    'german': { /* deutsche Demo-Daten */ },
    'english': { /* englische Demo-Daten */ },
    'business': { /* Business Demo-Daten */ }
};

🚦 Produktions-Deployment

1. Server vorbereiten

# 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

./setup-ssl.sh
# Option 2 wählen für Let's Encrypt

3. Process Manager (PM2)

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)

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

# 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

# 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.

Description
No description provided
Readme 198 KiB
Languages
JavaScript 91.9%
Shell 6%
CSS 2.1%