Outrepasser les règles CSS @page avec RenderingOptions
Lorsqu'un document HTML contient une règle CSS @page, ses valeurs (taille de page, orientation et marges) priment sur les propriétés correspondantes définies sur RenderingOptions. Définir des propriétés comme MarginTop, PaperOrientation, PaperSize, ou similaires sur le moteur de rendu n'a aucun effet lorsque le HTML définit des valeurs @page conflictuelles.
IronPDF génère via le moteur Chrome, qui suit les règles de cascade CSS standard. La règle @page est une déclaration CSS au niveau du document que le navigateur évalue lors du rendu, remplaçant ainsi tout indice de rendu programmatique.
Solution
Option 1 : Supprimez la règle @page de l'HTML
Commentez ou supprimez le bloc @page :
<style>
/*
@page {
size: A3;
margin-top: 2in;
margin-bottom: 2in;
margin-left: 2in;
margin-right: 2in;
}
*/
</style>
<style>
/*
@page {
size: A3;
margin-top: 2in;
margin-bottom: 2in;
margin-left: 2in;
margin-right: 2in;
}
*/
</style>
En l'absence de la règle, les propriétés RenderingOptions prennent pleinement effet.
Option 2 : Neutraliser programmatiquement la règle @page
Si vous ne pouvez pas modifier le modèle HTML, neutralisez la règle dans le code avant le rendu :
string sanitizedHtml = html.Replace("@page", "/* @page */");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
PdfDocument pdf = renderer.RenderHtmlAsPdf(sanitizedHtml);
pdf.SaveAs("output.pdf");
string sanitizedHtml = html.Replace("@page", "/* @page */");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
PdfDocument pdf = renderer.RenderHtmlAsPdf(sanitizedHtml);
pdf.SaveAs("output.pdf");
Imports IronPdf
Dim sanitizedHtml As String = html.Replace("@page", "/* @page */")
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 10
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(sanitizedHtml)
pdf.SaveAs("output.pdf")

