312 lines
7.7 KiB
Markdown
312 lines
7.7 KiB
Markdown
# 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=<file>
|
|
|
|
# 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. |