Ein Node.js-Server für die automatische Verarbeitung von DOCX-Templates.
- 📄 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
# Server starten
./start.sh
# Oder manuell:
npm install
npm start- Server: http://localhost:80/
- Templates: http://localhost:80/templates/
- Dokumente: http://localhost:80/documents/
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
- Ü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
Der Server erkennt automatisch alle Tags und füllt sie mit passenden Demo-Daten:
{
"firma": "Mustermann GmbH",
"vorname": "Max",
"nachname": "Mustermann",
"email": "[email protected]",
"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"}
]
}| Tag-Pattern | Generierte Daten | Beispiel |
|---|---|---|
{name}, {vorname} |
Vorname | Max |
{nachname}, {surname} |
Nachname | Mustermann |
{email}, {mail} |
[email protected] | |
{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 |
{#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)
# 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# 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"}
]
}Templates und generierte Dokumente sind über HTTP zugänglich:
- Templates: http://localhost:80/templates/
- Dokumente: http://localhost:80/documents/
# SSL-Setup-Assistent starten
./setup-ssl.shopenssl req -x509 -newkey rsa:4096 -keyout private-key.pem -out certificate.pem -days 365 -nodes# 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.pemIn 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');
});/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)
In server.js → DemoDataGenerator.generateData():
if (lowerTag.includes('neuer_tag') || lowerTag.includes('new_tag')) {
data[tag] = 'Ihre eigene Daten-Generierung hier';
}export PORT=3000
./start.sh// In server.js
const demoDataSets = {
'german': { /* deutsche Demo-Daten */ },
'english': { /* englische Demo-Daten */ },
'business': { /* Business Demo-Daten */ }
};# 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./setup-ssl.sh
# Option 2 wählen für Let's Encryptnpm install -g pm2
# Server mit PM2 starten
pm2 start server.js --name docx-server
# Auto-Start bei Neustart
pm2 startup
pm2 saveserver {
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;
}
}# Port-Konflikt prüfen
sudo netstat -tlnp | grep :80
# Berechtigungen prüfen
ls -la private-key.pem certificate.pem- DOCX-Datei korrekt formatiert?
- Tags richtig geschrieben (
{tag}nicht{{tag}})? - Datei-Berechtigungen prüfen
Prüfen Sie:
- Server läuft:
http://localhost:80/ - Templates-Ordner:
http://localhost:80/templates/
# Zertifikat prüfen
openssl x509 -in certificate.pem -text -noout
# Berechtigungen prüfen
chmod 600 private-key.pem
chmod 644 certificate.pem- Logs:
journalctl -u docx-server -f(bei PM2:pm2 logs) - Status:
pm2 statusoderps aux | grep node - Konfiguration: Alle Einstellungen in
server.js
MIT License - Frei verwendbar für kommerzielle und private Projekte.