Başlık ve İçerik Uygunsuzluğu
HTML'yi PDF'ye işlerken, başlık ve altbilgi sayfa kenarına sıfır otururken, gövde içeriği içeri itilmiş olabilir, en çok sol ve sağ kenarlarda fark edilir. Bu, MarginLeft = 0 ayarlanmış ve UseMarginsOnHeaderAndFooter etkinleştirilmiş olsa bile meydana gelir.
Sebep Chrome'un varsayılan stilidir. Render motoru, her sayfanın <body> öğesine 8 piksel kenar boşluğu uygular. Bu varsayılan ayar normal web içeriği için uygundur, ancak ilettiğiniz MarginLeft = 0 ne olursa olsun, içeriğiniz ile PDF'nin kenarı arasında görünür bir 8px boşluk bırakır. Üst bilgi ve alt bilgi etkilenmez: kenar boşlukları 0 olarak ayarlandığında, beklendiği gibi doğrudan sayfa kenarına hizalanır, bu nedenle yalnızca ana metin hizadan çıkar.
Bu snippet uyumsuzluğu yeniden üretir:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>This is header</h1>"
};
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left;
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>This is header</h1>"
};
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left;
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<h1>This is header</h1>"
}
renderer.RenderingOptions.MarginLeft = 0
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")

Çözüm
İçeriğin, tam sayfa genişliğinde üst bilgi ve alt bilgi ile hizalanabilmesi için Chrome'un varsayılan <body> kenar boşluğunu geçersiz kılın. Yerleşik 8px ofseti iptal etmek için negatif kenar boşlukları uygulayın:
body {
margin-left: -8px;
margin-right: -8px;
}
Negatif değerler, Chrome'un varsayılan dolgusunu nötralize eder, böylece başlık, gövde ve altbilgi aynı kenara hizalanır. Uygulanan satır içi, düzeltilmiş işleme böyle görünür:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>This is header</h1>"
};
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left;
var pdf = renderer.RenderHtmlAsPdf("<h1 style=\"margin-left: -8;\">Hello World</h1>"); //adjust margin left to -8 px to cancel out default Chrome margin
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<h1>This is header</h1>"
};
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left;
var pdf = renderer.RenderHtmlAsPdf("<h1 style=\"margin-left: -8;\">Hello World</h1>"); //adjust margin left to -8 px to cancel out default Chrome margin
Imports System
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<h1>This is header</h1>"
}
renderer.RenderingOptions.MarginLeft = 0
renderer.RenderingOptions.UseMarginsOnHeaderAndFooter = UseMargins.Left
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style=""margin-left: -8;"">Hello World</h1>") 'adjust margin left to -8 px to cancel out default Chrome margin

Hata Ayıklama İpuçları
- Temiz bir sayfa tercih edin: negatif kenar boşlukları yerine bir CSS sıfırlama uygulayın veya varsayılan sapmayı kaynağında kaldırmak için
<body>öğesinemargin: 0açıkça ayarlayın. - Davranışın kapsamı: 8px boşluk, HTML bir headless Chrome aracılığıyla işlendiğinde, IronPDF, Puppeteer ve Chrome DevTools Protokolü de dahil, ortaya çıkar, bu yüzden aynı düzeltme bu araçlarda geçerlidir.

