Réduire la taille du fichier avec des en-têtes et pieds de page d'images Base64
Ajouter une image Base64 à un en-tête ou pied de page sur un PDF multi-pages volumineux peut gonfler le fichier de sortie de manière spectaculaire. La solution consiste à intégrer l'image une seule fois plutôt qu'à chaque page, tout en permettant au texte par page tel que {page} de s'afficher normalement.
Le gonflement se produit à cause de la manière dont le moteur de rendu gère un fragment combiné. Lorsqu'un seul fragment contient à la fois l'image et du contenu dynamique tel que {page}, le moteur traite tout le HTML comme dynamique et réintègre l'image Base64 à chaque page. Diviser le travail en deux passes maintient l'image statique et la couche de numérotation des pages petite.
Solution
1. Divisez l'en-tête ou le pied de page en deux fragments
Séparez le contenu en un fragment statique et un dynamique. Placez l'image et tout texte qui ne change jamais dans le fragment statique. Placez le contenu par page tel que {page} dans le fragment dynamique. Donnez aux deux fragments la même disposition de table et les mêmes largeurs de cellules pour que le texte dynamique se positionne correctement sur la couche statique.
2. Ajoutez d'abord le fragment statique
Appelez AddHtmlHeadersAndFooters uniquement avec le fragment statique. L'image Base64 est rendue et intégrée une seule fois.
3. Ajoutez le fragment dynamique lors d'une seconde passe
Appelez AddHtmlHeadersAndFooters à nouveau uniquement avec le fragment dynamique. Comme cette passe ne transporte pas d'image, le contenu par page reste petit.
using IronPdf;
var pdf = PdfDocument.FromFile("input.pdf");
// Static layer: holds the Base64 image. The page-number cell is left empty.
string staticFooter = @"
<table style='width:100%; table-layout:fixed;'>
<tr>
<td style='width:20%;'>
<img src='data:image/png;base64,iVBORw0KGg...' style='width:150px;' />
</td>
<td style='width:80%; text-align:right;'></td>
</tr>
</table>";
// Dynamic layer: holds only {page}. Same layout, but no image.
string dynamicFooter = $@"
<table style='width:100%; table-layout:fixed;'>
<tr>
<td style='width:20%;'></td>
<td style='width:80%; text-align:right; font-size:10px;'>Page {{page}} of {pdf.PageCount}</td>
</tr>
</table>";
// Pass 1: add the static image footer (image embedded once).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
HtmlFooter = new HtmlHeaderFooter { HtmlFragment = staticFooter, MaxHeight = 40 }
});
// Pass 2: add the dynamic page-number footer (no image, stays small).
pdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
{
HtmlFooter = new HtmlHeaderFooter { HtmlFragment = dynamicFooter, MaxHeight = 40 }
});
pdf.SaveAs("output.pdf");
Les deux fragments table-layout:fixed partagent des largeurs de cellules identiques, donc le numéro de page dans la seconde passe se place exactement là où la cellule vide était dans la première. La même technique s'applique aux en-têtes : gardez l'image dans la passe statique, et placez tout texte d'en-tête dynamique dans la seconde passe.
Option : Référencer une image externe ou un SVG
Si vous n'avez pas besoin de l'image intégrée comme Base64, pointer le <img> vers un fichier externe ou utiliser un SVG peut réduire encore plus la taille de sortie qu'une chaîne Base64.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.