Comment ajouter une césure personnalisée à la génération de PDF en C

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

La césure personnalisée dans la génération de PDF en C# aide à corriger l'espacement maladroit, le débordement de mots et le mauvais retour de texte dans des colonnes étroites, des factures, des contrats et des rapports multilingues. Lorsque le moteur de rendu PDF n'applique pas les motifs de césure corrects, le texte justifié peut laisser de grands espaces ou être mal coupé en travers des lignes.

Dans IronPDF, la césure est gérée pendant le rendu HTML vers PDF via le moteur Chromium, et non via un modèle d'objet document de type Word. La propriété CSS hyphens: auto permet au moteur de rendu de couper les mots aux limites de syllabes valides, et IronPDF applique ce comportement lors de la génération de PDF. La propriété CustomHyphenation dans ChromePdfRenderOptions contrôle les motifs de césure utilisés.

Les fichiers de motifs utilisent le format TeX et peuvent être chargés soit depuis un chemin de fichier local, soit depuis une URL distante. Cela permet de définir des règles de césure personnalisées pour différentes langues et dispositions de documents avec plus de contrôle sur les césures de mots dans le PDF final.

Ce guide explique comment utiliser l'API CustomHyphenationDefinitions en C#, y compris le chargement de motifs locaux et distants, le comportement de secours, les limitations, la gestion des erreurs et la mise en cache.


NuGet Installer avec NuGet

PM >  Install-Package IronPdf

Consultez IronPDF sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL ou l'installateur Windows.

Démarrage rapide

  1. Installez IronPDF avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronPdf
  2. Copiez et exécutez cet extrait de code.

    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. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer

Flux de travail minimal

  1. Installez le package NuGet IronPDF
  2. Créez une instance de ChromePdfRenderer
  3. Définir RenderingOptions.CustomHyphenation à un nouveau CustomHyphenationDefinitions avec un chemin PatternSource ou URL
  4. Inclure hyphens: auto dans le CSS du contenu HTML
  5. Appelez RenderHtmlAsPdf et enregistrez le résultat

Comment fonctionne la césure personnalisée dans le rendu PDF ?

La classe CustomHyphenationDefinitions définit d'où IronPDF charge les règles de césure pendant le processus de rendu. Le moteur Chromium lit ces motifs et les applique lorsque la règle CSS hyphens: auto est présente sur un élément HTML.

Qu'est-ce que la classe CustomHyphenationDefinitions ?

La classe expose deux propriétés :

Tableau 1 : Propriétés de CustomHyphenationDefinitions
PropriétéType de texteRequisDescription du projet
PatternSourcechaîneOuiChemin ou URL vers le fichier de motifs de césure (par exemple, hyph-en-us.pat.txt)
ExceptionSourcechaîneNonChemin ou URL vers le fichier d'exceptions de césure (par exemple, hyph-en-us.hyp.txt)

Les fichiers de motifs suivent le format de césure TeX maintenu par le projet tex-hyphen sur GitHub. Chaque langue a deux fichiers dans le dépôt : hyph-{lang}.pat.txt pour les règles de motifs et hyph-{lang}.hyp.txt pour la liste d'exceptions. Lors de la référence de fichiers hébergés sur GitHub, l'URL de contenu brut (commençant par https://raw.githubusercontent.com/) est requise — une URL de page standard de GitHub renvoie du HTML, pas le texte du motif.

Comment la césure personnalisée remplace-t-elle le paramètre de langue intégré ?

L'énumération HyphenationLanguage sur ChromePdfRenderOptions fournit des préréglages intégrés pour l'anglais (US), l'anglais (britannique) et le russe. La propriété CustomHyphenation prend le pas sur cette énumération lorsque les deux sont définis, en suivant une chaîne de priorité claire :

  1. CustomHyphenation — si définie avec un PatternSource valide, des motifs personnalisés sont utilisés
  2. HyphenationLanguage — si aucun motif personnalisé n'est configuré, le préréglage de langue intégré s'applique
  3. Aucun — si aucun n'est défini, aucune césure n'est appliquée

Que se passe-t-il lorsque le chargement de motifs personnalisés échoue ?

Les erreurs lors du chargement des motifs sont enregistrées mais ne déclenchent pas d'exceptions. L'opération de rendu continue sans césure plutôt que d'échouer. Si une valeur de HyphenationLanguage est aussi configurée, le moteur de rendu revient à ce préréglage intégré.

Ce comportement d'échec silencieux est un choix de conception délibéré pour les environnements de production. Un délai réseau lors de l'obtention d'un fichier de motif distant, un chemin de fichier invalide, un échec de résolution DNS, ou un contenu de motif mal formé ne fera pas planter le pipeline de rendu. Le PDF est toujours généré — il manque simplement les césures.

Le compromis est la visibilité. Un mauvais fichier de motif ou une URL inatteignable lors du premier chargement affectera silencieusement chaque rendu ultérieur utilisant les mêmes valeurs de source (car la mise en cache enregistre aussi l'état d'échec). La recommandation est de valider les fichiers de motifs et de confirmer l'accès réseau aux URL distantes lors du démarrage de l'application ou des vérifications de déploiement CI/CD — pas au moment du rendu.


Comment les fichiers de motifs peuvent-ils être chargés à partir d'une URL distante ?

Pointer PatternSource vers une URL distante est le moyen le plus rapide pour appliquer une césure personnalisée sans intégrer les fichiers dans le projet. L'exemple suivant charge les motifs. Les motifs d'anglais des États-Unis du dépôt tex-hyphen et rend un bloc de texte justifié :

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

Sortie

Le PDF rendu montre le paragraphe justifié avec des césures nettes aux limites de syllabes. Sans césure, ce même texte produirait de grands espaces entre les mots ou déborderait de la colonne.

Les déclarations CSS hyphens: auto et -webkit-hyphens: auto sont nécessaires pour la compatibilité avec Chromium. La règle text-align: justify rend la césure la plus visible. Si aucune déclaration CSS n'est présente sur les éléments HTML cibles, les motifs personnalisés sont chargés mais jamais appliqués.

Veuillez noterL'URL doit pointer vers du contenu texte brut. Une URL GitHub standard comme https://github.com/hyphenation/tex-hyphen/blob/master/... renvoie une page de présentation HTML, ce qui échouera à la validation des motifs. Utilisez la forme https://raw.githubusercontent.com/... ou cliquez sur le bouton "Raw" sur GitHub pour obtenir l'URL correcte.

Quelles sont les contraintes source distantes ?

Tableau 2 : Contraintes d'URL à distance
ContrainteValeur
ProtocolesHTTP et HTTPS (HTTPS recommandé)
Type de textes de contenu autoriséstext/plain, application/octet-stream
Taille de réponse maximale5 Mo
Délai d'attente dépassé10 secondes
SécuritéLes requêtes vers des IP privées/locales (10.x.x.x, 192.168.x.x, localhost) sont bloquées pour éviter les attaques SSRF
Contenu rejetéFichiers binaires, fichiers avec octets nuls, fichiers contenant des balises
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronPdf
exécuter un échantillon Regardez votre code HTML se transformer en PDF.

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi