Wie man benutzerdefinierte Silbentrennung zur PDF-Erstellung in C# hinzufügt

This article was translated from English: Does it need improvement?
Translated
View the article in English

Benutzerdefinierte Silbentrennung bei der PDF-Erstellung in C# hilft, ungleichmäßige Abstände, Wortüberläufe und schlechte Umbrüche in schmalen Spalten, Rechnungen, Verträgen und mehrsprachigen Berichten zu beheben. Wenn ein PDF-Renderer die richtigen Silbentrennungsregeln nicht anwendet, kann Blocksatz große Lücken hinterlassen oder schlecht über Zeilen umbrechen.

In IronPDF wird die Silbentrennung während des HTML-zu-PDF-Renderings über die Chromium-Engine gehandhabt, nicht über ein Word-ähnliches Dokument-Objekt-Modell. Die CSS-Eigenschaft hyphens: auto ermöglicht es dem Renderer, Wörter an gültigen Silbengrenzen zu trennen, und IronPDF wendet dieses Verhalten bei der PDF-Erstellung an. Die Eigenschaft CustomHyphenation in ChromePdfRenderOptions steuert, welche Silbentrennungsmuster verwendet werden.

Musterdateien verwenden das TeX-Format und können entweder von einem lokalen Dateipfad oder einer entfernten URL geladen werden. Dies ermöglicht es, benutzerdefinierte Silbentrennungsregeln für verschiedene Sprachen und Dokumentlayouts mit mehr Kontrolle über Worttrennungen im finalen PDF zu definieren.

Dieser Leitfaden erläutert die Verwendung der CustomHyphenationDefinitions-API in C#, einschließlich des Ladens lokaler und entfernter Muster, des Fallback-Verhaltens, der Einschränkungen, der Fehlerbehandlung und des Cachings.


NuGet Mit NuGet installieren

PM >  Install-Package IronPdf

Schauen Sie sich IronPDF auf NuGet für eine schnelle Installation an. Mit über 10 Millionen Downloads transformiert es die PDF-Entwicklung mit C#. Sie können auch das DLL oder den Windows Installer herunterladen.

Schnellstart

  1. Installieren Sie IronPDF mit NuGet Package Manager

    PM > Install-Package IronPdf
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    using IronPdf;
    
    // Create renderer and assign custom hyphenation patterns from a remote URL
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
    {
        PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
        ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
    };
    
    // Render HTML with CSS hyphens:auto to trigger word breaking
    var pdf = renderer.RenderHtmlAsPdf("<div style='text-align:justify; hyphens:auto; width:120px;'>Supercalifragilisticexpialidocious</div>");
    pdf.SaveAs("hyphenated.pdf");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Minimaler Arbeitsablauf

  1. Installieren Sie das IronPDF NuGet-Paket
  2. Erstellen Sie eine ``-Instanz
  3. Setzen Sie auf eine neue mit einem ``-Pfad oder einer URL
  4. Fügen Sie `` in das CSS des HTML-Inhalts ein
  5. Rufen Sie `` auf und speichern Sie das Ergebnis

Wie funktioniert benutzerdefinierte Silbentrennung im PDF-Rendering?

Die Klasse definiert, woher IronPDF während des Rendering-Prozesses Silbentrennungsregeln lädt. Die Chromium-Engine liest diese Muster und wendet sie an, wenn die CSS-Regel in einem HTML-Element vorhanden ist.

Was ist die Klasse CustomHyphenationDefinitions?

Die Klasse legt zwei Eigenschaften offen:

Tabelle 1: Eigenschaften von CustomHyphenationDefinitions
EigenschaftTypErforderlichBeschreibung
PatternSourceStringJaPfad oder URL zur Silbentrennungsmusterdokument (z. B. hyph-en-us.pat.txt)
ExceptionSourceStringNeinPfad oder URL zur Silbentrennungsausnahmedatei (z. B. hyph-en-us.hyp.txt)

