188 lines
3.9 KiB
Markdown
188 lines
3.9 KiB
Markdown
# DOCX Template Server mit WebDAV
|
|
|
|
Ein Node.js Webserver zum Befüllen von DOCX-Templates mit Daten aus Web-Requests, erweitert um WebDAV-Funktionalität für direktes Bearbeiten der Dokumente.
|
|
|
|
## Features
|
|
|
|
- 📄 DOCX-Templates mit Daten befüllen
|
|
- 🌐 Daten über Web-Requests empfangen
|
|
- 📊 Unterstützung für Tabellen und Listen
|
|
- 🔄 Integration mit externen APIs
|
|
- 💾 Download generierter Dokumente
|
|
- 🎯 Einfache Web-Oberfläche
|
|
- **🗂️ WebDAV-Server für direktes Bearbeiten der Dateien**
|
|
- **📝 Office-Integration (Word, LibreOffice)**
|
|
- **🔐 Benutzerauthentifizierung**
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Start
|
|
|
|
```bash
|
|
# Entwicklung mit Auto-Reload
|
|
npm run dev
|
|
|
|
# Production
|
|
npm start
|
|
```
|
|
|
|
Der Server läuft standardmäßig auf `http://localhost:3000`
|
|
**WebDAV Server läuft auf `http://localhost:8080`**
|
|
|
|
## WebDAV-Zugriff
|
|
|
|
### Server URLs
|
|
- **Templates:** http://localhost:8080/templates/
|
|
- **Output:** http://localhost:8080/output/
|
|
|
|
### Anmeldedaten
|
|
- **Admin:** admin / password123
|
|
- **User:** user / docx2024
|
|
|
|
### Verbindung aufbauen
|
|
- **Windows:** Als Netzlaufwerk verbinden: `http://localhost:8080/output`
|
|
- **macOS:** Finder → Mit Server verbinden: `http://localhost:8080/output`
|
|
- **Linux:** Dateimanager → `dav://localhost:8080/output`
|
|
|
|
Siehe `WEBDAV-ANLEITUNG.md` für detaillierte Anleitungen.
|
|
|
|
## API Endpoints
|
|
|
|
### 📄 Dokument erstellen
|
|
```
|
|
POST /generate-document
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"templateName": "template.docx",
|
|
"data": {
|
|
"name": "Max Mustermann",
|
|
"email": "max@beispiel.de",
|
|
"items": [
|
|
{"product": "Produkt A", "quantity": 2, "price": 29.99}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### 🌐 Mit externen Daten
|
|
```
|
|
POST /generate-from-external/:id
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"templateName": "template.docx"
|
|
}
|
|
```
|
|
|
|
### 📋 Templates auflisten
|
|
```
|
|
GET /templates
|
|
```
|
|
|
|
### 📥 Dokument herunterladen
|
|
```
|
|
- `GET /download/:filename` - Dokumente herunterladen
|
|
- **`GET /webdav-info` - WebDAV-Konfigurationsinformationen**
|
|
- **`GET /files/output` - Liste aller Output-Dateien mit WebDAV-URLs**
|
|
- **`DELETE /files/output/:filename` - Datei löschen**
|
|
```
|
|
|
|
### 🔍 Status prüfen
|
|
```
|
|
GET /health
|
|
```
|
|
|
|
## Template-Syntax
|
|
|
|
Verwenden Sie diese Platzhalter in Ihren DOCX-Templates:
|
|
|
|
### Einfache Werte
|
|
```
|
|
{{name}} → Max Mustermann
|
|
{{email}} → max@beispiel.de
|
|
{{date}} → 30.09.2025
|
|
```
|
|
|
|
### Tabellen
|
|
Erstellen Sie eine Tabelle in Word und verwenden Sie:
|
|
```
|
|
{{#items}}
|
|
{{product}} | {{quantity}} | {{price}}
|
|
{{/items}}
|
|
```
|
|
|
|
### Bedingungen
|
|
```
|
|
{{#name}}
|
|
Dieser Text wird nur angezeigt wenn 'name' existiert
|
|
{{/name}}
|
|
```
|
|
|
|
## Ordnerstruktur
|
|
|
|
```
|
|
/home/nodejs/
|
|
├── server.js # Hauptserver
|
|
├── package.json # Dependencies
|
|
├── public/
|
|
│ └── index.html # Web-Interface
|
|
├── templates/ # DOCX-Templates hier ablegen
|
|
└── output/ # Generierte Dokumente
|
|
```
|
|
|
|
## Templates hinzufügen
|
|
|
|
1. Erstellen Sie ein DOCX-Template in Word
|
|
2. Fügen Sie Platzhalter wie `{{name}}` ein
|
|
3. Speichern Sie die Datei im `templates/` Ordner
|
|
|
|
## Beispiel-Template
|
|
|
|
Erstellen Sie eine Word-Datei mit folgendem Inhalt:
|
|
|
|
```
|
|
Rechnung
|
|
|
|
Name: {{name}}
|
|
E-Mail: {{email}}
|
|
Datum: {{date}}
|
|
|
|
Artikel:
|
|
{{#items}}
|
|
- {{product}} ({{quantity}}x) - {{price}}€
|
|
{{/items}}
|
|
|
|
Gesamt: {{total}}€
|
|
```
|
|
|
|
## Verwendung
|
|
|
|
1. Server starten: `npm run dev`
|
|
2. Browser öffnen: `http://localhost:3000`
|
|
3. Template im `templates/` Ordner ablegen
|
|
4. Über die Web-Oberfläche Dokumente generieren
|
|
|
|
## Externe APIs integrieren
|
|
|
|
Bearbeiten Sie die `server.js` und ersetzen Sie die Beispiel-Daten in der `/external-data/:id` Route:
|
|
|
|
```javascript
|
|
app.get('/external-data/:id', async (req, res) => {
|
|
try {
|
|
const id = req.params.id;
|
|
|
|
// Hier Ihren API-Call einfügen
|
|
const response = await fetch(`https://ihre-api.com/data/${id}`);
|
|
const data = await response.json();
|
|
|
|
res.json(data);
|
|
} catch (error) {
|
|
res.status(500).json({ error: 'API-Fehler' });
|
|
}
|
|
});
|
|
``` |