Sobrescribir reglas @page de CSS con RenderingOptions
Cuando un documento HTML contiene una regla CSS @page, sus valores (tamaño de página, orientación y márgenes) tienen prioridad sobre las propiedades correspondientes establecidas en RenderingOptions. Establecer MarginTop, PaperOrientation, PaperSize u otras propiedades similares en el renderizador no tiene efecto cuando el HTML define valores @page conflictivos.
IronPDF renderiza a través del motor de Chrome, que sigue las reglas estándar de cascada CSS. La regla @page es una declaración CSS a nivel de documento que el navegador evalúa durante el renderizado, anulando cualquier sugerencia de renderizado programático.
Solución
Opción 1: Eliminar la regla @page del HTML
Comente o elimine el bloque @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>
Con la ausencia de la regla, las propiedades RenderingOptions tienen pleno efecto.
Opción 2: Neutralizar programáticamente la regla @page
Si no puedes modificar la plantilla HTML, neutraliza la regla en el código antes de renderizar:
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")

