跳至頁尾內容
影片

如何在 C# 中保存和編輯 PDF 修訂歷史

從MigraDoc遷移到IronPDF將您的.NET PDF工作流從需要手動元素逐一構建的冗長程式化文件模型轉變為現代HTML/CSS基礎的方法,這使得利用現有的網頁開發技能成為可能。 本指南為專業的.NET開發者提供了一條全面的、逐步的遷移路徑,消除了MigraDoc的專有文件物件模型的陡峭學習曲線。

為什麼從MigraDoc遷移到IronPDF

MigraDoc的挑戰

MigraDoc是一個依賴於PDFsharp的佈局引擎,它依賴於PDFsharp包並渲染成一個PDFsharp PdfDocument。 由empira/PDFsharp-團隊在MIT許可下維護,它在程式化生成方面很強大,但在影響現代開發工作流程方面有基本的限制:

  1. 無HTML支援: MigraDoc不直接支持HTML。 您必須使用Table物件手動構建文件元素,無法利用現有的HTML/CSS設計。

  2. 專有文件模型: MigraDoc需要學習一個獨特的文件模型,其中包含AddCell()等概念。 這種陡峭的學習曲線對具有網頁開發背景的開發者來說尤其具有挑戰性。

  3. 有限的樣式選項: 雖然MigraDoc提供了強大的文件結構管理,但其樣式的功能與現代Web工具相比是有限的。 像Format.Alignment這樣的屬性與完整的CSS3相比是有限的。

  4. 繁瑣的程式碼: 即使是簡單的佈局也需要數十行程式碼。 一個基本的表格帶有標題可能需要15到20行的MigraDoc程式碼。

  5. 無JavaScript支援: MigraDoc無法呈現動態內容或執行JavaScript,限制了現代圖表和互動元素的選擇。

  6. 圖表示基本的: 與像Chart.js或D3這樣的現代JavaScript圖表庫相比,MigraDoc的圖表功能是有限的。

MigraDoc與IronPDF比較

功能 MigraDoc IronPDF
內容定義 程式化(Document/Section/Paragraph) HTML/CSS
學習曲線 陡峭(專有DOM) 簡單(網頁技能)
樣式 有限的屬性 完整支持 CSS3
JavaScript None 完整的Chromium執行
表格 手動定義列/行 HTML <table>和CSS
圖表 基本的MigraDoc圖表 任何JavaScript圖表庫
圖像 手動調整大小/定位 標準HTML <img>
響應式佈局 不支持 Flexbox,Grid
授權 開源(MIT) 商業

對於定位現代.NET的團隊來說,IronPDF允許開發者使用熟悉的HTML/CSS技能,而不需要學習專有的文件模型。


遷移複雜性評估

功能的預估努力程度

功能 遷移複雜性
簡單文字 非常低
表格
頁眉/頁腳
樣式
圖像
圖表

範式轉變

這次MigraDoc遷移的基本轉變是從 程式化文件構建HTML優先渲染:

MigraDoc:  Document → AddSection() → AddParagraph() → PdfDocumentRenderer → Save()
IronPDF:   ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()

這種範式轉變大大減少了程式碼的複雜性,同時通過CSS提供了無限的樣式功能。


開始之前

前提條件

  1. .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet存取: 有能力安裝NuGet套件
  3. IronPDF授權:ironpdf.com獲取您的授權金鑰

NuGet包變更

# Remove MigraDoc packages (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
# Remove MigraDoc packages (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
SHELL

授權配置

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// 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"
$vbLabelText   $csharpLabel

識別MigraDoc用法

# Find all MigraDoc references
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
# Find all MigraDoc references
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
SHELL

完整API參考

類別映射

MigraDoc類 IronPDF等價
Document ChromePdfRenderer
Section HTML <body><div>
Paragraph HTML <h1>
FormattedText HTML <strong>
Table HTML <table>
Row HTML <tr>
Column HTML <col> 或 CSS
Cell HTML <th>
PdfDocumentRenderer ChromePdfRenderer

方法映射

MigraDoc方法 IronPDF等價
document.AddSection() HTML結構
section.AddParagraph(text) <p>text</p>
section.AddTable() <table>
table.AddColumn(width) CSS width 屬性
table.AddRow() <tr>
row.Cells[n].AddParagraph() <td>content</td>
renderer.RenderDocument() RenderHtmlAsPdf(html)
pdfDocument.Save(path) pdf.SaveAs(path)

佔位符映射(頁眉/頁腳)

MigraDoc方法 IronPDF 佔位符
AddPageField() {page}
AddNumPagesField() {total-pages}
AddDateField() {date}

程式碼遷移範例

範例1:基本HTML到PDF(基本差異)

之前(MigraDoc):

// NuGet: Install-Package PDFsharp-MigraDoc-GDI
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // MigraDoc doesn'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()
    {
        // MigraDoc doesn'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

之後(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

這個例子說明了MigraDoc和IronPDF之間的基本差異。 MigraDoc需要建立一個RenderDocument(),最後保存。 這需要10多行程式碼和多個物件。

IronPDF在3行中實現相同的結果:建立一個渲染器,渲染HTML,保存。 HTML <h1> 標籤自然地提供了粗體、大標題樣式。 查看HTML到PDF文件以獲取其他渲染選項。

範例2:建立表格

之前(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

之後(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表格的建立需要了解Cell的層次結構。 您必須用AddParagraph()新增內容。 邊框通過table.Borders.Width設置。

IronPDF使用標準的HTML表格語法,任何網頁開發人員都知道。 <th> 元素建立標頭儲存格,<td>元素建立資料儲存格。 CSS可以新增進行高級樣式設計,如斑馬條紋、懸停效果或響應式佈局。 了解更多關於在PDF中建立表格

範例3:具有頁碼的標頭和頁腳

之前(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

之後(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的標頭和頁腳需要存取AddPageField()這樣的特殊方法進行動態內容。 對齊需要設置Format.Alignment

IronPDF在RightText的區域。 {page}占位符自動插入當前頁碼。 為了獲得更豐富的佈局,使用HtmlHeaderFooter以獲得完整的HTML/CSS支援。 查看標頭和頁腳文件以獲得高級選項。


關鍵遷移注意事項

頁數占位符語法

標頭和頁腳中最重要的更改是占位符語法:

// MigraDoc field methods:
footerPara.AddPageField();       // Current page
footerPara.AddNumPagesField();   // Total pages

//IronPDFplaceholders:
"Page {page} of {total-pages}"
// MigraDoc field methods:
footerPara.AddPageField();       // Current page
footerPara.AddNumPagesField();   // Total pages

//IronPDFplaceholders:
"Page {page} of {total-pages}"
' MigraDoc field methods:
footerPara.AddPageField()       ' Current page
footerPara.AddNumPagesField()   ' Total pages

' IronPDF placeholders:
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

格式屬性到CSS

MigraDoc的Format屬性對應到CSS:

// 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;">
' 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;">
$vbLabelText   $csharpLabel

單位轉換

MigraDoc使用各種單位; IronPDF邊距使用毫米:

  • "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;">
' MigraDoc:
table.AddColumn("3cm")

' IronPDF(CSS):
<th style="width: 3cm;">
$vbLabelText   $csharpLabel

渲染模式改變

整個渲染模式改變:

// MigraDoc pattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// MigraDoc pattern (DELETE):
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
pdfRenderer.PdfDocument.Save("output.pdf");

//IronPDFpattern:
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

故障排除

問題1:未找到文件/章節

問題: DocumentSection 類在IronPDF中不存在。

解決方案: 用HTML結構替換:

// 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)
$vbLabelText   $csharpLabel

問題2:未找到AddParagraph

問題: AddParagraph() 方法不存在。

解決方案: 使用HTML元素:

// MigraDoc
section.AddParagraph("Hello World");

// IronPDF
"<p>Hello World</p>"
// MigraDoc
section.AddParagraph("Hello World");

// IronPDF
"<p>Hello World</p>"
$vbLabelText   $csharpLabel

問題3:未找到PdfDocumentRenderer

問題: PdfDocumentRenderer 類不存在。

解決方案: 使用ChromePdfRenderer

// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();

// IronPDF
var renderer = new ChromePdfRenderer();
// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();

// IronPDF
var renderer = new ChromePdfRenderer();
' MigraDoc
Dim pdfRenderer As New PdfDocumentRenderer()

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

問題4:AddPageField無效

問題: AddPageField() 方法不存在。

解決方案: 使用IronPDF占位符語法:

// MigraDoc
footerPara.AddPageField();

// IronPDF
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "Page {page}"
};
// 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}"
}
$vbLabelText   $csharpLabel

遷移檢查表

遷移前

  • 識別所有MigraDoc using 語句
  • 文件表格結構(列、行、樣式)
  • 記錄標頭/頁腳內容和頁面字段使用
  • 列出用document.Styles定義的自訂樣式
  • 獲得IronPDF授權金鑰

套件變更

  • 刪除PDFsharp-MigraDoc-WPF
  • 安裝IronPdf NuGet包:dotnet add package IronPdf
  • 更新命名空間導入

程式碼變更

  • 在啟動時加入授權金鑰配置
  • 用HTML結構替換Section
  • AddParagraph()轉換為HTML <p>元素
  • Cell轉換為HTML <table>結構
  • AddPageField()
  • AddNumPagesField()
  • Format屬性轉換為CSS樣式
  • PdfDocumentRenderer

測試

  • 比較舊的和新的PDF之間的視覺輸出
  • 驗證頁面分隔符正常工作
  • 檢查標頭/頁腳渲染和頁碼
  • 驗證表格格式和邊框
  • 使用複雜的多頁文件進行測試

遷移後

  • 刪除與MigraDoc相關的文件
  • 更新團隊訓練資料
  • 記錄新HTML範本的位置

請注意MigraDoc和PDFSharp是其各自所有者的註冊商標。 本網站與empira Software GmbH無關、未被其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話