Musterdateien folgen dem TeX-Silbentrennungsformat, das vom tex-hyphen-Projekt auf GitHub gepflegt wird. Jede Sprache verfügt über zwei Dateien im Repository: hyph-{lang}.pat.txt für Musterregeln und hyph-{lang}.hyp.txt für die Ausnahmeliste. Bei Verweisen auf Dateien, die auf GitHub gehostet werden, ist die URL des Rohinhalts (beginnend mit https://raw.githubusercontent.com/) erforderlich – eine standardmäßige GitHub-Seiten-URL liefert HTML, nicht den Mustertext.

Was überschreibt Custom Hyphenation die integrierte Spracheinstellung?

Die Enumeration und ihre in bieten integrierte Voreinstellungen für Englisch (US), Englisch (britisch) und Russisch. Die Eigenschaft hat Vorrang vor dieser Enumeration, wenn beide gesetzt sind, wobei eine klare Prioritätskette gilt:

  1. Benutzerdefinierte Silbentrennung – wenn mit einem gültigen `` festgelegt, werden benutzerdefinierte Muster verwendet
  2. HyphenationLanguage — wenn keine benutzerdefinierten Muster konfiguriert sind, wird die eingebaute Spracheinstellung angewandt
  3. Neinne — wenn keines von beiden gesetzt ist, erfolgt keine Silbentrennung

Was passiert, wenn das Laden von benutzerdefinierten Mustern fehlschlägt?

Fehler beim Laden von Mustern werden protokolliert, aber keine Ausnahmen geworfen. Der Render-Vorgang wird ohne Silbentrennung fortgesetzt, anstatt zu fehlschlagen. Wenn zusätzlich ein Wert für `` konfiguriert ist, greift der Renderer auf diese integrierte Voreinstellung zurück.

Dieses stille Fehlverhalten ist eine bewusste Designentscheidung für Produktionsumgebungen. Eine Netzwerk-Zeitüberschreitung beim Abrufen einer entfernten Musterdokument, ein unzulässiger Dateipfad, ein DNS-Auflösungsfehler oder fehlerhafter Musterinhalt wird die Rendering-Pipeline nicht zum Absturz bringen. Das PDF wird dennoch erstellt — es fehlen nur die Silbentrennungen.

Der Kompromiss ist die Sichtbarkeit. Eine fehlerhafte Musterdokument oder eine unerreichbare URL beim ersten Laden beeinträchtigt stillschweigend jeden nachfolgenden Render-Vorgang unter Verwendung derselben Quellwerte (da das Caching auch den Fehlerzustand speichert). Die Empfehlung lautet, Musterdokumente zu validieren und den Netzwerkzugriff auf entfernte URLs während des Anwendungsstarts oder CI/CD-Bereitstellungsprüfungen zu bestätigen — nicht zur Renderzeit.


Wie können Musterdokumente von einer entfernten URL geladen werden?

Das Verweisen auf `` unter einer Remote-URL ist der schnellste Weg, um benutzerdefinierte Silbentrennung anzuwenden, ohne Dateien in das Projekt einzubinden. Das folgende Beispiel lädt US-amerikanische Englisch-Muster aus dem tex-hyphen-Repository und rendert einen Blocksatz-Textblock:

using IronPdf;

var renderer = new ChromePdfRenderer();

// Load custom patterns from a remote TeX hyphenation repository
renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
{
    PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
    ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
};

string html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .narrow-column {
            width: 150px;
            text-align: justify;
            hyphens: auto;
            -webkit-hyphens: auto;
            border: 1px solid #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class='narrow-column'>
        The extraordinarily sophisticated implementation demonstrates
        how hyphenation significantly improves the typographical quality
        of justified text in constrained column widths.
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("remote-hyphenation.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Load custom patterns from a remote TeX hyphenation repository
renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
{
    PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
    ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
};

string html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .narrow-column {
            width: 150px;
            text-align: justify;
            hyphens: auto;
            -webkit-hyphens: auto;
            border: 1px solid #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class='narrow-column'>
        The extraordinarily sophisticated implementation demonstrates
        how hyphenation significantly improves the typographical quality
        of justified text in constrained column widths.
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("remote-hyphenation.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Load custom patterns from a remote TeX hyphenation repository
renderer.RenderingOptions.CustomHyphenation = New CustomHyphenationDefinitions With {
    .PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
    .ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
}

Dim html As String = "
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .narrow-column {
            width: 150px;
            text-align: justify;
            hyphens: auto;
            -webkit-hyphens: auto;
            border: 1px solid #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class='narrow-column'>
        The extraordinarily sophisticated implementation demonstrates
        how hyphenation significantly improves the typographical quality
        of justified text in constrained column widths.
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("remote-hyphenation.pdf")
$vbLabelText   $csharpLabel

Ausgabe

Das gerenderte PDF zeigt den Blocksatzabsatz mit sauberen Worttrennungen an Silbengrenzen. Ohne Silbentrennung würde derselbe Text große Wortzwischenräume erzeugen oder die Spalte überlaufen.

Sowohl die CSS-Deklarationen als auch sind für die Chromium-Kompatibilität erforderlich. Die Regel `` macht die Silbentrennung am deutlichsten sichtbar. Wenn keine CSS-Deklarationen auf den Ziel-HTML-Elementen vorhanden sind, werden die benutzerdefinierten Muster geladen, aber nicht angewendet.

Der URL muss auf rohe Textinhalte zeigen. Eine Standard-GitHub-URL wie https://github.com/hyphenation/tex-hyphen/blob/master/... gibt einen HTML-Seiten-Wrapper zurück, der die Mustervalidierung nicht besteht. Verwenden Sie das Formular https://raw.githubusercontent.com/... oder klicken Sie auf GitHub auf die Schaltfläche "Raw", um die korrekte URL zu erhalten.)}]

Was sind die Einschränkungen beim Entfernten Laden?

Tabelle 2: Einschränkungen bei entfernten URLs
EinschränkungWert
ProtokolleHTTP und HTTPS (HTTPS empfohlen)
Erlaubte Inhaltsartentext/plain, application/octet-stream
Maximale Antwortgröße5 MB
Zeitüberschreitung der Anfrage10 Sekunden
SicherheitAnfragen an private/lokale IPs (10.x.x.x, 192.168.x.x, localhost) werden blockiert um SSRF-Angriffe zu verhindern
Abgelehnter InhaltBinärdateien, Dateien mit Nullbytes, Dateien mit
Ahmad Sohail
Full-Stack-Entwickler

Ahmad ist ein Full-Stack-Entwickler mit einer soliden Grundlage in C#, Python und Webtechnologien. Er hat ein großes Interesse am Aufbau skalierbarer Softwarelösungen und genießt es, zu erkunden, wie Design und Funktionalität in realen Anwendungen aufeinandertreffen.

Bevor er dem Iron Software Team beitrat, arbeitete ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 18,926,724 | Version: 2026.5 just released
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an