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 du PDF. La propriété CustomHyphenation dans ChromePdfRenderOptions contrôle les règles de césure utilisées.

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#, notamment le chargement de modèles en local et à distance, le comportement de repli, 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éer une instance ``
  3. Définissez sur un nouveau avec un chemin ou une URL ``
  4. Inclure des tirets dans le CSS du contenu HTML
  5. Appelez `` et économisez le résultat

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

La classe définit d'où IronPDF charge les règles de césure pendant le processus de rendu. Le moteur Chromium lit ces modèles et les applique lorsque la règle CSS 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 dispose de deux fichiers dans le référentiel : hyph-{lang}.pat.txt pour les règles de modèle et hyph-{lang}.hyp.txt pour la liste des exceptions. Lors de la référence à des fichiers hébergés sur GitHub, l'URL du contenu brut (commençant par https://raw.githubusercontent.com/) est requise — une URL de page GitHub standard renvoie du code HTML, et non le texte du modèle.

Que fait la césure personnalisée en outrepassant le paramètre de langue intégré ?

L'énumération et son sur fournissent des préréglages intégrés pour l'anglais (États-Unis), l'anglais (Royaume-Uni) et le russe. La propriété a priorité sur cette énumération lorsque les deux sont définies, selon une chaîne de priorité claire :

  1. CustomHyphenation — si défini avec un `` valide, des modèles 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 `` est également configurée, le moteur de rendu utilise par défaut 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 `` vers une URL distante est le moyen le plus rapide d'appliquer une césure personnalisée sans intégrer de 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 et sont nécessaires pour la compatibilité avec Chromium. La règle `` rend la césure 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 telle que https://github.com/hyphenation/tex-hyphen/blob/master/... renvoie un wrapper de page HTML, ce qui entraînera un échec de la validation du modèle. Utilisez le formulaire 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
Ahmad Sohail
Développeur Full Stack

Ahmad est un développeur full-stack avec une solide fondation en C#, Python et technologies web. Il a un profond intérêt pour la construction de solutions logicielles évolutives et aime explorer comment le design et la fonctionnalité se rencontrent dans des applications du monde réel.

<...
Lire la suite
Prêt à commencer?
Nuget Téléchargements 18,926,724 | Version : 2026.5 just released
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