C# を使用して SVG を PDF に変換する方法
PDFreactorからIronPDFに移行することで、.NETネイティブライブラリを通して同等のHTMLからPDFへの変換機能を提供しながら、Java依存とサーバーインフラを排除します。 このガイドでは、Javaベースのサーバーアーキテクチャを.NETアプリケーションにシームレスに統合するインプロセスライブラリに置き換える、完全でステップバイステップの移行パスを提供します。
なぜPDFreactorからIronPDFに移行するのか
PDFreactorについて
PDFreactorは、さまざまなプラットフォームに統合された強力なHTMLからPDFへの変換サーバーです。 商用ソリューションとして、PDFreactorは独自の技術を活用し、HTMLとCSSコンテンツを高品質のPDFドキュメントに変換します。 特筆すべき属性として、PDFreactorは幅広いCSSプロパティに対応しており、複雑なレイアウトレンダリングの有力な候補となります。
しかし、PDFreactorがJavaに依存しているため、.NET環境では、その非ネイティブの性質がデプロイと統合を複雑にする可能性があるという課題があります。 Javaに依存しているため、.NETアプリケーションに余分なオーバーヘッドが発生し、追加の統合作業が必要になることがよくあります。
Javaの依存性の問題
PDFreactorのアーキテクチャは、.NET環境においていくつかの課題を生み出します:
- **Java ランタイムが必要:**すべてのサーバーに JRE/JDK がインストールされている必要があります。
2.**サーバー アーキテクチャ:**追加のインフラストラクチャを必要とする個別のサービスとして実行されます。 サーバーベースのソリューションとして、PDFreactorはすべての変換にREST APIコールを必要とします。
3.**複雑な展開:**主に.NETエコシステムで Java の依存関係を管理すると、セットアップが複雑になり、メンテナンス コストが増加する可能性があります。 CI/CDパイプラインで管理する2つのランタイム(Java + .NET)。
4.プロセス間通信: REST API またはソケット通信により遅延が発生します。 すべてのPDF変換には、サーバーへのHTTPラウンドトリップが必要です。
5.**個別のライセンス管理:**ライセンスはアプリケーションではなくサーバー インスタンスにバインドされます。 Javaサービスインスタンスに関連付けられたサーバーごとのライセンス。
6.**リソースの分離:**プロセス メモリと CPU 管理を分離します。 監視、拡張、保守のための追加サーバー。
PDFreactorとIronPDFの比較
| 特徴/側面 | PDFreactor | IronPDF |
|---|---|---|
| ネイティブ.NETライブラリ | なし(Javaベース) | はい |
| ランタイム | Java(外部サーバー) | .NET ネイティブ(進行中) |
| アーキテクチャ | REST API サービス | NuGetライブラリ |
| デプロイメント | Java + サーバー設定 | 単一のNuGetパッケージ |
| 依存関係について | JRE + HTTPクライアント | 自己完結型 |
| レイテンシーについて | ネットワーク往復 | 直接メソッド呼び出し |
| クロスプラットフォーム対応 | 可(Javaに依存) | はい(バンドルされているChromium) |
| CSSサポート | CSS3、CSS Paged Mediaの高度なサポート | 包括的なHTML5/CSS3のサポート |
| 展開の複雑さ | Javaのため、より複雑 | シンプル、.NETと直接統合 |
| PDF操作の特徴 | 基本(生成のみ) | マージ、分割、編集、注釈を含む広範囲な作業 |
PDFreactorとは対照的に、IronPDFはネイティブ for .NETライブラリであり、Javaのような外部依存なしに.NETプロジェクトにシームレスに統合できるように設計されています。 IronPDFはバンドルされているChromiumレンダリングエンジンを使用しており、わずか数行のコードでHTMLをPDFに変換することができます。
現代の .NET バージョンを採用しているチーム向けに、IronPDF は Java サーバーの複雑さを排除しつつ、包括的な PDF ライフサイクル管理を提供するネイティブ .NET ソリューションを提供します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
#PDFreactoris NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.
# StopPDFreactorWeb Service (Java/Jetty, default port 9423)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf
ライセンス構成
PDFreactor(サーバーベース):。
// License configured on thePDFreactorWeb Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
IronPDF(アプリケーションレベル):。
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";' One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"PDFreactorの使用法を特定する
# FindPDFreactorusage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# FindCSSページングメディアrules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
完全な API リファレンス
名前空間の変更
// Before:PDFreactor(Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
コア クラス マッピング
| PDFreactor | IronPDF |
|---|---|
PDFreactor | ChromePdfRenderer |
Configuration | ChromePdfRenderOptions |
Result | PdfDocument |
config.Document = html | renderer.RenderHtmlAsPdf(html) |
result.Document (byte[]) | pdf.BinaryData |
構成プロパティのマッピング
| PDFreactorの構成 | IronPDF レンダリングオプション |
|---|---|
config.Document = html | renderer.RenderHtmlAsPdf(html) |
config.Document = url | renderer.RenderUrlAsPdf(url) |
config.PageFormat = PageFormat.A4 | RenderingOptions.PaperSize = PdfPaperSize.A4 |
config.PageOrientation | RenderingOptions.PaperOrientation |
config.PageMargins | RenderingOptions.MarginTop/Bottom/Left/Right |
config.EnableJavaScript = true | RenderingOptions.EnableJavaScript = true |
config.UserStyleSheets = new List<Resource>{...} | HTMLにCSSを埋め込む |
config.Title | pdf.MetaData.Title |
config.Encryption | pdf.SecuritySettings |
PDFreactorでは利用できない新機能
| IronPDFの特徴 | 翻訳内容 |
|---|---|
PdfDocument.Merge() | 複数のPDFをマージ |
pdf.ApplyWatermark() | 透かしの追加 |
pdf.ExtractAllText() | テキスト抽出 |
pdf.Form | フォーム入力 |
pdf.Sign() | デジタル署名 |
コード移行の例
例1: HTML文字列からPDFへの変換
翻訳前 (PDFreactor):
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Hello World</h1></body></html>";
Configuration config = new Configuration();
config.Document = html;
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("output.pdf", result.Document);
}
}
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Module基本的な違いは、アーキテクチャ・パターンです。PDFreactorは、PDFreactor インスタンス(Java サーバーに接続)を作成し、設定とHTMLコンテンツを保持するための個別の Configuration オブジェクトを必要とし、Convert() を呼び出し Result オブジェクトを返し、最後に result.Document バイトを File.WriteAllBytes() を使用してファイルに書き込みます。
IronPDF はこれを簡単にし、ChromePdfRenderer を作成し、HTML文字列を直接 RenderHtmlAsPdf() に渡し、返された PdfDocument で組み込みの SaveAs() メソッドを使用します。 サーバー接続、設定オブジェクト、手動でのバイト処理はありません。 包括的な例については、HTML to PDF documentationを参照してください。
例2: URLからPDFへの変換
翻訳前 (PDFreactor):
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End ModulePDFreactor は、HTML文字列とURLの両方に同じ config.Document プロパティを使用し、自動的にタイプを決定します。IronPDFは明示的なメソッドを提供しており、HTML文字列には RenderHtmlAsPdf()、URLには RenderUrlAsPdf() を使用します。 この明示的なアプローチにより、コードの明快さとインテリセンスのサポートが向上します。 詳しくは、チュートリアルをご覧ください。
例3:ページ番号を含むヘッダーとフッター
翻訳前 (PDFreactor):
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
Configuration config = new Configuration();
config.Document = html;
config.UserStyleSheets = new System.Collections.Generic.List<Resource>
{
new Resource { Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }" }
};
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}
翻訳後(IronPDF):。
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header Text"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Header Text"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Moduleこの例は、最も重要な構文の違いを示しています。PDFreactorはCSSページングメディアの構文を @page ルール、@bottom-center 地域、counter(page) を使用して UserStyleSheets リストの Resource アイテムにより注入されたページ番号に使用します。
IronPDF はネイティブ .NET API を使用し、TextHeaderFooter オブジェクトを RenderingOptions.TextHeader と RenderingOptions.TextFooter に割り当てます。 ページ番号は CSS counter(page) の代わりに {page} プレースホルダーを使用します。
重要な移行に関する注意事項
サーバーは必要ありません
IronPDFはインプロセスで動作します。Javaサーバーを設定する必要はありません:
// PDFreactor: Requires the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();' PDFreactor: Requires the Web Service running on a reachable host
Dim pdfReactor = New PDFreactor("http://localhost:9423/service/rest")
' IronPDF: No server URL needed
Dim renderer = New ChromePdfRenderer()CSSページドメディアからIronPDF APIへ
CSS @page ルールを RenderingOptions に置き換えます:
//PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDFequivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};'PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
'IronPDFequivalent:
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}ページ番号プレースホルダーの構文
//PDFreactorCSS: counter(page)
// IronPDF: {page}
//PDFreactorCSS: counter(pages)
// IronPDF: {total-pages}'PDFreactorCSS: counter(page)
' IronPDF: {page}
'PDFreactorCSS: counter(pages)
' IronPDF: {total-pages}結果処理の変更
Configuration + Resultのパターンが直接PdfDocumentになります:
// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);
// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;' PDFreactor: Configuration → Convert → Result → bytes
Dim result As Result = pdfReactor.Convert(config)
Dim bytes As Byte() = result.Document
File.WriteAllBytes("output.pdf", bytes)
' IronPDF: Direct PdfDocument with built-in methods
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or: Dim bytes As Byte() = pdf.BinaryDataマージン単位の変更
PDFreactorは文字列を使用します; IronPDFはミリメートルを使用しています:
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm' PDFreactor: config.PageMargins.Top = "1in"
' IronPDF: renderer.RenderingOptions.MarginTop = 25.4 ' 1 inch in mm移行後の新機能
IronPDFに移行すると、PDFreactorでは提供できない機能が得られます:
PDFマージ
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")ウォーターマーク
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")テキスト抽出
string text = pdf.ExtractAllText();Dim text As String = pdf.ExtractAllText()パスワード保護
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"機能比較の概要
| フィーチャー | PDFreactor | IronPDF |
|---|---|---|
| HTMLからPDFへ | ✓ | ✓ |
| URLからPDFへ | ✓ | ✓ |
| ヘッダー/フッター | CSSページングメディア | ネイティブAPI |
| ページ設定 | ✓ | ✓ |
| JavaScriptサポート | ✓ | ✓ |
| .NET ネイティブ | ✗ | ✓ |
| インプロセス | ✗ | ✓ |
| PDFのマージ | ✗ | ✓ |
| PDFの分割 | ✗ | ✓ |
| 透かし | ✗ | ✓ |
| テキスト抽出 | ✗ | ✓ |
| フォーム入力 | ✗ | ✓ |
| デジタル署名 | ✗ | ✓ |
移行チェックリスト
移行前
- コードベース内のすべてのPDFreactorの使用状況を一覧表示する
- 使用されているすべてのCSSページメディアルールを文書化する
- すべての構成設定(余白、ページサイズ、 JavaScript)をメモします。
- IronPDFライセンス キーの保存を計画する (環境変数を推奨)
- まずはIronPDFの試用ライセンスでテストしてください
パッケージの変更
PDFreactor.dllアセンブリ参照を.csprojから直接削除します -PDFreactorWeb サービス (Java/Jetty) を廃止IronPdfNuGet パッケージをインストールします:dotnet add package IronPdf
コードの変更
- 名前空間のインポートを更新します(
using RealObjects.PDFreactor.Webservice.Client;→using IronPdf;) - ヘッダー/フッター クラス用に
using IronPdf.Rendering;を追加します PDFreactorクラスをChromePdfRendererに置き換えますConfigurationオブジェクトをRenderingOptionsプロパティに変換しますconfig.Document = htmlをrenderer.RenderHtmlAsPdf(html)に置き換えますconfig.Document = urlをrenderer.RenderUrlAsPdf(url)に置き換えますFile.WriteAllBytes(path, result.Document)をpdf.SaveAs(path)に置き換えます- CSS
@pageルールをTextFooterオブジェクトに変換します - ページ番号プレースホルダーを更新します(
counter(page)→{page}) - マージン単位を文字列からミリメートルに変換する
インフラストラクチャの移行
- Javaランタイム要件を削除
- PDFreactorサーバーの廃止
- Docker/デプロイメント構成を更新する
- CI/CDパイプラインを更新する
移行後
- PDF出力の品質が期待に沿うかテスト
- ヘッダー/フッターのレンダリングを確認する
- JavaScriptが使用されている場合は実行を検証する
- 必要に応じて新しい機能(結合、透かし、セキュリティ)を追加します

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。