Altbilgi içeriğine atla
IRONPDF KULLANARAK

Yönetici Panoları için Tek Tıklama ile PDF Dışa Aktarımı C#

Ölçekte HTML İçeriğini Korumadaki Sorun

IronPDF anasayfası Bir kuruluş eski bir CMS, intranet veya halka açık portalı devre dışı bıraktığında, üzerindeki içerik basitçe önemsiz hale gelmez. Bir hastanenin bir hasta sağlığı makale veritabanını emekli etmesi, bu makalelerin korunmasını gerektirir: hükümet ajansının web sitesini yeniden tasarlaması, belirli bir zamanda var olan kamu bildirimlerini korumasını gerektirir, bir hukuk firmasının bir dava araştırma platformunu kapatması, her sayfanın yasal bir koruma sürecinde yer alması için bir formata dönüştürülmesini gerektirir.

Ölçek, her manuel yaklaşımın başarısız olduğu yerdir. Tarayıcı tabanlı PDF'ye yazdır bir belge için çalışır. 10.000 belge için çözüm değildir. Başsız bir tarayıcıyı betiklemek, bozuk HTML, kayıp varlıklar veya kimlik doğrulama duvarına çarptığınızda çalışır ve eski içerik nadiren temizdir.

Mevcut toplu dönüşüm araçları, eski işaretlemelerle benzer bir sorun yaşarlar: 2005'ten kalma satır içi stil kuralları, standart olmayan tablo düzenleri, artık çözülemeyen yol referansları. Ya sessizce başarısız olurlar, bozuk düzenlerle PDF'ler üretirler ya da her sayfa için manuel düzeltme gerektirirler. Bu arada, BT ekipleri, aylar önce bitmiş olması gereken bir geçişi desteklemek için eski altyapıyı çevrimiçi tutmayı haklı çıkaramaz.

Çıktının da tutarlı olması gerekir. Sağlık makaleleri arşivleyen bir hastane, düzenleyici uyumluluk için açığa alma sayfalarını koruyan bir finans kurumu, bir tutma arşivi oluşturan bir hukuk firması, hepsi sonuçta elde edilen PDF'lerin aynı sistemden gelmiş gibi görünmesini istiyorlar, tek seferlik bir tarayıcı dışa aktarması koleksiyonu değil. Bu rehber için, bu kütüphanenin proje iş akışlarınızı geliştirmeye nasıl yardımcı olduğunu açıklayan bir IronPDF örneğini inceleyeceğiz.

Çözüm: IronPDF ile Toplu HTML'den PDF'ye Otomatik Dönüşüm

Iron Software'in kendi IronPDF'i, .NET uygulamalarının HTML dosyalarını, HTML dizilerini veya canlı URL'leri tek bir otomatik çalışmada standart PDF'lere toplu olarak dönüştürmesine olanak tanır. Bir geçiş betiği bir kaynaktan okur: diskteki HTML dosyalarından bir dizin, HTML parçaları içeren bir veritabanı veya eski sunucu çevrimdışı kalmadan önce yakalanacak URL'lerin bir listesi, her sayfayı ChromePdfRenderer'a besler ve çıktıyı bir arşiv hedefine yazar.

A Chromium tabanlı işleme motoru, tutarsız işaretlemeleri, satır içi stil kurallarını ve gömülü varlıkları bir tarayıcı gibi işler, orijinal HTML'nin nasıl yazıldığına bakılmaksızın görsel olarak aslına uygun bir anlık görüntü üretir. Bakımı yapılacak tarayıcı otomasyon hackleri ve 50.000 sayfalık bir arşivi yasaklayıcı bir şekilde pahalı hale getirecek belge başına API maliyetleri yoktur. Dönüşüm, bir .NET konsol uygulamasının veya arka plan hizmetinin içinde çalışır, bir NuGet paketi, dış süreçler yok.

Pratikte Nasıl Çalışır: C# PDF Belgesi Oluşturma

1. Geçiş Betiği Kaynak İçeriği Sayar

