Nutrient.io vs IronPDF: Leitfaden für den technischen Vergleich
Wenn .NET-Entwickler Funktionen zur PDF-Verarbeitung benötigen, stoßen sie oft auf Nutrient.io (ehemals PSPDFKit) – eine Plattform, die sich von einem PDF-SDK zu einer kompletten Dokumentenanalyselösung entwickelt hat. Dieser Vergleich untersucht Nutrient.io undIronPDFanhand wichtiger technischer Aspekte, um Entwickler, Architekten und technische Entscheidungsträger bei der Auswahl des richtigen Werkzeugs für ihre Arbeitsabläufe zur PDF-Erstellung und -Bearbeitung zu unterstützen.
Was ist Nutrient.io?
Nutrient.io, ehemals bekannt als PSPDFKit, hat sich von einer auf PDFs ausgerichteten Bibliothek zu einer umfassenden Dokumentenanalyseplattform entwickelt. Diese Änderung erweitert die Funktionalität über die einfache PDF-Verarbeitung hinaus um KI-gestützte Dokumentenanalyse und umfassende Funktionen für den Dokumenten-Workflow.
Die Bibliothek funktioniert über die Klasse PdfProcessor, die asynchron mit PdfProcessor.CreateAsync() erstellt werden muss. Vorgänge wie die HTML-zu-PDF-Konvertierung, das Zusammenführen von Dokumenten und das Anbringen von Wasserzeichen verwenden alle async/await-Muster durch Methoden wie GeneratePdfFromHtmlStringAsync(), MergeAsync() und AddAnnotationAsync().
Die Plattform-Architektur positioniert Nutrient.io für große Organisationen mit seiner Enterprise-Preisstruktur. Die Umbenennung von PSPDFKit in Nutrient.io hat zu einer komplexen Dokumentation geführt, da Paketnamen und Referenzen manchmal beide Namen verwenden.
Was ist IronPDF?
IronPDF ist eine PDF-Bibliothek, die speziell für .NET-Umgebungen entwickelt wurde.IronPDFpositioniert sich nicht als Plattform für Dokumenten-Intelligenz, sondern konzentriert sich ausschließlich auf PDF-Operationen: Generierung, Manipulation, Zusammenführung, Wasserzeichen und mehr.
Die Klasse ChromePdfRenderer dient als primäre Schnittstelle für die PDF-Erzeugung und nutzt eine Chromium-basierte Rendering-Engine, um HTML, CSS und JavaScript in originalgetreue PDF-Dokumente zu konvertieren. Die Klasse PdfDocument bietet umfangreiche Manipulationsmöglichkeiten für bestehende PDFs.
Die Architektur vonIronPDFbetont die Einfachheit und bietet sowohl synchrone als auch asynchrone Methoden, um verschiedenen Anwendungsmustern gerecht zu werden. Die Konfiguration erfolgt über die Eigenschaft RenderingOptions, wobei die Einstellungen über die IDE-Autovervollständigung ermittelt werden können.
Vergleich der architektonischen Herangehensweise
Der grundlegende Unterschied zwischen diesen Bibliotheken liegt in ihrem Umfang und ihrer Komplexität. Nutrient.io hat sich zu einer Plattform entwickelt, währendIronPDFeine fokussierte Bibliothek bleibt.
| Aspekt | Nutrient.io (PSPDFKit) | IronPDF |
|---|---|---|
| Geltungsbereich | Document Intelligence-Plattform | Dedizierte PDF-Bibliothek |
| Komplexität | Hoch, Teil einer vollständigen Plattform | Moderat, mit Schwerpunkt auf PDF-Aufgaben |
| Preisgestaltung | Unternehmensebene | Zugänglich für unterschiedliche Teamgrößen |
| PDF-Schwerpunkt | Teil eines umfassenderen Dokumenten-Frameworks | Exklusive PDF-Funktionen |
| Integration | Kann aufgrund umfangreicher Funktionen komplex sein. | Einfach und geradlinig |
| Zielbenutzer | Große Organisationen, die fortschrittliche Dokumententechnologie benötigen | Entwickler, die zuverlässige PDF-Tools benötigen |
| API-Stil | Async-first, komplex | Sync mit asynchronen Optionen |
| Lernkurve | Steep (Plattform) | Gentle (Bibliothek) |
Der Plattformansatz von Nutrient.io bedeutet, dass Anwendungen KI-Funktionen und Dokument-Workflow-Möglichkeiten erhalten, auch wenn nur grundlegende PDF-Operationen benötigt werden. Dies kann bei Projekten mit einfachen Anforderungen zu unnötiger Komplexität führen.
HTML zu PDF Konvertierung
Beide Bibliotheken unterstützen die Konvertierung von HTML-Inhalten in PDF-Dokumente. Die API-Muster unterscheiden sich in Komplexität und Stil erheblich.
Nutrient.io HTML-zu-PDF-Ansatz:
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
await document.SaveAsync("output.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
await document.SaveAsync("output.pdf");
}
}
IronPDF HTML-zu-PDF-Ansatz:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Nutrient.io erfordert die asynchrone Erstellung eines Prozessors mit Warten Sie PdfProcessor.CreateAsync()und den anschließenden Aufruf asynchroner Methoden für die Erzeugung und Speicherung. Jede Operation verwendet das async/await-Muster, und die richtige Entsorgung erfordert die using-Anweisung.
IronPDF bietet standardmäßig synchrone Methoden, was die Komplexität des Codes reduziert. Der HTML-zu-PDF-Konvertierung-Workflow umfasst die Instanziierung eines ChromePdfRenderer, den Aufruf von RenderHtmlAsPdf() und das Speichern mit SaveAs(). Für Anwendungen, die asynchrone Operationen benötigen, bietetIronPDFauch asynchrone Methodenvarianten wie RenderHtmlAsPdfAsync().
Der Lebenszyklus des Prozessors in Nutrient.io erfordert eine sorgfältige Verwaltung mit using-Anweisungen, während der Renderer vonIronPDFohne komplexe Lebenszyklusverwaltung instanziiert und wiederverwendet werden kann.
PDF-Dokumente zusammenführen
Die Zusammenführung von Dokumenten verdeutlicht die Unterschiede in der API-Komplexität dieser Bibliotheken.
Nutrient.io Merge-Ansatz:
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document1 = await processor.OpenAsync("document1.pdf");
var document2 = await processor.OpenAsync("document2.pdf");
var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
await mergedDocument.SaveAsync("merged.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document1 = await processor.OpenAsync("document1.pdf");
var document2 = await processor.OpenAsync("document2.pdf");
var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
await mergedDocument.SaveAsync("merged.pdf");
}
}
IronPDF Merge-Ansatz:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Nutrient.io benötigt:
- Asynchrones Erstellen eines Prozessors
- Asynchrones Öffnen jedes Dokuments mit
await processor.OpenAsync() - Erstellen einer
Liste<PdfDocument>für den Zusammenführungsvorgang - Aufrufen der asynchronen
MergeAsync()Methode - Asynchrones Speichern des Ergebnisses
IronPDF vereinfacht dies durch das Laden von Dateien mit PdfDocument.FromFile() und den Aufruf der statischen Methode PdfDocument.Merge(). Die PDF-Zusammenführungsfunktionalität akzeptiert mehrere Dokumente direkt, ohne dass Listen für einfache Zusammenführungen erstellt werden müssen.
Wasserzeichen hinzufügen
Das Wasserzeichen offenbart einen grundlegenden Unterschied in der Designphilosophie: Nutrient.io verwendet Anmerkungsobjekte, währendIronPDFHTML-Zeichenfolgen verwendet.
Nutrient.io Wasserzeichen Ansatz:
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync("document.pdf");
for (int i = 0; i < document.PageCount; i++)
{
var watermark = new TextAnnotation("CONFIDENTIAL")
{
Opacity = 0.5,
FontSize = 48
};
await document.AddAnnotationAsync(i, watermark);
}
await document.SaveAsync("watermarked.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync("document.pdf");
for (int i = 0; i < document.PageCount; i++)
{
var watermark = new TextAnnotation("CONFIDENTIAL")
{
Opacity = 0.5,
FontSize = 48
};
await document.AddAnnotationAsync(i, watermark);
}
await document.SaveAsync("watermarked.pdf");
}
}
IronPDF-Wasserzeichen-Ansatz:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
50,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
50,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
Nutrient.io erfordert die Iteration durch jede Seite, die Erstellung von TextAnnotation-Objekten mit Eigenschaften wie Opacity und FontSize und das asynchrone Hinzufügen jeder Annotation mit await document.AddAnnotationAsync(). Dieser Ansatz erfordert ein Verständnis der Annotations-API und eine manuelle Iteration der Seite.
Die Wasserzeichenfunktionalität vonIronPDFverwendet HTML-Strings mit CSS-Styling. Die Methode ApplyWatermark() akzeptiert die Parameter HTML-Inhalt, Drehwinkel und Ausrichtung und wendet das Wasserzeichen automatisch auf alle Seiten an. CSS-Eigenschaften wie Opazität und Farbe übernehmen die Gestaltung, für die sonst separate Anmerkungseigenschaften erforderlich wären.
Der HTML-basierte Ansatz bietet mehrere Vorteile:
- Vertraute Syntax für die Webentwicklung
- Vollständige CSS-Styling-Fähigkeiten
- Einzelner Methodenaufruf gilt für alle Seiten
- Keine manuelle Überarbeitung der Seite erforderlich
API-Mapping-Referenz
Für Teams, die eine Migration von Nutrient.io zuIronPDFerwägen, hilft das Verständnis der API-Zuordnungen, den Aufwand abzuschätzen.
Kern-Methoden-Zuordnungen
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
Warten Sie PdfProcessor.CreateAsync() |
new ChromePdfRenderer() |
Warte auf processor.OpenAsync(Pfad) |
PdfDocument.FromFile(path) |
await processor.GeneratePdfFromHtmlStringAsync(html) |
renderer.RenderHtmlAsPdf(html) |
Warten Sie processor.MergeAsync(docs) |
PdfDocument.Merge(pdfs) |
await document.SaveAsync(path) |
pdf.SaveAs(Pfad) |
document.ToBytes() |
pdf.BinaryData |
document.ToStream() |
pdf.Stream |
Konfigurations-Zuordnungen
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
new PdfConfiguration { PageSize = ... } |
renderer.RenderingOptions.PaperSize = ... |
config.Margins = new Margins(t, r, b, l) |
Einzelne Randeigenschaften |
config.Orientation = Orientation.Landscape |
RenderingOptions.PaperOrientation |
Zuordnungen von Wasserzeichen und Kommentaren
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
new TextAnnotation("Text") |
HTML-Zeichenkette |
Anmerkung.Deckkraft = 0.5 |
CSS Deckkraft: 0.5 |
Anmerkung.FontSize = 48 |
CSS Schriftgröße: 48px |
await document.AddAnnotationAsync(index, annotation) |
pdf.ApplyWatermark(html) |
Kopf-/Fußzeilen-Zuordnungen
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
| (komplexer Annotationsansatz)_ | RenderingOptions.HtmlHeader |
| (komplexer Annotationsansatz)_ | RenderingOptions.HtmlFooter |
| (manuelle Seitenzählung)_ | {Seite}Platzhalter |
| (manuelle Berechnung)_ | {Gesamtseiten}Platzhalter |
Nutrient.io erfordert manuelle Seitenzählung und Iteration, um Seitenzahlen zu Kopf- oder Fußzeilen hinzuzufügen.IronPDFbietet eingebaute Platzhalter, die automatisch Seitenzahlen und Summen einfügen.
Namensraum- und Paketänderungen
Teams, die von Nutrient.io zuIronPDFmigrieren, müssen die Namespace-Importe aktualisieren:
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
Verwendung von PSPDFKit.Pdf; |
IronPdf verwenden; |
Verwendung von PSPDFKit.Pdf.Document; |
IronPdf verwenden; |
Verwendung von PSPDFKit.Pdf.Rendering; |
IronPdf.Rendering verwenden; |
Verwendung von PSPDFKit.Pdf.Annotation; |
IronPdf verwenden; |
Nutrient.Pdf verwenden; |
IronPdf verwenden; |
NuGet-Paket-Migration:
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF
# Install IronPDF
dotnet add package IronPdf
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF
# Install IronPDF
dotnet add package IronPdf
Async vs. Sync API Entwurf
Nutrient.io verwendet eine async-first Architektur, bei der fast jede Operation async/await erfordert:
// Nutrient.io pattern - async everywhere
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync(path);
await document.SaveAsync(outputPath);
// Nutrient.io pattern - async everywhere
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync(path);
await document.SaveAsync(outputPath);
IronPDF bietet standardmäßig synchrone Methoden, wobei asynchrone Alternativen verfügbar sind:
//IronPDFsync pattern (simpler)
var pdf = PdfDocument.FromFile(path);
pdf.SaveAs(outputPath);
//IronPDFasync pattern (when needed)
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
//IronPDFsync pattern (simpler)
var pdf = PdfDocument.FromFile(path);
pdf.SaveAs(outputPath);
//IronPDFasync pattern (when needed)
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
Für Anwendungen, bei denen PDF-Vorgänge nicht asynchron ablaufen müssen - wie z. B. Hintergrundaufträge, Konsolenanwendungen oder synchrone Servicemethoden - reduziert die Standard-Sync-API vonIronPDFdie Komplexität des Codes. Wenn async von Vorteil ist, sind die Methoden verfügbar.
Wenn Teams den Wechsel von Nutrient.io zuIronPDFerwägen
Mehrere Faktoren veranlassen Teams,IronPDFals Alternative zu Nutrient.io zu bewerten:
Plattformkomplexität: Teams, die lediglich PDF-Erstellung und -Bearbeitung benötigen, könnten feststellen, dass die Dokumentenanalyseplattform von Nutrient.io unnötige Funktionen enthält. Die KI-Funktionen und die Funktionen des Dokumenten-Workflows machen Projekte mit einfachen Anforderungen komplexer.
Preistransparenz: Die Enterprise-Preisgestaltung von Nutrient.io erfordert die Kontaktaufnahme mit dem Vertrieb, um Angebote einzuholen, was die Budgetplanung erschwert. Organisationen mit begrenzten Budgets oder solche, die vorhersehbare Kosten benötigen, können das veröffentlichte Preismodell vonIronPDFbevorzugen.
API-Einfachheit: Das async-first-Design von Nutrient.io erfordert async/await-Muster im gesamten Quellcode, selbst für einfache Operationen. Teams, die synchronen Code bevorzugen oder die Flexibilität zwischen sync und async wünschen, profitieren von IronPDFs Ansatz.
Verwirrung durch die Umbenennung: Der Übergang von PSPDFKit zu Nutrient.io hat zu einer Fragmentierung der Dokumentation geführt, da einige Ressourcen noch auf alte Namen und Paketbezeichner verweisen. Teams, die auf diese Verwirrung stoßen, können nach Bibliotheken mit stabiler Namensgebung suchen.
Integrationsvereinfachung: Das Erstellen von Prozessoren, das Verwalten des Lebenszyklus und das Behandeln asynchroner Muster verursachen zusätzlichen Integrationsaufwand. Die unkomplizierte Instanziierung und die Methodenaufrufe vonIronPDFverkürzen die Einarbeitungszeit für neue Entwickler.
Implementierung des Wasserzeichens: Die annotationsbasierte Wasserzeichenfunktion in Nutrient.io erfordert Seiteniteration und die Erstellung von Annotationsobjekten. Der HTML-basierte Ansatz vonIronPDFnutzt vertraute Webentwicklungsfähigkeiten und wendet Wasserzeichen in einem einzigen Aufruf an.
Installationsvergleich
Nutrient.io Installation:
Install-Package PSPDFKit.Dotnet
Install-Package PSPDFKit.Dotnet
IronPDF-Installation:
Install-Package IronPdf
Install-Package IronPdf
IronPDF erfordert eine Lizenzschlüsselkonfiguration beim Start der Anwendung:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
Beide Bibliotheken unterstützen das .NET Framework und moderne .NET-Versionen, wodurch sie mit Anwendungen kompatibel sind, die auf .NET 10 und C# 14 ausgerichtet sind.
Die Entscheidung treffen
Die Wahl zwischen Nutrient.io undIronPDFhängt von Ihren spezifischen Anforderungen ab:
Ziehen Sie Nutrient.io in Betracht, wenn: Ihre Organisation eine vollständige Dokumentenintelligenzplattform mit KI-Funktionen benötigt, Sie über Unternehmensbudgets und Beschaffungsprozesse verfügen, die mit verhandelten Preisen arbeiten, und Ihre Anwendungsarchitektur bereits durchgehend asynchron ist.
IronPDF ist die richtige Wahl, wenn: Sie eine fokussierte PDF-Funktionalität ohne Plattform-Overhead benötigen, Sie transparente Preise und eine einfachere Beschaffung bevorzugen, Sie Flexibilität zwischen synchronen und asynchronen API-Mustern wünschen, Sie HTML-basierte Wasserzeichen gegenüber Annotationsobjekten bevorzugen oder Sie integrierte Kopf-/Fußzeilenplatzhalter für Seitenzahlen benötigen.
Für Teams, die im Jahr 2025 moderne .NET-Anwendungen entwickeln und für das Jahr 2026 planen, hilft die Bewertung der tatsächlich benötigten PDF-Funktionen im Vergleich zu den vollständigen Plattformfunktionen bei der Auswahl des geeigneten Tools. Viele Projekte stellen fest, dass eine gezielte PDF-Bibliothek ihre Anforderungen erfüllt, ohne die Komplexität einer Document Intelligence-Plattform.
Einstieg mit IronPDF
Testen SieIronPDFfür Ihre PDF-Verarbeitungsanforderungen:
- Installieren Sie das IronPDF NuGet-Paket:
Install-Package IronPdf - Lesen Sie das HTML to PDF tutorial für grundlegende Konvertierungsmuster
- Entdecken Sie die Wasserzeichen-Funktionalität für das Branding von Dokumenten
- Prüfen Sie die Fähigkeiten zur Zusammenführung von PDF-Dateien für die Zusammenstellung von Dokumenten
Die IronPDF-Tutorials bieten umfassende Beispiele für gängige Szenarien, und die API-Referenz dokumentiert alle verfügbaren Klassen und Methoden.
Abschluss
Nutrient.io undIronPDFstellen unterschiedliche Ansätze für die PDF-Funktionalität in .NET-Anwendungen dar. Nutrient.io hat sich zu einer Plattform für Dokumentenintelligenz mit KI-Funktionen und einer Positionierung im Unternehmensbereich entwickelt, währendIronPDFseinen Fokus auf einer speziellen PDF-Bibliothek mit einfacher Integration behält.
Für Teams, die PDF-Erzeugung, -Manipulation, -Wasserzeichen und -Zusammenführung ohne zusätzliche Plattformfunktionen benötigen, bietet IronPDFs fokussierter Ansatz einfachere APIs, flexible Sync/Async-Muster und HTML-basierte Wasserzeichen. Die reduzierte Komplexität führt zu einer schnelleren Integration und einfacheren Wartung.
Bewerten Sie beide Optionen anhand Ihrer tatsächlichen PDF-Anforderungen, der Präferenzen des Teams für API-Muster und der Budgetbeschränkungen. Das Verständnis der in diesem Vergleich dargelegten architektonischen Unterschiede wird Ihnen helfen, eine fundierte Entscheidung zu treffen, die Ihren Anforderungen an die PDF-Verarbeitung und Ihren Entwicklungspraktiken gerecht wird.