Jak dodać własne myślniki do generowania PDF w C

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

Własne myślniki w generowaniu PDF w C# pomagają naprawić niewygodne rozmieszczenie, przepełnienie słów i słabe łamanie tekstu w wąskich kolumnach, fakturach, kontraktach i wielojęzycznych raportach. Gdy renderer PDF nie stosuje odpowiednich wzorców myślników, justowany tekst może pozostawić duże luki lub źle się łamać na liniach.

W IronPDF myślniki są obsługiwane podczas renderowania HTML do PDF przez silnik Chromium, a nie przez model dokumentu w stylu Word. Właściwość CSS hyphens: auto pozwala rendererowi dzielić słowa w prawidłowych miejscach między sylabami, a IronPDF stosuje to zachowanie podczas generowania plików PDF. Właściwość CustomHyphenation w ChromePdfRenderOptions kontroluje, jakie wzorce dzielenia wyrazów są używane.

Pliki wzorców używają formatu TeX i mogą być ładowane z lokalnej ścieżki pliku lub zdalnego URL. To umożliwia definiowanie własnych reguł myślników dla różnych języków i układów dokumentów z większą kontrolą nad łamaniem słów w finalnym PDF.

W niniejszym przewodniku wyjaśniono, jak korzystać z interfejsu API CustomHyphenationDefinitions w języku C#, w tym z lokalnego i zdalnego ładowania wzorców, zachowania awaryjnego, ograniczeń, obsługi błędów i buforowania.


NuGet Zainstaluj za pomocą NuGet

PM >  Install-Package IronPdf

Sprawdź IronPDF na NuGet dla szybkiej instalacji. Z ponad 10 milionami pobrań, przekształca rozwój PDF z C#. Możesz również pobrać DLL lub instalator Windows.

Szybki start

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    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. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Minimalny Przebieg

  1. Zainstaluj pakiet IronPDF NuGet
  2. Utwórz instancję ``
  3. Ustaw na nowy z ścieżką lub adresem URL ``
  4. Dodaj `` do arkusza stylów treści HTML
  5. Wywołaj `` i zapisz wynik

Jak Działa Własne Łamanie Myślników w Renderowaniu PDF?

Klasa określa, skąd IronPDF pobiera reguły dzielenia wyrazów podczas procesu renderowania. Silnik Chromium odczytuje te wzorce i stosuje je, gdy reguła CSS występuje w elemencie HTML.

Co To Jest Klasa CustomHyphenationDefinitions?

Klasa udostępnia dwie właściwości:

Tabela 1: Właściwości CustomHyphenationDefinitions
WłaściwośćTypWymaganeOpis
PatternSourcestringTakŚcieżka lub URL do pliku wzorców myślników (np. hyph-en-us.pat.txt)
Źródło wyjątkustringNieŚcieżka lub URL do pliku wyjątków myślników (np. hyph-en-us.hyp.txt)

Pliki wzorców stosują format hyphenacji TeX utrzymywany przez projekt tex-hyphen na GitHub. Każdy język ma w repozytorium dwa pliki: hyph-{lang}.pat.txt dla reguł wzorców i hyph-{lang}.hyp.txt dla listy wyjątków. Przy odwoływaniu się do plików hostowanych na GitHubie wymagany jest adres URL surowej treści (zaczynający się od https://raw.githubusercontent.com/) — standardowy adres URL strony GitHub zwraca kod HTML, a nie tekst wzorca.

Co powoduje, że niestandardowe podziały zastępują wbudowane ustawienia języka?

Wyliczenie oraz jego w zapewnia wbudowane ustawienia domyślne dla języka angielskiego (amerykańskiego), angielskiego (brytyjskiego) i rosyjskiego. Właściwość ma pierwszeństwo przed tą enum, gdy obie są ustawione, zgodnie z jasną hierarchią priorytetów:

  1. CustomHyphenation — jeśli ustawiono prawidłowy ``, używane są niestandardowe wzorce
  2. HyphenationLanguage — jeśli nie skonfigurowano własnych wzorców, zastosowano wbudowane ustawienie języka
  3. Niene — jeśli żaden z nich nie jest ustawiony, brak myślników

Co Się Dzieje, Gdy Ładowanie Własnych Wzorców Się Nie Powoduje?

Błędy podczas ładowania wzorców są rejestrowane, ale nie rzucają wyjątków. Operacja renderowania kontynuuje bez myślników zamiast się niepowodzenia. Jeśli skonfigurowano również wartość ``, renderer przechodzi na ten wbudowany ustawienie domyślne.

To zachowanie niewidocznie awarii jest celowym wyborem projektowym dla środowisk produkcyjnych. Upłynięcie czasu sieciowego podczas pobierania zdalnego pliku wzorców, nieprawidłowa ścieżka pliku, awaria rozwiązywania DNS czy błędnie sformułowana zawartość wzorca nie spowodują awarii linii renderowania. PDF nadal jest generowany - po prostu brakuje w nim łamanych słów.

Koszt to widoczność. Zły plik wzorcowy lub nieosiągalny URL przy pierwszym ładowaniu będzie cicho wpływał na każde kolejne renderowanie z użyciem tych samych wartości źródłowych (ponieważ pamięć podręczna przechowuje również stan błędu). Zaleceniem jest weryfikacja plików wzorcowych i potwierdzenie dostępu sieciowego do zdalnych URL-i podczas uruchamiania aplikacji lub kontroli wdrożenia CI/CD — nie podczas renderowania.


Jak można załadować pliki wzorcowe z zdalnego URL?

Wskazanie `` na zdalny adres URL to najszybszy sposób na zastosowanie niestandardowego dzielenia wyrazów bez dołączania plików do projektu. Następujący przykład ładuje U.S. Angielskie wzorce z repozytorium tex-hyphen i renderuje wyjustowany blok tekstu:

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

Wynik

Renderowany PDF pokazuje wyjustowany akapit z czystymi końcami wyrazów na granicach sylab. Bez dzielenia wyrazów ten sam tekst generowałby duże przerwy między wyrazami lub zalewałby kolumnę.

Deklaracje CSS oraz są niezbędne do zapewnienia zgodności z Chromium. Reguła `` sprawia, że dzielenie wyrazów jest najbardziej widoczne. Jeśli żadna deklaracja CSS nie jest obecna w docelowych elementach HTML, niestandardowe wzory są ładowane, ale nigdy nie stosowane.

Zwróć uwagęURL musi wskazywać na surową treść tekstową. Standardowy adres URL serwisu GitHub, taki jak https://github.com/hyphenation/tex-hyphen/blob/master/..., zwraca opakowanie strony HTML, które nie przejdzie walidacji wzorca. Użyj formularza https://raw.githubusercontent.com/... lub kliknij przycisk "Raw" na GitHubie, aby uzyskać prawidłowy adres URL.

Jakie są ograniczenia źródeł zdalnych?

Tabela 2: Ograniczenia URL-ów zdalnych
OgraniczenieWartość
ProtokołyHTTP i HTTPS (zalecane HTTPS)
Dozwolone typy treścitext/plain, application/octet-stream
Maksymalny rozmiar odpowiedzi5 MB
Przekroczono limit czasu żądania10 sekund
BezpieczeństwoŻądania do prywatnych/lokalnych adresów IP (10.x.x.x, 192.168.x.x, localhost) są blokowane, aby zapobiec atakom SSRF
Odrzucona treśćPliki binarne, pliki z zerowymi bajtami, pliki zawierające tagi
Ahmad Sohail
Programista Full Stack

Ahmad to full-stack developer z solidnym fundamentem w C#, Pythonie i technologiach webowych. Ma głębokie zainteresowanie tworzeniem skalowalnych rozwiązań oprogramowania i cieszy się badaniem, jak projektowanie i funkcjonalność spotykają się w rzeczywistych aplikacjach.

Przed dołączeniem do zespołu Iron Software, Ahmad pracował nad projektami ...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,926,724 | Wersja: 2026.5 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwon do mnie