如何在 C# 中保存和編輯 PDF 修訂歷史
從MigraDoc遷移到IronPDF將您的.NET PDF工作流從需要手動元素逐一構建的冗長程式化文件模型轉變為現代HTML/CSS基礎的方法,這使得利用現有的網頁開發技能成為可能。 本指南為專業的.NET開發者提供了一條全面的、逐步的遷移路徑,消除了MigraDoc的專有文件物件模型的陡峭學習曲線。
為什麼從MigraDoc遷移到IronPDF
MigraDoc的挑戰
MigraDoc是一個依賴於PDFsharp的佈局引擎,它依賴於PDFsharp包並渲染成一個PDFsharp PdfDocument。 由empira/PDFsharp-團隊在MIT許可下維護,它在程式化生成方面很強大,但在影響現代開發工作流程方面有基本的限制:
-
無HTML支援: MigraDoc不直接支持HTML。 您必須使用
Table物件手動構建文件元素,無法利用現有的HTML/CSS設計。 -
專有文件模型: MigraDoc需要學習一個獨特的文件模型,其中包含
AddCell()等概念。 這種陡峭的學習曲線對具有網頁開發背景的開發者來說尤其具有挑戰性。 -
有限的樣式選項: 雖然MigraDoc提供了強大的文件結構管理,但其樣式的功能與現代Web工具相比是有限的。 像
Format.Alignment這樣的屬性與完整的CSS3相比是有限的。 -
繁瑣的程式碼: 即使是簡單的佈局也需要數十行程式碼。 一個基本的表格帶有標題可能需要15到20行的MigraDoc程式碼。
-
無JavaScript支援: MigraDoc無法呈現動態內容或執行JavaScript,限制了現代圖表和互動元素的選擇。
- 圖表示基本的: 與像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提供了無限的樣式功能。
開始之前
前提條件
- .NET Environment: .NET Framework 4.6.2+ or .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet存取: 有能力安裝NuGet套件
- 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
授權配置
// 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"
識別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" .
完整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
之後(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
這個例子說明了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
之後(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
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
之後(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
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}"
格式屬性到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;">
單位轉換
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;">
渲染模式改變
整個渲染模式改變:
// 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")
故障排除
問題1:未找到文件/章節
問題: Document 和 Section 類在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)
問題2:未找到AddParagraph
問題: AddParagraph() 方法不存在。
解決方案: 使用HTML元素:
// MigraDoc
section.AddParagraph("Hello World");
// IronPDF
"<p>Hello World</p>"
// MigraDoc
section.AddParagraph("Hello World");
// IronPDF
"<p>Hello World</p>"
問題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()
問題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}"
}
遷移檢查表
遷移前
- 識別所有MigraDoc
using語句 - 文件表格結構(列、行、樣式)
- 記錄標頭/頁腳內容和頁面字段使用
- 列出用
document.Styles定義的自訂樣式 - 獲得IronPDF授權金鑰
套件變更
- 刪除
PDFsharp-MigraDoc-WPF包 - 安裝
IronPdfNuGet包:dotnet add package IronPdf - 更新命名空間導入
程式碼變更
- 在啟動時加入授權金鑰配置
- 用HTML結構替換
Section - 將
AddParagraph()轉換為HTML<p>元素 - 將
Cell轉換為HTML<table>結構 - 用
AddPageField() - 用
AddNumPagesField() - 將
Format屬性轉換為CSS樣式 - 用
PdfDocumentRenderer
測試
- 比較舊的和新的PDF之間的視覺輸出
- 驗證頁面分隔符正常工作
- 檢查標頭/頁腳渲染和頁碼
- 驗證表格格式和邊框
- 使用複雜的多頁文件進行測試
遷移後
- 刪除與MigraDoc相關的文件
- 更新團隊訓練資料
- 記錄新HTML範本的位置