Betiği, bir seferlik bir çalıştırma veya artan içerik setleri için tekrar edilebilir bir iş olan geçiş için genellikle bir konsol uygulamasıdır. Diskteki .html dosyalarından bir dizini, HTML parçalarını ve meta verilerini (orijinal URL, oluşturma tarihi, içerik ID'si) içeren bir veritabanı tablosunu veya eski sunucunun çevrimdışı kalmadan önce yakalanacak canlı web sayfalarının düz bir listesini sayarak başlar.

Veritabanı kaynakları için sorgu, hem HTML içeriğini hem de arşiv manifestini dolduracak meta veriyi döndürür. URL listeleri için, işleme sırası önceliğe göre, yüksek trafikli sayfalar veya yasal olarak hassas içerik önce yakalanacak şekilde sıralanabilir.

2. Stil Sayfası Enjeksiyonu Çıkışı Normalleştirir

Eski HTML doğası gereği tutarsızdır. Aynı CMS'in farklı dönemlerinden gelen sayfaların farklı taban yazı tipi boyutları, kenar boşluğu kuralları ve düzen varsayımları olabilir. İşleme öncesinde, betik her HTML dizesine isteğe bağlı olarak standart bir <style> bloğu ekler, -- uniform kenar boşlukları, tutarlı bir ana yazı tipi ve sabit bir sayfa genişliği ayarlamak -- böylece her arşivlenmiş PDF belgesi, orijinal nasıl yazılmış olursa olsun tutarlı bir görsel temel paylaşır.

Bu normalleştirme adımı, bir belge koleksiyonu gibi görünen bir arşiv ile rastgele bir tarayıcı yakalama grubu gibi görünen bir arşiv arasındaki farktır.

3. ChromePdfRenderer Her Sayfayı PDF Dosyasına Dönüştürür

Diskteki HTML dosyaları veya bir veritabanından HTML dizeleri için, RenderHtmlAsPdf() her dönüşümü ele alır. Bir BaseUrlPath parametresi gömülü varlıkların korunarak göreceli resim ve stil referanslarını orijinal dosyanın dizinine karşı çözer:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 20;

renderer.RenderingOptions.MarginBottom = 20;

string sourceDir = @"C:\LegacyContent\html";

string archiveDir = @"C:\Archive\pdf";

Directory.CreateDirectory(archiveDir);

foreach (string htmlFile in Directory.EnumerateFiles(sourceDir, "*.html"))
{
    string html = File.ReadAllText(htmlFile);
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, sourceDir);
    string outputPath = Path.Combine(archiveDir,
        Path.GetFileNameWithoutExtension(htmlFile) + ".pdf");

    pdf.SaveAs(outputPath);
    Console.WriteLine($"Archived: {outputPath}");
}
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

renderer.RenderingOptions.MarginTop = 20;

renderer.RenderingOptions.MarginBottom = 20;

string sourceDir = @"C:\LegacyContent\html";

string archiveDir = @"C:\Archive\pdf";

Directory.CreateDirectory(archiveDir);

foreach (string htmlFile in Directory.EnumerateFiles(sourceDir, "*.html"))
{
    string html = File.ReadAllText(htmlFile);
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, sourceDir);
    string outputPath = Path.Combine(archiveDir,
        Path.GetFileNameWithoutExtension(htmlFile) + ".pdf");

    pdf.SaveAs(outputPath);
    Console.WriteLine($"Archived: {outputPath}");
}
Imports IronPdf
Imports System.IO

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4

renderer.RenderingOptions.MarginTop = 20

renderer.RenderingOptions.MarginBottom = 20

Dim sourceDir As String = "C:\LegacyContent\html"

Dim archiveDir As String = "C:\Archive\pdf"

Directory.CreateDirectory(archiveDir)

For Each htmlFile As String In Directory.EnumerateFiles(sourceDir, "*.html")
    Dim html As String = File.ReadAllText(htmlFile)
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, sourceDir)
    Dim outputPath As String = Path.Combine(archiveDir, Path.GetFileNameWithoutExtension(htmlFile) & ".pdf")

    pdf.SaveAs(outputPath)
    Console.WriteLine($"Archived: {outputPath}")
Next
$vbLabelText   $csharpLabel

HTML Dosyaları PDF Formatına Dönüştürüldü

Çıktı dosyaları

Örnek Çıktı: HTML Dosya vs. Çıktı PDF

IronPDF örnek çıkışı Çalışan sunucudan çekilmesi gereken canlı URL'ler için, deaktif edileceğinden önce her istek, RenderUrlAsPdf() tarafından ele alınır. Paralel toplu işlem, büyük URL setleri arasında çalışma zamanını yönetilebilir tutar:

using IronPdf;

var renderer = new ChromePdfRenderer();

int completed = 0, failed = 0;

await Parallel.ForEachAsync(urlList,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    async (url, _) =>
    {
        try
        {
            PdfDocument pdf = renderer.RenderUrlAsPdf(url);
            string filename = Uri.EscapeDataString(url).Replace("%", "_") + ".pdf";
            pdf.SaveAs(Path.Combine(@"C:\Archive\pdf", filename));
            Interlocked.Increment(ref completed);
        }
        catch (Exception ex)
        {
            Interlocked.Increment(ref failed);
            Console.Error.WriteLine($"Failed: {url} — {ex.Message}");
        }
        Console.WriteLine($"Progress: {completed} completed, {failed} failed");
    });
using IronPdf;

var renderer = new ChromePdfRenderer();

int completed = 0, failed = 0;

await Parallel.ForEachAsync(urlList,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    async (url, _) =>
    {
        try
        {
            PdfDocument pdf = renderer.RenderUrlAsPdf(url);
            string filename = Uri.EscapeDataString(url).Replace("%", "_") + ".pdf";
            pdf.SaveAs(Path.Combine(@"C:\Archive\pdf", filename));
            Interlocked.Increment(ref completed);
        }
        catch (Exception ex)
        {
            Interlocked.Increment(ref failed);
            Console.Error.WriteLine($"Failed: {url} — {ex.Message}");
        }
        Console.WriteLine($"Progress: {completed} completed, {failed} failed");
    });
