fo.netからIronPDFへの移行方法
fo.netからIronPDFへの移行:完全なC#移行ガイド
fo.net(FO.NET)からIronPDFへの移行は、.NET PDF生成ワークフローの大幅な近代化を意味します。 このガイドでは、コードベースを時代遅れのXSL-FOマークアップから最新のHTML/CSSベースのPDF生成に移行するための、明確で段階的な移行パスを提供します。
なぜfo.netからIronPDFへ移行するのか
fo.netの課題
fo.netはXSL-FOからPDFへのレンダラーですが、最新の開発には大きな制限があります:
1.時代遅れの技術:XSL-FO(Extensible Stylesheet Language Formatting Objects)は2001年のW3C仕様で、2006年以降更新がなく、ほとんど時代遅れと見なされています。
2.急な学習曲線:XSL-FOは、特殊なフォーマットオブジェクト(fo:block、fo:table、fo:page-sequenceなど)を持つ複雑なXMLベースのマークアップを学習する必要があります。
3.HTML/CSSサポートなし:fo.netはHTMLやCSSをレンダリングできません。HTMLからXSL-FOマークアップへの手動変換が必要です。
4.Abandoned/Unmaintained: オリジナルのCodePlexリポジトリは廃止されました; GitHubのフォークは現在アクティブにメンテナンスされていません。
5.Windowsのみ:fo.netはSystem.Drawingに内部依存しているため、Linux/macOSでは動作しません。
6.制限されたモダンな機能:JavaScriptのサポートなし、CSS3なし、フレックスボックス/グリッドなし、モダンなWebフォントなし。
7.URLレンダリングなし: fo.netはウェブページを直接レンダリングできません。
fo.netとIronPDFの比較
</fo.net| アスペクト | fo.net (FO.NET) | IronPDF |
|---|---|---|
| 入力フォーマット | XSL-FO(時代遅れのXML) | HTML/CSS(最新のウェブ標準) |
| 学習曲線 | スティープ(XSL-FOの専門知識) | ジェントル(HTML/CSSの知識) |
| メンテナンス | 中止 | 毎月積極的にメンテナンス |
| プラットフォームサポート | Windowsのみ | 真のクロスプラットフォーム (.NET 6/7/8/9/10+) |
| CSSサポート | なし | フルCSS3(フレックスボックス、グリッド) |
| JavaScript | なし | JavaScriptフルサポート |
| URLレンダリング | サポートされていません | 内蔵 |
| 最新の機能 | 制限的 | ヘッダー、フッター、透かし、セキュリティ |
| ドキュメンテーション | 古い | 包括的なチュートリアル。 |
なぜ切り替えは理にかなっているのか
fo.netは、XSL-FOが文書フォーマットの標準になると予想されたときに設計されました。 そのような期待は実現しませんでした。 HTML/CSSは普遍的な文書フォーマットとなり、XSL-FOを知っている開発者が1%未満であるのに対し、HTML/CSSを知っている開発者は98%以上にのぼります。 ほとんどのXSL-FOリソースは2005年から2010年のもので、メンテナンスがますます難しくなっています。
IronPDFは、2025年まで、そして2026年まで、.NET 10とC# 14を含む最新の.NETバージョンをフルサポートし、すでに持っているスキルを使ってプロフェッショナルなPDFを作成することができます。
始める前に
前提条件
1..NET環境: IronPDFは.NET Framework 4.6.2+、.NET Core 3.1+、.NET 5/6/7/8/9+をサポートしています。 2.NuGetアクセス: NuGetからパッケージをインストールできるようにする。 3.ライセンスキー:ironpdf.comから本番使用用のIronPDFライセンスキーを入手してください。
プロジェクトのバックアップ
# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before fo.net toIronPDFmigration"# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before fo.net toIronPDFmigration"すべてのfo.netの使用法を特定する。
# Find all fo.net references
grep -r "FonetDriver\|Fonet\|\.fo\"\|xsl-region" --include="*.cs" --include="*.csproj" .
# Find all XSL-FO template files
find . -name "*.fo" -o -name "*.xslfo" -o -name "*xsl-fo*"# Find all fo.net references
grep -r "FonetDriver\|Fonet\|\.fo\"\|xsl-region" --include="*.cs" --include="*.csproj" .
# Find all XSL-FO template files
find . -name "*.fo" -o -name "*.xslfo" -o -name "*xsl-fo*"XSL-FOテンプレートを文書化する
移行する前に、すべてのXSL-FOファイルをカタログ化し、メモしてください:
- ページ寸法と余白
- 使用フォント
- 表とその構造
- ヘッダーとフッター (
fo:static-content<//code>) - ページ番号のパターン
- 画像参照
クイック スタート マイグレーション
ステップ 1: NuGet パッケージを更新する。
# Remove fo.net package
dotnet remove package Fonet
dotnet remove package FO.NET
# Install IronPDF
dotnet add package IronPdf# Remove fo.net package
dotnet remove package Fonet
dotnet remove package FO.NET
# Install IronPDF
dotnet add package IronPdfステップ 2: 名前空間の更新
// Before (fo.net)
using Fonet;
using Fonet.Render.Pdf;
using System.Xml;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;// Before (fo.net)
using Fonet;
using Fonet.Render.Pdf;
using System.Xml;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comステップ3: IronPDFを初期化する
// Set license key at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Set license key at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comステップ 4: 基本的な変換パターン
// Before (fo.net with XSL-FO)
FonetDriver driver = FonetDriver.Make();
using (FileStream output = new FileStream("output.pdf", FileMode.Create))
{
driver.Render(new StringReader(xslFoContent), output);
}
// After (IronPDF with HTML)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");// Before (fo.net with XSL-FO)
FonetDriver driver = FonetDriver.Make();
using (FileStream output = new FileStream("output.pdf", FileMode.Create))
{
driver.Render(new StringReader(xslFoContent), output);
}
// After (IronPDF with HTML)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com完全な API リファレンス
名前空間マッピング
| fo.net 名前空間 | IronPDF 同等物 | ノート |
|---|---|---|
| <コード>Fonet</コード | IronPdf(アイアンPDF | 主な名前空間 |
| <コード>Fonet.Render.Pdf</コード | IronPdf(アイアンPDF | PDFレンダリング |
| <コード>Fonet.Layout</コード | 該当なし | レイアウトはCSSで処理 |
| <コード>Fonet.Fo</コード | 該当なし | オブジェクトのフォーマット → HTML |
| <コード>Fonet.Image</コード | IronPdf(アイアンPDF | 画像処理内蔵 |
FonetDriverからChromePdfRendererへの翻訳
| FonetDriver メソッド | IronPDF 同等物 | ノート |
|---|---|---|
FonetDriver.Make()を使用してください。 | new ChromePdfRenderer(). | レンダラーの作成 |
driver.Render(inputStream, outputStream). | renderer.RenderHtmlAsPdf(html). | ストリームベース |
driver.Render(inputFile, outputStream). | renderer.RenderHtmlFileAsPdf(path)のようにします。 | ファイルベース |
ドライバー.ベースディレクトリ | <コード>RenderingOptions.BaseUrl</コード | リソースのベースパス |
driver.OnError += handler. | レンダリング周りのトライ/キャッチ | エラー処理 |
レンダリングオプション (PDF 設定)
| fo.net (XSL-FO属性) | IronPDF レンダリングオプション | ノート |
|---|---|---|
| <コード>ページハイト</コード | PaperSizeまたはSetCustomPaperSize()。 | ページサイズ |
| <コード>ページ幅</コード | <コード>用紙サイズ</コード | 標準またはカスタム |
| <コード>マージントップ</コード | <コード>マージントップ</コード | 単位:ミリメートル |
| <コード>マージンボトム</コード | <コード>マージンボトム</コード | 単位:ミリメートル |
| <コード>マージンレフト</コード | <コード>マージンレフト</コード | 単位:ミリメートル |
margin-right | <コード>マージンライト</コード | 単位:ミリメートル |
| <コード>リファレンス指向</コード | ペーパーオリエンテーション | ポートレート/風景 |
XSL-FOからHTMLへの変換ガイド
XSL-FO要素をHTML/CSSに変換する
このfo.net移行における基本的なシフトは、XSL-FO要素を同等のHTMLに変換することです:
| XSL-FO要素 | HTML/CSS相当 | ノート |
|---|---|---|
<fo:root>のようにします。 | <html> | ルート要素 |
| CSS @pageルール | ページ設定 |
<fo:simple-page-master>。 | CSS <コード>@ページ</コード | ページ定義 |
| <body> または <div> を使用してください。 | ページ内容 |
<fo:flow>のようにします。 | <main> または <div> を使用してください。 | 主な内容 |
| <コード>HtmlHeaderFooter</コード | ヘッダー/フッター |
<fo:block>のようにします。 | <p>、<div>、<h1>-<h6>。 | ブロックコンテンツ |
<fo:inline>のようにします。 | <span> | インラインコンテンツ |
| <table> | 表 |
| <tr> | 表の行 |
| <td>、<th>。 | 表セル |
| <ul>、<ol>。 | リスト |
| <li> | リスト項目 |
| <img> | 画像 |
| <コード>{ページ}</コード>プレースホルダ | ページ数 |
| <コード>{総ページ数}</コード | 総ページ数 |
| <a href> | ハイパーリンク |
XSL-FOプロパティからCSSへ
| XSL-FOプロパティ | CSS相当 | 翻訳例 |
|---|---|---|
font-family | font-family | 同じ構文 |
| <コード>フォントサイズ</コード | <コード>フォントサイズ</コード | 同じ構文 |
| <コード>フォントウェイト</コード | <コード>フォントウェイト</コード | bold、normal、700。 |
| <コード>テキストアライン</コード | <コード>テキストアライン</コード | left、center、right、justify。 |
| <コード>カラー</コード | <コード>カラー</コード | 16進数、RGB、名前 |
| <コード>背景色</コード | <コード>背景色</コード | 同じ構文 |
| <コード>スペース・ビフォー</コード | <コード>マージントップ</コード | 翻訳前 |
| <コード>スペースアフター</コード | <コード>マージンボトム</コード | 要素 |
start-indent<//code> | <コード>マージンレフト</コード | 左インデント |
| <コード>keep-together</コード | page-break-inside: 避けてください。 | 改行を防ぐ |
break-before="page"を使用してください。 | page-break-before: always | 強制改ページ |
コード例
例1: 基本的なHTMLからPDFへ
ビフォア(XSL-FO付きfo.net):
// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
using System.Xml;
class Program
{
static void Main()
{
// fo.net requires XSL-FO format, not HTML
// First convert HTML to XSL-FO (manual process)
string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
<fo:simple-page-master master-name='page'>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference='page'>
<fo:flow flow-name='xsl-region-body'>
<fo:block>Hello World</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>";
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("output.pdf", FileMode.Create));
}
}// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
using System.Xml;
class Program
{
static void Main()
{
// fo.net requires XSL-FO format, not HTML
// First convert HTML to XSL-FO (manual process)
string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
<fo:simple-page-master master-name='page'>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference='page'>
<fo:flow flow-name='xsl-region-body'>
<fo:block>Hello World</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>";
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("output.pdf", FileMode.Create));
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(HTML付きIronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFのアプローチは25行以上のXSL-FOマークアップをわずか4行のクリーンなC#コードに削減します。 HTMLからPDFへのオプションについては、IronPDF HTML to PDF documentationをご覧ください。
例2: カスタム設定のPDF
ビフォア(XSL-FO付きfo.net):
// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
class Program
{
static void Main()
{
// fo.net settings are configured in XSL-FO markup
string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
<fo:simple-page-master master-name='A4'
page-height='297mm' page-width='210mm'
margin-top='20mm' margin-bottom='20mm'
margin-left='25mm' margin-right='25mm'>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference='A4'>
<fo:flow flow-name='xsl-region-body'>
<fo:block font-size='14pt'>Custom PDF</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>";
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("custom.pdf", FileMode.Create));
}
}// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
class Program
{
static void Main()
{
// fo.net settings are configured in XSL-FO markup
string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
<fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<fo:layout-master-set>
<fo:simple-page-master master-name='A4'
page-height='297mm' page-width='210mm'
margin-top='20mm' margin-bottom='20mm'
margin-left='25mm' margin-right='25mm'>
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference='A4'>
<fo:flow flow-name='xsl-region-body'>
<fo:block font-size='14pt'>Custom PDF</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>";
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("custom.pdf", FileMode.Create));
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(HTML付きIronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
string html = "<h1 style='font-size:14pt'>Custom PDF</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
string html = "<h1 style='font-size:14pt'>Custom PDF</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdfはXMLマークアップに設定を埋め込む代わりに、プログラムによるレンダリングオプションを提供します。
例3: URLからPDFへ
Before(fo.netはサポートされていません):。
// NuGet: Install-Package Fonet
using Fonet;
using System.IO;
using System.Net;
class Program
{
static void Main()
{
// fo.net does not support URL rendering directly
// Must manually download, convert HTML to XSL-FO, then render
string url = "https://example.com";
string html = new WebClient().DownloadString(url);
// Manual conversion from HTML to XSL-FO required (complex)
string xslFo = ConvertHtmlToXslFo(html); // Not built-in
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("webpage.pdf", FileMode.Create));
}
static string ConvertHtmlToXslFo(string html)
{
// Custom implementation required - extremely complex
throw new System.NotImplementedException();
}
}// NuGet: Install-Package Fonet
using Fonet;
using System.IO;
using System.Net;
class Program
{
static void Main()
{
// fo.net does not support URL rendering directly
// Must manually download, convert HTML to XSL-FO, then render
string url = "https://example.com";
string html = new WebClient().DownloadString(url);
// Manual conversion from HTML to XSL-FO required (complex)
string xslFo = ConvertHtmlToXslFo(html); // Not built-in
FonetDriver driver = FonetDriver.Make();
driver.Render(new StringReader(xslFo),
new FileStream("webpage.pdf", FileMode.Create));
}
static string ConvertHtmlToXslFo(string html)
{
// Custom implementation required - extremely complex
throw new System.NotImplementedException();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF - 組み込みサポート):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comURLからPDFへのレンダリングは、このfo.net移行における最も重要な利点の1つです。 IronPdfは完全なJavaScript実行でこれをネイティブに処理します。 URLからPDFへの変換の詳細については、こちらをご覧ください。
例4: ヘッダーとフッター
ビフォア(XSL-FO付きfo.net):
<fo:static-content flow-name="xsl-region-before">
<fo:block text-align="center" font-size="10pt">
Company Name - Confidential
</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-after">
<fo:block text-align="right" font-size="10pt">
Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/>
</fo:block>
</fo:static-content><fo:static-content flow-name="xsl-region-before">
<fo:block text-align="center" font-size="10pt">
Company Name - Confidential
</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-after">
<fo:block text-align="right" font-size="10pt">
Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/>
</fo:block>
</fo:static-content>翻訳後(IronPDF):。
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center; font-size:10pt;'>Company Name - Confidential</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center; font-size:10pt;'>Company Name - Confidential</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFは複雑なXSL-FO領域定義をシンプルなHTMLヘッダーとフッターに置き換えます。
例5: PDFセキュリティ
ビフォア(fo.net):
// fo.net has very limited PDF security options
// Must use post-processing with another library// fo.net has very limited PDF security options
// Must use post-processing with another libraryIRON VB CONVERTER ERROR developers@ironsoftware.com翻訳後(IronPDF):。
using IronPdf;
public byte[] GenerateSecurePdf(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Set metadata
pdf.MetaData.Title = "Confidential Report";
pdf.MetaData.Author = "Company Name";
// Password protection
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
// Restrict permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
return pdf.BinaryData;
}using IronPdf;
public byte[] GenerateSecurePdf(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Set metadata
pdf.MetaData.Title = "Confidential Report";
pdf.MetaData.Author = "Company Name";
// Password protection
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
// Restrict permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
return pdf.BinaryData;
}IRON VB CONVERTER ERROR developers@ironsoftware.comパフォーマンスの考慮事項
ChromePdfRendererを再利用してください。
fo.net移行時のパフォーマンスを最適化するために、ChromePdfRendererインスタンスを再利用してください:
// GOOD - Reuse the renderer
public class PdfService
{
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}
// BAD - Creating new instance each time
public byte[] GenerateBad(string html)
{
var renderer = new ChromePdfRenderer(); // Wasteful
return renderer.RenderHtmlAsPdf(html).BinaryData;
}// GOOD - Reuse the renderer
public class PdfService
{
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}
// BAD - Creating new instance each time
public byte[] GenerateBad(string html)
{
var renderer = new ChromePdfRenderer(); // Wasteful
return renderer.RenderHtmlAsPdf(html).BinaryData;
}IRON VB CONVERTER ERROR developers@ironsoftware.comユニット変換ヘルパー
fo.net XSL-FOはさまざまな単位を使用します。 IronPDFは余白にミリメートルを使用しています。 ヘルパークラスはこちらです:
public static class UnitConverter
{
public static double InchesToMm(double inches) => inches * 25.4;
public static double PointsToMm(double points) => points * 0.352778;
public static double PicasToMm(double picas) => picas * 4.233;
public static double CmToMm(double cm) => cm * 10;
}
// Usage
renderer.RenderingOptions.MarginTop = UnitConverter.InchesToMm(1); // 1 inchpublic static class UnitConverter
{
public static double InchesToMm(double inches) => inches * 25.4;
public static double PointsToMm(double points) => points * 0.352778;
public static double PicasToMm(double picas) => picas * 4.233;
public static double CmToMm(double cm) => cm * 10;
}
// Usage
renderer.RenderingOptions.MarginTop = UnitConverter.InchesToMm(1); // 1 inchIRON VB CONVERTER ERROR developers@ironsoftware.comトラブルシューティング
課題1:ページサイズの違い
問題:fo.net移行後、PDFのページサイズが異なって見える。
ソリューション:XSL-FOのページ寸法を正しくマッピングします:
// XSL-FO: page-height='11in' page-width='8.5in' (Letter)
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// XSL-FO: page-height='297mm' page-width='210mm' (A4)
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// Custom size (in mm)
renderer.RenderingOptions.SetCustomPaperSize(210, 297);// XSL-FO: page-height='11in' page-width='8.5in' (Letter)
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// XSL-FO: page-height='297mm' page-width='210mm' (A4)
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// Custom size (in mm)
renderer.RenderingOptions.SetCustomPaperSize(210, 297);IRON VB CONVERTER ERROR developers@ironsoftware.com課題2:fo:blockからHTMLへのマッピング
問題:<fo:block>が何になるべきかわからない。
解決策:適切なセマンティックHTMLを使用してください:
- 見出し
<h1>から<h6>まで - 段落
<p> - 一般的なコンテナ
<div>のようにします。 - インラインテキスト
<span>
問題3:フォントが一致しない
問題:フォントがfo.netの出力と異なって見える。
解決策:ウェブフォントを使用するか、CSSでシステムフォントを指定します:
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body { font-family: 'Roboto', Arial, sans-serif; }
</style><style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body { font-family: 'Roboto', Arial, sans-serif; }
</style>課題4:ページ番号が機能しない
問題:<fo:ページ番号/>が機能しません。
解決策:ヘッダー/フッターにIronPDFプレースホルダーを使用する:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
MaxHeight = 15 // mm
};renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
MaxHeight = 15 // mm
};IRON VB CONVERTER ERROR developers@ironsoftware.com移行チェックリスト
移行前
- [すべてのXSL-FOテンプレートファイル(
.fo,.xslfo)をカタログ化する。) - [ドキュメントのページ寸法と余白
- [ヘッダー/フッターの設定に注意してください (
fo:static-content) - [表構造とスタイルの識別
- [プロジェクトのバージョン管理へのバックアップ
- [IronPDF ライセンスキーの取得
パッケージの移行
- [ ]<コード>Fonet</コードまたは
FO.NETパッケージを削除してください:dotnet remove package Fonetを削除してください。 - [ ]
IronPdfパッケージをインストールしてください:dotnet add package IronPdf. - [ ] 名前空間のインポートを
FonetからIronPdfに更新してください。 - [ ] 起動時にIronPDFライセンスキーを設定する
コードの移行
- [ ]
FonetDriver.Make()を使用してください。をnew ChromePdfRenderer().に置き換えてください。 - [ ]
driver.Render()をrenderer.RenderHtmlAsPdf()に置き換えてください。 - [ ] ストリームからのファイル出力を
pdf.SaveAs()に更新する。 - [エラーイベントハンドラを try/catch に置き換える。
- [ ]
fo:static-contentをHtmlHeaderFooterに変換してください。 - [ ]
<fo:page-number/>を{page}<//code> プレースホルダーに置き換えてください。
テスティング
- [ ] オリジナルのfo.net PDFと出力の外観を比較する
- [ページの寸法と余白の確認
- [ヘッダーとフッターのチェック
- [ページ番号の検証
- [テストテーブルレンダリング
- [画像読み込みの確認
移行後
- [ ]
.foと.xslfoテンプレートファイルの削除 - [ ] fo.net関連のコードとユーティリティの削除
- [ドキュメントの更新
結論
fo.netからIronPDFへの移行は、時代遅れのXSL-FOマークアップを98%以上の開発者がすでに持っているHTML/CSS-スキルに置き換えることで、.NET PDF生成ワークフローを近代化します。 この移行により、放棄されたライブラリへの依存が解消され、クロスプラットフォームのサポートが追加され、JavaScriptレンダリング、CSS3スタイリング、包括的なPDFセキュリティなどの最新機能へのアクセスが可能になります。
IronPDFの積極的なメンテナンスにより、.NET 10以降の.NETバージョンを含む現在および将来の.NETバージョンとの互換性が保証されます。 その他のガイダンスについては、IronPDFドキュメントとAPIリファレンスをご覧ください。
fo.netへの移行を始める準備はできましたか? IronPdfをダウンロードして、今すぐ最初のXSL-FOテンプレートをHTMLに変換してください。






