CloudPreviewExtractor ist ein docuvita-Plugin (.dll), das Office-Dokumente mithilfe eines externen Python-Microservices in PDF konvertiert und dabei Volltext sowie Vorschau-Thumbnail für docuvita bereitstellt.
Das Plugin implementiert die IExtractor-Schnittstelle von docuvita und wird automatisch geladen, sobald die DLL im Extractors-Verzeichnis liegt.
Hauptfunktionen:
┌──────────────────────────────────────────────────┐
│ docuvita │
│ │
│ DocumentServices lädt CloudPreviewExtractor │
│ ↓ │
│ IExtractor.GetContent() aufgerufen │
└────────────────────┬─────────────────────────────┘
│ HTTP POST /convert
│ multipart/form-data
▼
┌──────────────────────────────────────────────────┐
│ fd.Cloud.Preview.Extractor (Python) │
│ FastAPI + LibreOffice │
└──────────────────┬───────────────────────────────┘
│ application/pdf
▼
┌──────────────────────────────────────────────────┐
│ CloudPreviewExtractor │
│ │
│ 1. PDF → Temp-Datei (_supplementalTarget) │
│ 2. PDF → Volltext (PdfPig) │
│ 3. PDF → Thumbnail (Docnet.Core) │
└──────────────────────────────────────────────────┘
| Eigenschaft | Typ | Zugriff | Beschreibung |
|---|---|---|---|
FileExtensions |
string[] |
get | Dateierweiterungen, die vom Extraktor verarbeitet werden |
CanProcessLanguage |
bool |
get | Unterstützung für OCR-Sprache — hier immer false |
CanCreateSupplementalDocument |
bool |
get | Pflicht true — aktiviert die PDF-Vorschau in docuvita |
SourceFileName |
string |
get/set | Pfad zur Eingabedatei — wird von docuvita gesetzt |
SupplementalTargetFilename |
string |
get | Pfad zum generierten PDF — docuvita liest diesen nach GetContent() |
SetAvailableExtractors |
Dictionary<string, IExtractor> |
set | Andere registrierte Extraktoren (nicht verwendet) |
ExtendedProperties |
Dictionary<string, string> |
set | Konfigurationswerte aus docuvita (z. B. ServerUrl, ApiKey) |
ObjectId |
int |
set | Objekt-ID in docuvita |
VersionId |
int |
set | Versions-ID in docuvita |
SystemReferenceId |
int |
set | Systemreferenz-ID in docuvita |
| Methode | Rückgabe | Beschreibung |
|---|---|---|
GetContent() |
string |
Hauptmethode — konvertiert das Dokument, füllt _supplementalTargetFilename und gibt den Volltext zurück |
GetDocumentProperties() |
DocumentPropertiesElement |
Gibt Metadaten zurück — wird von docuvita nach GetContent() aufgerufen |
SetLanguage(CultureInfo) |
void |
Setzt die OCR-Sprache — wird ignoriert (CanProcessLanguage = false) |
Wird in GetDocumentProperties() zurückgegeben. docuvita liest diese Werte nach GetContent().
| Feld | Typ | Wichtigkeit | Beschreibung |
|---|---|---|---|
Thumbnailpreview |
byte[] |
Kritisch | Miniaturansicht der ersten Seite — erzeugt über CommonThumbnailHelper.GetThumbnailForPage(bmp) |
PageCount |
int |
Wichtig | Seitenanzahl des Dokuments |
DocFilename |
string |
Optional | Dateiname des Quelldokuments |
DocFileExtension |
string |
Optional | Dateierweiterung |
VersionId |
int |
Optional | Versions-ID |
Mail*-Felder |
string / DateTime |
Optional | Nur für E-Mail-Dokumente relevant |
So entsteht die Vorschau in docuvita:
CanCreateSupplementalDocument = true
↓
GetContent()
↓
Datei → HTTP POST → Python-Server → PDF-Bytes
↓
PDF-Bytes → Temp-Datei gespeichert
↓
_supplementalTargetFilename = Pfad zur Temp-Datei
↓ ↓
Volltext extrahiert (PdfPig) Thumbnail generiert (Docnet.Core)
↓ ↓
return text DocumentPropertiesElement.Thumbnailpreview
DocumentPropertiesElement.PageCount
↓
docuvita liest SupplementalTargetFilename → zeigt PDF-Vorschau
docuvita liest GetDocumentProperties() → zeigt Thumbnail + Seitenanzahl
Wichtig: Alle drei Teile müssen erfüllt sein — fehlt einer, erscheint keine Vorschau:
_supplementalTargetFilenamemuss auf eine vorhandene, nicht leere Datei zeigenThumbnailpreviewmuss gefüllt seinCanCreateSupplementalDocumentmusstruesein
Beim Start lädt LoadConfig() die Konfigurationsdatei CloudPreviewExtractor.dll.config aus demselben Verzeichnis wie die DLL.
Konfigurationswerte werden in dieser Priorität gelesen:
ExtendedProperties (von docuvita zur Laufzeit gesetzt)AppSettings aus der .config-Datei| Einstellung | Standard | Beschreibung |
|---|---|---|
ServerUrl |
http://localhost:8000 |
Basis-URL des Python-Microservices |
ApiKey |
(leer) | API-Key für die Authentifizierung — Pflichtfeld |
TimeoutSeconds |
150 |
HTTP-Timeout in Sekunden |
GetHttpClient() erstellt einen HttpClient mit:
TimeoutSecondsX-API-Key mit dem konfigurierten API-KeyDer Client wird als Instanzvariable gecacht — pro Extraktor-Instanz wird nur ein Client erstellt.
Fehlt der ApiKey, wird null zurückgegeben und GetContent() bricht ab.
Hauptablauf:
1. _supplementalTargetFilename = null (Reset)
2. _documentProperties = new DocumentPropertiesElement()
3. Prüfen: SourceFileName vorhanden?
4. Prüfen: HttpClient verfügbar?
5. CallConvertEndpoint() → pdfBytes
6. PDF in Temp-Datei schreiben → _supplementalTargetFilename setzen
7. ExtractTextFromPdf(pdfBytes) → Volltext + Thumbnail
8. Volltext zurückgeben
Sendet die Quelldatei als multipart/form-data an POST /convert:
Content-Type: multipart/form-data
X-API-Key: <ApiKey>
Field: files = <Dateiinhalt>
Bei HTTP-Fehler wird der Antwortinhalt geloggt und null zurückgegeben.
Verarbeitet die PDF-Bytes in zwei unabhängigen Schritten — ein Fehler im ersten Schritt verhindert den zweiten nicht:
Schritt 1 — Volltext (PdfPig):
MemoryStream_documentProperties.PageCountSchritt 2 — Thumbnail (Docnet.Core):
Bitmap via Marshal.CopyCommonThumbnailHelper.GetThumbnailForPage(bmp) auf_documentProperties.ThumbnailpreviewDatei: CloudPreviewExtractor.dll.config
Speicherort: gleiches Verzeichnis wie die DLL
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServerUrl" value="http://localhost:8000" />
<add key="ApiKey" value="HIER_API_KEY_EINTRAGEN" />
<add key="TimeoutSeconds" value="150" />
</appSettings>
</configuration>
Alternativ können alle Werte über
ExtendedPropertiesvon docuvita zur Laufzeit gesetzt werden — diese haben Vorrang vor der Datei.
| Kategorie | Erweiterungen |
|---|---|
| Writer (Text) | DOC, DOCX, DOCM, DOTX, DOTM, ODT, OTT, FODT, MD, RTF, TXT, HTM, HTML, WPS, WPD, ABW |
| Calc (Tabellen) | XLS, XLSX, XLSM, XLSB, XLTX, XLTM, XLW, ODS, OTS, FODS, CSV, DIF, SLK, DBF |
| Impress (Präsentationen) | PPT, PPTX, PPTM, POTX, POTM, ODP, OTP, FODP |
Die tatsächliche Konvertierbarkeit hängt von der LibreOffice-Installation auf dem Server ab.
| Paket | Version | Verwendung |
|---|---|---|
PdfPig |
0.1.14 | Textextraktion aus PDF |
Docnet.Core |
2.6.0 | Rendering der ersten PDF-Seite als Bitmap für Thumbnail |
log4net |
— | Logging (wird von docuvita bereitgestellt) |
| Assembly | Verwendung |
|---|---|
System.Drawing |
Bitmap, Rectangle, PixelFormat, ImageLockMode |
System.Net.Http |
HttpClient, MultipartFormDataContent |
System.Configuration |
Laden der .config-Datei |
IExtractor.dll |
IExtractor-Schnittstelle (von docuvita bereitgestellt) |
docuvita.DocumentServices.dll |
DocumentPropertiesElement, CommonThumbnailHelper |
CloudPreviewExtractor.dll in das Verzeichnis Extractors kopieren:C:\Program Files (x86)\docuvita\docuvita Server 2.0\docuvita.DocumentServices\Extractors\CloudPreviewExtractor.dll.config mit gültigem ApiKey und ServerUrl in dasselbe Verzeichnis legenDocnet.Core, PdfPig) als DLLs in dasselbe Verzeichnis kopieren