using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
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, Paragraph ve Table nesneleri kullanarak elle oluşturmalısınız—mevcutHTML/CSStasarımlarını kullanamazsınız.
Tescilli Belge Modeli: MigraDoc, AddSection(), AddParagraph(), AddTable(), AddRow() ve AddCell() 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.Bold ve Format.Alignment gibi ö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
with CSS
Grafikler
TemelMigraDocgrafikler
Herhangi birJavaScriptgrafik kütüphanesi
Görseller
Manuel boyutlandırma/konumlandırma
Standard HTML
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:
// 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");
}
}
// 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");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering
Imports System.Diagnostics
Class Program
Shared Sub Main()
'MigraDoc doesn't support HTML directly
' Must manually create document structure
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim paragraph As Paragraph = section.AddParagraph()
paragraph.AddFormattedText("Hello World", TextFormat.Bold)
paragraph.Format.Font.Size = 16
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("output.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
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");
}
}
// 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 Class
$vbLabelText $csharpLabel
Bu ö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");
}
}
// 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");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.DocumentObjectModel.Tables
Imports MigraDoc.Rendering
Class Program
Shared Sub Main()
Dim document As New Document()
Dim section As Section = document.AddSection()
Dim table As Table = section.AddTable()
table.Borders.Width = 0.75
Dim column1 As Column = table.AddColumn("3cm")
Dim column2 As Column = table.AddColumn("3cm")
Dim row1 As Row = table.AddRow()
row1.Cells(0).AddParagraph("Name")
row1.Cells(1).AddParagraph("Age")
Dim row2 As Row = table.AddRow()
row2.Cells(0).AddParagraph("John")
row2.Cells(1).AddParagraph("30")
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("table.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
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
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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = 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 Class
$vbLabelText $csharpLabel
MigraDoc 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,
öğeleri başlık hücreleri oluşturur ve
öğ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");
}
}
// 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");
}
}
Imports MigraDoc.DocumentObjectModel
Imports MigraDoc.Rendering
Class Program
Shared Sub Main()
Dim document As New Document()
Dim section As Section = document.AddSection()
' Add header
Dim headerPara As Paragraph = section.Headers.Primary.AddParagraph()
headerPara.AddText("Document Header")
headerPara.Format.Font.Size = 12
headerPara.Format.Alignment = ParagraphAlignment.Center
' Add footer
Dim footerPara As Paragraph = section.Footers.Primary.AddParagraph()
footerPara.AddText("Page ")
footerPara.AddPageField()
footerPara.Format.Alignment = ParagraphAlignment.Center
' Add content
section.AddParagraph("Main content of the document")
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("header-footer.pdf")
End Sub
End Class
$vbLabelText $csharpLabel
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");
}
}
// 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 Class
$vbLabelText $csharpLabel
MigraDoc 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 / HtmlFooterHtmlHeaderFooter 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}"
//MigraDocfield methods:
footerPara.AddPageField(); // Current page
footerPara.AddNumPagesField(); // Total pages
//IronPDF placeholders:
"Page {page} of {total-pages}"
' MigraDocfield methods:
footerPara.AddPageField() ' Current page
footerPara.AddNumPagesField() ' Total pages
' IronPDF placeholders:
"Page {page} of {total-pages}"
//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");
//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");
' MigraDoc pattern (DELETE):
Dim pdfRenderer As New PdfDocumentRenderer()
pdfRenderer.Document = document
pdfRenderer.RenderDocument()
pdfRenderer.PdfDocument.Save("output.pdf")
' IronPDF pattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
$vbLabelText $csharpLabel
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);
// 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)
Başlangıçta lisans anahtarı yapılandırmasını ekleyin
Section HTML yapısıyla değiştirin.
AddParagraph()'i HTML öğelerine dönüştürün.
Cell'i HTML
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'i ChromePdfRenderer ile 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
Lütfen dikkate alınMigraDoc ve PDFSharp, ilgili sahiplerinin tescilli markalarıdır. Bu site, empira Software GmbH ile ilişkili, onaylanmış veya desteklenmiş değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
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ı...