Imports IronPdf
Imports System.IO
Imports System.Threading
Imports System.Threading.Tasks

Dim renderer As New ChromePdfRenderer()

Dim completed As Integer = 0
Dim failed As Integer = 0

Await Parallel.ForEachAsync(urlList,
    New ParallelOptions With {.MaxDegreeOfParallelism = 4},
    Async Function(url, _) As Task
        Try
            Dim pdf As PdfDocument = renderer.RenderUrlAsPdf(url)
            Dim filename As String = Uri.EscapeDataString(url).Replace("%", "_") & ".pdf"
            pdf.SaveAs(Path.Combine("C:\Archive\pdf", filename))
            Interlocked.Increment(completed)
        Catch ex As Exception
            Interlocked.Increment(failed)
            Console.Error.WriteLine($"Failed: {url} — {ex.Message}")
        End Try
        Console.WriteLine($"Progress: {completed} completed, {failed} failed")
    End Function)
$vbLabelText   $csharpLabel

URL'lerden Oluşturulan Dosyalar

URL'lerden oluşturulan dosyalar

Örnek Çıktı

URL'den PDF'ye örnek çıkışı Her çıkış PDF'si, uygulanan orijinal site hiyerarşisini yansıtan bir klasör yapısına kaydedilir, işlenen her belge için orijinal URL, dönüşüm zaman damgası ve çıkış yolu kaydını içeren bir manifest dosyası ile birlikte.

Gerçek Dünya Faydaları

Verim. IronPDF, her sayfayı milisaniyeler içinde işleme alır. Dört paralel iş parçacığına sahip 10.000 sayfalık bir arşiv, genellikle standart sunucu donanımında birkaç saat içinde tamamlanır, gece boyunca toplu pencere yok, dönüşüm çalıştırmaları arasında manuel devre dışı geçiş yok.

Görsel sadakat. Chromium tabanlı işleme, tablolar, CSS düzenleri, gömülü resimler ve satır içi tarzlar tarayıcıda olduğu gibi ele alınır. Arşivlenen PDF orijinal sayfanın nasıl göründüğünü yansıtır, sade bir tahminlemeden ziyade.

Zamanında devre dışı bırakma. Arşiv çalışması tamamlandıktan ve manifest doğrulandıktan sonra, eski sunucular, veritabanları ve CMS kurulumları kapatılabilir. İçerik, eski altyapının sağladığı şeye bağlı olmayan kalıcı, kendi kendine yeterli bir PDF koleksiyonu olarak var olur.

Düzenleyici uyumluluk. Değiştirilemez PDF anlık görüntüler, yasal koruma ve saklama gerekliliklerini karşılar. IronPDF, uzun süreli arşiv koruması için PDF/A çıkışını destekler, tek bir işleme seçeneği çıktıyı düzenlenmiş belge saklama için kabul edilen ISO standartlı bir formata dönüştürür.

İçerik kalitesinde tutarlılık. İşleme öncesi normalleştirilmiş bir stil sayfası enjeksiyonu, her arşivdeki PDF'nin tutarlı kenar boşlukları, yazı tipleri ve sayfa boyutları paylaşmasını sağlar; orijinal HTML'nin, standartlara uyan bir geliştirici tarafından mı, yoksa Word'den yapıştıran bir içerik yazarı tarafından mı yazıldığına bakılmaksızın.

Belge başına maliyet yoktur. Dönüştürme, uygulama içerisinde çalışır. Herhangi bir dış dönüşüm satıcısına API çağrıları ve büyük bir arşivi orantısız bir şekilde pahalı hale getiren bir fiyatlama modeli yoktur. 500 sayfa veya 50.000 sayfa dönüştürmede altyapı açısından maliyet aynı kalır.

Kapanış

Dekomisyon süresi olan bir içerik geçişi, manuel dönüşüm iş akışları veya karışık HTML'de başarısız olan araçlar için zaman bırakmaz. Dönüşümün otomatik çalıştırılması, hacimle tutarlı çıktılar üretmesi ve eski sunucular çevrimdışı kalmadan önce tamamlanması gerekir.

IronPDF'nin gücüyle bir .NET geçiş betiği, bu tüm yüzeyi örter, kaynak içeriği sayar, stilleri normalleştirir, her sayfayı Chromium aracılığıyla işler, bir arşiv hedefine yazar ve inceleme için hataları kaydeder. IronPDF, HTML dizeleri ve URL'leri işlerken belgeleri kaydetme, akıtma ve manipüle etme de dahil olmak üzere ironpdf.com adresinde C#'ta tam PDF üretim döngüsünü idare eder. Bir geçişi kapsamaya ya da bir pilot çalıştırmaya başlarsanız, ücretsiz 30 günlük deneme, miras kalan içeriğinizin temsilci bir örneğini dönüştürmek ve bir tam arşive geçmeden önce çıktıyı doğrulamak için yeterli süre verir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara