C# İçinde PDF Revizyon Geçmişini Nasıl Kaydeder ve Düzenleriz
MigraDoc'tan IronPDF'e geçiş, belirsiz bir programatik döküman modeli gerektiren manuel eleman-eleman yapısından mevcut web geliştirme becerilerinden yararlanan modern birHTML/CSStabanlı yaklaşıma dönüştürür. Bu kılavuz, MigraDoc'un özel belge nesne modelinin öğrenme eğrisini ortadan kaldıran kapsamlı, adım adım bir geçiş yolu sağlar.
MigraDoc'tan IronPDF'e Neden Geçilmeli
MigraDoc Zorlukları
MigraDoc, PDFsharp PdfDocument içine işler ve PDFsharp paketine bağlı olan bir yerleşim motorudur. empira / PDFsharp-Team tarafından MIT lisansı altında sürdürülen bu araç, programlı üretim için güçlüdür, ancak modern geliştirme iş akışlarını etkileyen temel sınırlamalara sahiptir:
-
**HTML Desteği Yok:**MigraDocdoğrudan HTML'yi desteklemez. Belgeleri element-öğe bazında
Document,Section,ParagraphveTablenesneleri kullanarak elle oluşturmalısınız—mevcutHTML/CSStasarımlarını kullanamazsınız. -
Tescilli Belge Modeli: MigraDoc,
AddSection(),AddParagraph(),AddTable(),AddRow()veAddCell()gibi kavramlara sahip benzersiz bir belge modelini öğrenmeyi gerektirir. Bu dik öğrenme eğrisi, özellikle web geliştirme altyapısına sahip geliştiriciler için zordur. -
Sınırlı Stil Seçenekleri: MigraDoc, güçlü belge yapısı yönetimi sunsa da, stil belirleme yetenekleri modern web araçlarına kıyasla mütevazıdır.
Format.Font.Size,Format.Font.BoldveFormat.Alignmentgibi özellikler tam CSS3'e göre sınırlıdır. -
Belirgin Kod: Basit düzenler oluşturmak bile düzinelerce satır kod gerektirir. Başlıklarla basit bir tablo, 15-20 satırMigraDockodu gerektirebilir.
-
JavaScript Desteği Yok: MigraDoc, dinamik içeriği render edemez veyaJavaScriptçalıştıramaz, modern grafik ve etkileşimli ögeler için seçenekleri kısıtlar.
-
Grafikler Temel: MigraDoc'un grafik işlevselliği Chart.js veya D3 gibi modernJavaScriptgrafik kütüphanelerine kıyasla sınırlıdır.
MigraDoc vs IronPDF Karşılaştırması
| Özellik | MigraDoc | IronPDF |
|---|---|---|
| İçerik Tanımı | Programlanabilir (Belge/Bölüm/Paragraf) | HTML/CSS |
| Öğrenme Eğrisi | Yoğun (özel DOM) | Kolay (web becerileri) |
| Stilleme | Sınırlı özellikler | Tam CSS3 |
| JavaScript | None | Tam Chromium uygulaması |
| Tablolar | Manuel sütun/satır tanımı | HTML <table> with CSS |
| Grafikler | TemelMigraDocgrafikler | Herhangi birJavaScriptgrafik kütüphanesi |
| Görseller | Manuel boyutlandırma/konumlandırma | Standard HTML <img> |
| Duyarlı Düzenler | Desteklenmiyor | Flexbox, Grid |
| Lisans | Açık Kaynak (MIT) | Ticari |
Modern .NET'i hedefleyen ekipler için,IronPDF geliştiricilerin özel bir belge modeli öğrenmek yerine tanıdıkHTML/CSSbecerilerini kullanmalarına izin verir.
Göç Karmaşıklığı Değerlendirmesi
Özelliklere Göre Tahmini Çaba
| Özellik | Göç Karmaşıklığı |
|---|---|
| Basit Metin | Çok Düşük |
| Tablolar | Düşük |
| Başlıklar/Altbilgiler | Düşük |
| Tarzlar | Orta |
| Görseller | Düşük |
| Grafikler | Orta |
Paradigma Değişimi
BuMigraDocgeçişindeki temel değişiklik, programatik belge oluşturmadan HTML-öncelikli rendera geçiştir:
MigraDoc: Belge → Bölüm Ekle() → Paragraf Ekle() → PdfBelgeRenderlayıcı → Kaydet()
IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()
Bu paradigma değişimi, CSS ile sınırsız stil yetenekleri sağlarken, kod karmaşıklığını büyük ölçüde azaltır.
Başlamadan Önce
Ön Koşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# RemoveMigraDocpackages (package IDs are case-sensitive on nuget.org)
dotnet remove package PDFsharp-MigraDoc
dotnet remove package PDFsharp-MigraDoc-GDI
dotnet remove package PDFsharp-MigraDoc-WPF
# Install IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"MigraDoc Kullanımını Belirleyin
# Find allMigraDocreferences
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
Tam API Referansı
Sınıf Eşlemeleri
| MigraDoc Sınıfı | IronPDF Eşdeğeri |
|---|---|
Document | ChromePdfRenderer |
Section | HTML <body> or <div> |
Paragraph | HTML <p>, <h1>, etc. |
FormattedText | HTML <span>, <strong>, etc. |
Table | HTML <table> |
Row | HTML <tr> |
Column | HTML <col> or CSS |
Cell | HTML <td>, <th> |
PdfDocumentRenderer | ChromePdfRenderer |
Yöntem Eşlemeleri
| MigraDoc Yöntemi | IronPDF Eşdeğeri |
|---|---|
document.AddSection() | HTML yapısı |
section.AddParagraph(text) | <p>text</p> |
section.AddTable() | <table> |
table.AddColumn(width) | CSS width property |
table.AddRow() | <tr> |
row.Cells[n].AddParagraph() | <td>content</td> |
renderer.RenderDocument() | RenderHtmlAsPdf(html) |
pdfDocument.Save(path) | pdf.SaveAs(path) |
Yer Tutucu Eşlemeleri (Üstbilgi/Altbilgi)
| MigraDoc Yöntemi | IronPDF Yer Tutucu |
|---|---|
AddPageField() | {page} |
AddNumPagesField() | {total-pages} |
AddDateField() | {date} |
Kod Göç Örnekleri
Örnek 1: Temel HTML'den PDF'e (Temel Fark)
Önce (MigraDoc):
// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.Diagnostics;
class Program
{
static void Main()
{
//MigraDocdoesn't support HTML directly
// Must manually create document structure
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.AddFormattedText("Hello World", TextFormat.Bold);
paragraph.Format.Font.Size = 16;
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
}
}
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
End Sub
End ClassBu örnek,MigraDocile IronPDF arasındaki temel farkı göstermektedir. MigraDoc, Document oluşturmayı, Section eklemeyi, Paragraph eklemeyi, AddFormattedText() ile TextFormat.Bold kullanmayı, Format.Font.Size ayarlamayı, PdfDocumentRenderer oluşturmayı, belgeyi atamayı, RenderDocument() çağırmayı ve son olarak kaydetmeyi gerektirir. Bu, 10'dan fazla satır kod ve birden çok nesne içerir.
IronPDF, aynı sonucu 3 satırda gerçekleştirir: bir renderlayıcı oluşturun, HTML renderlayın ve kaydedin. HTML <h1> etiketi doğal olarak kalın, büyük başlık stilini sağlar. HTML'den PDF'ye belgelemeyi ek işleme seçenekleri için inceleyin.
Örnek 2: Tablolar Oluşturma
Önce (MigraDoc):
// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
Table table = section.AddTable();
table.Borders.Width = 0.75;
Column column1 = table.AddColumn("3cm");
Column column2 = table.AddColumn("3cm");
Row row1 = table.AddRow();
row1.Cells[0].AddParagraph("Name");
row1.Cells[1].AddParagraph("Age");
Row row2 = table.AddRow();
row2.Cells[0].AddParagraph("John");
row2.Cells[1].AddParagraph("30");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("table.pdf");
}
}
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlTable = @"
<table border='1'>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>John</td><td>30</td></tr>
</table>";
var pdf = renderer.RenderHtmlAsPdf(htmlTable);
pdf.SaveAs("table.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim htmlTable As String = "
<table border='1'>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>John</td><td>30</td></tr>
</table>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlTable)
pdf.SaveAs("table.pdf")
End Sub
End ModuleMigraDoc tablo oluşturma, Table, Column, Row ve Cell hiyerarşisini anlamayı gerektirir. Sütunları AddColumn() ile açıkça eklemeli, satırları AddRow() ile oluşturmalı, hücrelere indekse göre Cells[n] ile erişmeli ve içerik eklemelisiniz AddParagraph() ile. Kenar, table.Borders.Width ile ayarlanır.
IronPDF, her web geliştiricisinin bildiği standart HTML tablo sözdizimini kullanır. border='1' özelliği kenar sağlar, <th> öğeleri başlık hücreleri oluşturur ve <td> öğeleri veri hücreleri oluşturur. Zebra çizgileri, hover efektleri veya duyarlı düzenler gibi ileri düzey stil için CSS eklenebilir. PDF'lerde tablolar oluşturma hakkında daha fazla bilgi edinin.
Örnek 3: Sayfa Numaraları ile Başlıklar ve Alt Bilgiler
Önce (MigraDoc):
// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
class Program
{
static void Main()
{
Document document = new Document();
Section section = document.AddSection();
// Add header
Paragraph headerPara = section.Headers.Primary.AddParagraph();
headerPara.AddText("Document Header");
headerPara.Format.Font.Size = 12;
headerPara.Format.Alignment = ParagraphAlignment.Center;
// Add footer
Paragraph footerPara = section.Footers.Primary.AddParagraph();
footerPara.AddText("Page ");
footerPara.AddPageField();
footerPara.Format.Alignment = ParagraphAlignment.Center;
// Add content
section.AddParagraph("Main content of the document");
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("header-footer.pdf");
}
}
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Document Header"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>");
pdf.SaveAs("header-footer.pdf");
}
}Imports IronPdf
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Document Header"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>")
pdf.SaveAs("header-footer.pdf")
End Sub
End ClassMigraDoc başlık ve alt bilgi, section.Headers.Primary ve section.Footers.Primary erişimini gerektirir, bu içlerinde paragraflar oluşturur, AddText() ile metin ekler ve özel yöntemler kullanır, dinamik içerik için AddPageField() gibi. Hizalama, Format.Alignment ayarlanmasını gerektirir.
IronPDF, RenderingOptions.TextHeader / RenderingOptions.TextFooter üzerinde TextHeaderFooter kullanarak başlıklar ve alt bilgiler yapılandırır, LeftText, CenterText ve RightText bölgeyle. {page} yer tutucu, otomatik olarak mevcut sayfa numarasını ekler. Daha zengin düzenler için tamHTML/CSSdesteği ile HtmlHeader / HtmlFooter HtmlHeaderFooter kullanın. Başlıklar ve altbilgiler belgeleri için gelişmiş seçenekler görün.
Kritik Taşıma Notları
Sayfa Numarası Yer Tutucu Sözdizimi
Başlıklar ve altbilgiler için en önemli değişiklik yer tutucu sözdizimidir:
//MigraDocfield methods:
footerPara.AddPageField(); // Current page
footerPara.AddNumPagesField(); // Total pages
//IronPDF placeholders:
"Page {page} of {total-pages}"
Format Özelliklerini CSS'e Dönüştür
MigraDoc'un Format özellikleri CSS ile eşleşir:
// MigraDoc:
paragraph.Format.Font.Size = 16;
paragraph.Format.Font.Bold = true;
paragraph.Format.Alignment = ParagraphAlignment.Center;
//IronPDF(CSS):
<p style="font-size: 16pt; font-weight: bold; text-align: center;">' MigraDoc:
paragraph.Format.Font.Size = 16
paragraph.Format.Font.Bold = True
paragraph.Format.Alignment = ParagraphAlignment.Center
' IronPDF(CSS):
'<p style="font-size: 16pt; font-weight: bold; text-align: center;">Birim Dönüşümü
MigraDoc farklı birimi kullanırken;IronPDF kenar boşlukları milimetre cinsindendir:
- '1cm' = 10mm
- '1in' = 25,4mm
- "72pt" = 25,4mm
// MigraDoc:
table.AddColumn("3cm");
//IronPDF(CSS):
<th style="width: 3cm;">' MigraDoc:
table.AddColumn("3cm")
' IronPDF(CSS):
<th style="width: 3cm;">Renderlama Deseni Değişikliği
Tüm renderlama deseni değişir:
//MigraDocpattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");
//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Hata Ayıklama
Sorun 1: Belge/Bölüm Bulunamadı
Sorun: IronPDF'de Document ve Section sınıfları yok.
Çözüm: HTML yapısıyla değiştirin:
// MigraDoc
Document document = new Document();
Section section = document.AddSection();
// IronPDF
string html = "<html><body>...</body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);Imports MigraDoc.DocumentObjectModel
Imports IronPdf
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim html As String = "<html><body>...</body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)Sorun 2: AddParagraph Bulunamadı
Sorun: AddParagraph() metodu yok.
Çözüm: HTML elemanlarını kullanın:
// MigraDoc
section.AddParagraph("Hello World");
// IronPDF
"<p>Hello World</p>"netSorun 3: PdfDocumentRenderer Bulunamadı
Sorun: PdfDocumentRenderer sınıfı yok.
Çözüm: ChromePdfRenderer kullanın:
// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
// IronPDF
var renderer = new ChromePdfRenderer();' MigraDoc
Dim pdfRenderer As New PdfDocumentRenderer()
' IronPDF
Dim renderer As New ChromePdfRenderer()Sorun 4: AddPageField Çalışmıyor
Sorun: AddPageField() metodu yok.
**Çözüm:**IronPDF yer tutucu sözdizimini kullanın:
// MigraDoc
footerPara.AddPageField();
// IronPDF
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};' MigraDoc
footerPara.AddPageField()
' IronPDF
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}Geçiş Kontrol Listesi
Öncesi-Geçiş
- TümMigraDoc
usingifadelerini tanımlayın. - Belge tablo yapıları (sütunlar, satırlar, stil)
- Başlık/altbilgi içeriği ve sayfa alanı kullanımı
document.Stylesile tanımlanmış özel stilleri listeleyin. -IronPDF lisans anahtarını edinin
Paket Değişiklikleri
PDFsharp-MigraDoc,PDFsharp-MigraDoc-GDIvePDFsharp-MigraDoc-WPFpaketlerini kaldırın.IronPdfNuGet paketi kurun:dotnet add package IronPdf- Ad alanı ithalatlarını güncelleyin
Kod Değişiklikleri
Başlangıçta lisans anahtarı yapılandırmasını ekleyin
SectionHTML yapısıyla değiştirin.AddParagraph()'i HTML<p>öğelerine dönüştürün.Cell'i HTML<table>yapısına dönüştürün.AddPageField()'i{page}yer tutucu ile değiştirin.AddNumPagesField()'i{total-pages}yer tutucu ile değiştirin.Formatözelliklerini CSS stillerine dönüştürün.PdfDocumentRenderer'iChromePdfRendererile değiştirin.
Test Etme
- Eski ve yeni PDF'ler arasında görsel çıktı karşılaştırması
- Sayfa kırılmaları düzgün çalışıyor mu kontrol edin
- Başlık/altbilgi işleme ve sayfa numaralarını kontrol et
- Tablo biçimlendirme ve kenarlıkları doğrula
- Karmaşık çok sayfalı belgelerle test yap
Geçiş Sonrası
-MigraDocile ilgili belgeleri kaldır
- Ekip eğitim materyallerini güncelleyin
- Yeni HTML şablon konumlarını belgeleyin

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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.