C# İle HTML Elemanlarını ve Sayfa Bölümlerini PDF'ye Dönüştürme
IronPDF, belirli HTML öğelerini hedeflemek için yerleşik bir SelectElement veya SelectCss yöntemi sunmaz. Tam bir sayfa, tam bir URL, tam bir HTML metni — ChromePdfRenderer tam HTML belgeleri oluşturur. Bir sayfanın belirli bir bölümünden PDF üretmek için, hedef elemanı işlemeden önce dört yaklaşımdan biriyle izole ediyoruz: JavaScript DOM manipülasyonu, CSS enjeksiyonu, sunucu tarafında HTML parçasını ayıklama veya JS hedeflemeyle URL işleme.
Her yaklaşım farklı bir kısıtlama için uygundur. JavaScript DOM izolasyonu, yalnızca hedef dışında her şeyin çıkarılması gerektiğinde URL'leri veya tam sayfaları işlerken işe yarar. CSS enjeksiyonu, DOM'u değiştirmeden istenmeyen içeriği gizler. Sunucu tarafı ayıklama, ham HTML'ye eriştiğimizde en temiz sonucu sağlar. JS hedeflemeyle URL işleme, kaynak HTML'nin mevcut olmadığı canlı paneller ve üçüncü taraf sayfaları işler.
30 günlük ücretsiz deneme başlatın dört yaklaşımı da test etmek için.
Hızlı Başlangıç: Belirli Bir HTML Elemanını PDF Olarak Çıkar
JavaScript DOM izolasyonu ve WaitFor kullanarak herhangi bir öğeyi CSS seçici ile hedefleyin, ardından yalnızca bu parçayı PDF'ye dönüştürün.
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronPdf yükleyin
PM > Install-Package IronPdf -
Bu kod parçasını kopyalayıp çalıştırın.
using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.JavaScript = @" var target = document.querySelector('#invoice-summary'); document.body.innerHTML = target.outerHTML; "; renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000); var pdf = renderer.RenderHtmlAsPdf(fullPageHtml); pdf.SaveAs("invoice-summary.pdf"); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronPDF kullanmaya başlayın ücretsiz deneme ile
Minimal İş Akışı (3 Adım)
- IronPDF'yi NuGet üzerinden kurun:
Install-Package IronPdf - Hedef öğeyi izole etmek için
ChromePdfRenderOptions.JavaScriptyapılandırın ve varlığını sağlamak içinWaitForkullanın. RenderHtmlAsPdf()veyaRenderUrlAsPdf()çağırın — PDF yalnızca izole içeriği içerir.
JavaScript DOM Manipülasyonu ile Elemanlar Nasıl İzole Edilir?
ChromePdfRenderOptions.JavaScript özelliği, HTML yüklendikten sonra ancak PDF oluşturulmadan önce çalışan bir JavaScript metni kabul eder. Render edilen sayfadan başka her şeyi çıkarmak için hedef öğenin document.body.innerHTML'ını outerHTML ile değiştirmiş oluruz. Bu en esnek yaklaşımdır — hem RenderHtmlAsPdf() hem de RenderUrlAsPdf() ile çalışır.
WaitFor.HtmlQuerySelector() yöntemi, JavaScript çalışmadan önce DOM'da hedef öğenin var olduğunu garantiler. Bu, asenkron içeriğe sahip sayfalar için kritiktir — React bileşenleri, Angular şablonları veya ilk sayfa yüklemesinden sonra dolan API kaynaklı veriler.
using IronPdf;
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<nav>Navigation links...</nav>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<table>
<tr><td>Widget A</td><td>$49.99</td></tr>
<tr><td>Widget B</td><td>$29.99</td></tr>
<tr><td><strong>Total</strong></td><td><strong>$79.98</strong></td></tr>
</table>
</div>
<footer>Footer content...</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
document.body.innerHTML = el.outerHTML;
}
";
// Wait for the target element to exist before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
PdfDocument pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary-only.pdf");
using IronPdf;
string fullPageHtml = @"
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<nav>Navigation links...</nav>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<table>
<tr><td>Widget A</td><td>$49.99</td></tr>
<tr><td>Widget B</td><td>$29.99</td></tr>
<tr><td><strong>Total</strong></td><td><strong>$79.98</strong></td></tr>
</table>
</div>
<footer>Footer content...</footer>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
// Replace the body with only the target element
renderer.RenderingOptions.JavaScript = @"
var el = document.querySelector('#invoice-summary');
if (el) {
document.body.innerHTML = el.outerHTML;
}
";
// Wait for the target element to exist before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000);
PdfDocument pdf = renderer.RenderHtmlAsPdf(fullPageHtml);
pdf.SaveAs("invoice-summary-only.pdf");
Imports IronPdf
Dim fullPageHtml As String = "
<html>
<body>
<header><h1>Acme Corp Invoice</h1></header>
<nav>Navigation links...</nav>
<div id='invoice-summary'>
<h2>Invoice #12345</h2>
<table>
<tr><td>Widget A</td><td>$49.99</td></tr>
<tr><td>Widget B</td><td>$29.99</td></tr>
<tr><td><strong>Total</strong></td><td><strong>$79.98</strong></td></tr>
</table>
</div>
<footer>Footer content...</footer>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
' Replace the body with only the target element
renderer.RenderingOptions.JavaScript = "
var el = document.querySelector('#invoice-summary');
if (el) {
document.body.innerHTML = el.outerHTML;
}
"
' Wait for the target element to exist before JS executes
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("#invoice-summary", 10000)
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(fullPageHtml)
pdf.SaveAs("invoice-summary-only.pdf")
JavaScript, tüm gövdeyi #invoice-summary div'in outerHTML'u ile değiştirir. Ortaya çıkan PDF yalnızca fatura tablosunu içerir — başlık, gezinme yok, altbilgi yok. Kimlik ile hedefleme yaptığımızda, WaitFor.HtmlElementById() yöntemi daha basit bir alternatif sunar:
// Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000);
// Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000);
' Alternative: wait by ID directly
renderer.RenderingOptions.WaitFor.HtmlElementById("invoice-summary", 10000)
Karmaşık seçiciler (sınıf adları, veri öznitelikleri, iç içe geçmiş öğeler) için, HtmlQuerySelector(), document.querySelector()'un kabul edeceği herhangi bir geçerli CSS seçici dizesini kabul eder. Ek WaitFor kolaylık yöntemleri arasında HtmlElementByClassName(), HtmlElementByName() ve HtmlElementByTagName() bulunur — her biri dahili olarak HtmlQuerySelector() yönlendirir, ancak kodda daha net amaç sağlar.
Hedef öğe, üst konteynerlerden gelen miras alınmış stillere bağlı olduğunda, outerHTML değiştirme, üst seçicilere bağlı CSS kurallarını kaybedebilir (örneğin, .dashboard .widget table { ... } ). Bunları korumak için ilgili

