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. Wlasciwosc CSS hyphens: auto pozwala rendererowi lamac slowa na prawidlowe granice sylabowe, a IronPDF stosuje to zachowanie podczas generowania PDF. Wlasciwosc CustomHyphenation w ChromePdfRenderOptions kontroluje, ktore wzorce dzielenia na sylaby sa uzywane.

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.

Ten przewodnik wyjasnia, jak uzywac API CustomHyphenationDefinitions w C#, wlaczajac w to lokalne i zdalne ladowanie wzorcow, dzialanie awaryjne, ograniczenia, obsluge bledow i cache'owanie.


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. Stworz instancje ChromePdfRenderer
  3. Ustaw RenderingOptions.CustomHyphenation na nowy CustomHyphenationDefinitions z sciezka PatternSource lub URL
  4. Zawrz hyphens: auto w CSS zawartosci HTML
  5. Wywolaj RenderHtmlAsPdf i zapisz wynik

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

Klasa CustomHyphenationDefinitions definiuje, skad IronPDF laduje zasady dzielenia wyrazow podczas procesu renderingu. Silnik Chromium czyta te wzorce i stosuje je, gdy zasada CSS hyphens: auto jest obecna na 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)
ExceptionSourcestringNieŚ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. Kazdy jezyk ma dwa pliki w repozytorium: hyph-{lang}.pat.txt dla zasad wzorcow i hyph-{lang}.hyp.txt dla listy wyjatkow. Podczas odnoszenia sie do plikow hostowanych na GitHub, wymagany jest URL surowej zawartosci (zaczynajacy sie od https://raw.githubusercontent.com/) — standardowy URL strony GitHub zwraca HTML, a nie tekst wzorca.

Jak Własne Myślniki Zastępują Wbudowane Ustawienia Języka?

Enum HyphenationLanguage na ChromePdfRenderOptions dostarcza wbudowanych ustawien dla angielskiego (amerykanskiego), angielskiego (brytyjskiego) i rosyjskiego. Właściwość CustomHyphenation ma priorytet nad tym enumem, gdy oba są ustawione, zgodnie z jasnym łańcuchem priorytetów:

  1. CustomHyphenation — jeśli ustawiony z prawidłowym PatternSource, używane są własne 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 wartość HyphenationLanguage jest również skonfigurowana, renderer powraca do tej wbudowanej konfiguracji.

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 PatternSource na zdalny URL jest najszybszym sposobem na zastosowanie niestandardowego dzielenia wyrazów bez umieszczania plików w projekcie. 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ę.

Potrzebne sa obie deklaracje CSS hyphens: auto i -webkit-hyphens: auto dla kompatybilnosci z Chromium. Zasada text-align: justify czyni podzial slow najbardziej widocznym. 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 URL GitHub jak https://github.com/hyphenation/tex-hyphen/blob/master/... zwraca opakowanie strony HTML, co spowoduje niepowodzenie walidacji wzorow. Uzyj formy https://raw.githubusercontent.com/... albo kliknij przycisk "Raw" na GitHub, aby uzyskac poprawny 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
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
Email
Zadzwon do mnie