C#でXFINIUM.PDFからIronPDFへ移行する方法
XFINIUM.PDFは、C#でプログラム的にPDFを作成・編集するための包括的なツールを提供するクロスプラットフォームのPDFライブラリです。 このライブラリは、GeneratorとViewerの2つのエディションを提供していますが、座標ベースのグラフィックス・プログラミングに依存しているため、ドキュメントを多用するアプリケーションを構築する開発チームにとっては大きな課題となります。 すべての要素をピクセル座標を使って手作業で配置しなければならないため、単純な文書のはずが複雑な描画の練習になってしまいます。
このガイドでは、XFINIUM.PDFからIronPDFへの完全な移行経路を、移行を検討している.NET開発者のために、ステップバイステップの説明、コード比較、実用的な例とともに提供します。
なぜXFINIUM.PDFから移行するのか
XFINIUM.PDFは、座標ベースのグラフィックスプログラミングに依存する低レベルのPDFライブラリであり、開発者はページ上のすべての要素を手動で配置することを余儀なくされます。 要件が変わると、このアプローチはメンテナンスの悪夢となります。 開発チームが移行を検討する主な理由は次のとおりです:
HTML サポートなし: XFINIUM.PDF は HTML/CSS を PDF に直接変換できません。 低レベルの描画プリミティブを使用したプログラムによるPDF作成に重点を置いており、広範なHTML-to-PDF機能を必要とするプロジェクトでは十分ではないかもしれません。
座標ベースの API:ページ上のすべての要素に対して、DrawString("text", font, brush, 50, 100) のようなピクセル座標による手動の配置が必要です。
手動フォント管理:フォント オブジェクトは、PdfStandardFont や PdfBrush などのクラスを使用して明示的に作成および管理する必要があります。
CSS スタイルなし:最新の Web スタイルはサポートされていません。 色、フォント、レイアウトは、プログラムのメソッド呼び出しによって手動で処理する必要があります。
JavaScriptレンダリングなし:静的コンテンツのみ。 XFINIUM.PDFは、動的なWebコンテンツのレンダリングやJavaScriptの実行はできません。
複雑なテキスト レイアウト:単純な 1 行テキストを超えるものについては、手動によるテキスト測定と折り返しの計算が必要です。
コミュニティ リソースが限られている:主流のソリューションと比較して、例やチュートリアルなどのコミュニティが提供するリソースが不足しているため、新しいユーザーが使い始めるのが難しくなる可能性があります。
核心的な問題: グラフィックス API 対 HTML
XFINIUM.PDFは、ドキュメントデザイナーではなく、グラフィックプログラマーのように考えることを強制します:
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
' XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50)
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80)
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80)
' ... hundreds of lines for a simple document
IronPDFは使い慣れたHTML/CSSを使用しています:
// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: Declarative HTML
Dim html As String = "<h1>Invoice</h1><p><b>Customer:</b> " & customer.Name & "</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDFとXFINIUM.PDFの比較:機能比較
アーキテクチャの違いを理解することは、技術的な意思決定者が移行への投資を評価するのに役立ちます:
| フィーチャー | XFINIUM.PDF | IronPDF |
|---|---|---|
| HTMLからPDFへ | HTMLのサポートは限定的で、プログラムによるPDF作成に重点を置いています。 | 包括的なサポートによる完全なHTMLからPDFへの変換 |
| コミュニティ&サポート | コミュニティが小さく、利用可能なオンラインリソースが少ない | 広範なドキュメントとチュートリアルを備えた大規模コミュニティ |
| ライセンス | 開発者ベースの商用ライセンス | 商用 |
| クロスプラットフォーム・サポート | 強力なクロスプラットフォーム機能 | クロスプラットフォームにも対応 |
| CSSサポート | なし | 完全なCSS3 |
| JavaScript(JavaScript | なし | フルES2024 |
| フレックスボックス/グリッド | なし | はい |
| 自動レイアウト。 | なし | はい |
| 自動改ページ | なし | はい |
| マニュアルポジショニング | 必須 | オプション(CSSポジショニング) |
| ラーニングカーブ | 高(座標系) | 低レベル(HTML/CSS) |
| コードの正確さ | 非常に高い | 低レベル |
クイックスタート:XFINIUM.PDFからIronPDFへの移行
これらの基本的なステップを踏めば、すぐにでも移行を開始できます。
ステップ 1: NuGet パッケージを置き換える
XFINIUM.PDFを削除してください:
# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
IronPDFをインストールします:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
ステップ 2: 名前空間の更新
XFINIUM.PDF名前空間をIronPdf名前空間に置き換えてください:
// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;
// After (IronPDF)
using IronPdf;
// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;
// After (IronPDF)
using IronPdf;
Imports IronPdf
ステップ 3: ライセンスの初期化
アプリケーション起動時のライセンス初期化を追加します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
コード移行の例
HTML を PDF に変換する
最も基本的な操作は、これら for .NET PDFライブラリの複雑さの違いを明らかにします。
XFINIUM.PDFのアプローチ:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfFlowDocument flowDocument = new PdfFlowDocument();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
PdfFlowContent content = new PdfFlowContent();
content.AppendHtml(html);
flowDocument.AddContent(content);
flowDocument.RenderDocument(document);
document.Save("output.pdf");
}
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfFlowDocument flowDocument = new PdfFlowDocument();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
PdfFlowContent content = new PdfFlowContent();
content.AppendHtml(html);
flowDocument.AddContent(content);
flowDocument.RenderDocument(document);
document.Save("output.pdf");
}
}
Imports Xfinium.Pdf
Imports Xfinium.Pdf.Actions
Imports Xfinium.Pdf.FlowDocument
Imports System.IO
Module Program
Sub Main()
Dim document As New PdfFixedDocument()
Dim flowDocument As New PdfFlowDocument()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim content As New PdfFlowContent()
content.AppendHtml(html)
flowDocument.AddContent(content)
flowDocument.RenderDocument(document)
document.Save("output.pdf")
End Sub
End Module
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
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 = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
XFINIUM.PDF では、PdfFlowContent オブジェクトを作成し、AppendHtml() を呼び出し、フロー ドキュメントにコンテンツを追加し、固定ドキュメントにレンダリングして、最後に保存する必要があります。 IronPDFはこれを3行に単純化します: レンダラーを作成し、HTMLをレンダリングし、保存します。
高度なHTMLからPDFへのシナリオについては、HTMLからPDFへの変換ガイドをご覧ください。
複数のPDFをマージする
PDFマージは、APIの複雑さの違いを明確に示します。
XFINIUM.PDFのアプローチ:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument output = new PdfFixedDocument();
FileStream file1 = File.OpenRead("document1.pdf");
PdfFixedDocument pdf1 = new PdfFixedDocument(file1);
FileStream file2 = File.OpenRead("document2.pdf");
PdfFixedDocument pdf2 = new PdfFixedDocument(file2);
for (int i = 0; i < pdf1.Pages.Count; i++)
{
output.Pages.Add(pdf1.Pages[i]);
}
for (int i = 0; i < pdf2.Pages.Count; i++)
{
output.Pages.Add(pdf2.Pages[i]);
}
output.Save("merged.pdf");
file1.Close();
file2.Close();
}
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument output = new PdfFixedDocument();
FileStream file1 = File.OpenRead("document1.pdf");
PdfFixedDocument pdf1 = new PdfFixedDocument(file1);
FileStream file2 = File.OpenRead("document2.pdf");
PdfFixedDocument pdf2 = new PdfFixedDocument(file2);
for (int i = 0; i < pdf1.Pages.Count; i++)
{
output.Pages.Add(pdf1.Pages[i]);
}
for (int i = 0; i < pdf2.Pages.Count; i++)
{
output.Pages.Add(pdf2.Pages[i]);
}
output.Save("merged.pdf");
file1.Close();
file2.Close();
}
}
Imports Xfinium.Pdf
Imports System.IO
Module Program
Sub Main()
Dim output As New PdfFixedDocument()
Dim file1 As FileStream = File.OpenRead("document1.pdf")
Dim pdf1 As New PdfFixedDocument(file1)
Dim file2 As FileStream = File.OpenRead("document2.pdf")
Dim pdf2 As New PdfFixedDocument(file2)
For i As Integer = 0 To pdf1.Pages.Count - 1
output.Pages.Add(pdf1.Pages(i))
Next
For i As Integer = 0 To pdf2.Pages.Count - 1
output.Pages.Add(pdf2.Pages(i))
Next
output.Save("merged.pdf")
file1.Close()
file2.Close()
End Sub
End Module
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
XFINIUM.PDFは、出力文書を作成し、ファイルストリームを開き、各文書を読み込み、手動でページを繰り返し、1つずつ追加し、保存し、ストリームを閉じる必要があります。IronPDFは、すべての複雑さを内部で処理する単一の PdfDocument.Merge() メソッドを提供します。
その他のマージ オプションについては、PDF マージ ドキュメントを参照してください。
テキストと画像でPDFを作成する
内容が混在する文書は、基本的なパラダイムの違いを示しています。
XFINIUM.PDFのアプローチ:
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Black);
page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);
FileStream imageStream = File.OpenRead("image.jpg");
PdfJpegImage image = new PdfJpegImage(imageStream);
page.Graphics.DrawImage(image, 50, 100, 200, 150);
imageStream.Close();
document.Save("output.pdf");
}
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;
class Program
{
static void Main()
{
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
PdfBrush brush = new PdfBrush(PdfRgbColor.Black);
page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);
FileStream imageStream = File.OpenRead("image.jpg");
PdfJpegImage image = new PdfJpegImage(imageStream);
page.Graphics.DrawImage(image, 50, 100, 200, 150);
imageStream.Close();
document.Save("output.pdf");
}
}
Imports Xfinium.Pdf
Imports Xfinium.Pdf.Graphics
Imports Xfinium.Pdf.Core
Imports System.IO
Class Program
Shared Sub Main()
Dim document As New PdfFixedDocument()
Dim page As PdfPage = document.Pages.Add()
Dim font As New PdfStandardFont(PdfStandardFontFace.Helvetica, 24)
Dim brush As New PdfBrush(PdfRgbColor.Black)
page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50)
Dim imageStream As FileStream = File.OpenRead("image.jpg")
Dim image As New PdfJpegImage(imageStream)
page.Graphics.DrawImage(image, 50, 100, 200, 150)
imageStream.Close()
document.Save("output.pdf")
End Sub
End Class
IronPDFのアプローチ:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
string html = $@"
<html>
<body>
<h1>Sample PDF Document</h1>
<img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
string html = $@"
<html>
<body>
<h1>Sample PDF Document</h1>
<img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim imageBase64 As String = Convert.ToBase64String(File.ReadAllBytes("image.jpg"))
Dim html As String = $"
<html>
<body>
<h1>Sample PDF Document</h1>
<img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
XFINIUM.PDF では、ドキュメントの作成、ページの追加、フォントおよびブラシ オブジェクトの作成、特定の座標でのテキストの描画、イメージ ストリームのオープン、PdfJpegImage の作成、寸法のある座標でのイメージの描画、ストリームの閉じ、および保存が必要です。 IronPDFはbase64画像を埋め込んだ標準的なHTMLを使用しています。
XFINIUM.PDFAPIからIronPDFへのマッピングリファレンス
このマッピングは、APIと同等のものを直接示すことで、移行を加速します:
| XFINIUM.PDF | IronPDF |
|---|---|
PdfFixedDocument |
ChromePdfRenderer |
PdfPage |
自動翻訳 |
page.Graphics.DrawString() |
HTMLテキスト要素 |
page.Graphics.DrawImage() |
<img> タグ |
page.Graphics.DrawLine() |
CSS border または <hr> |
page.Graphics.DrawRectangle() |
CSS border および <div> |
PdfStandardFont |
CSS font-family |
PdfRgbColor |
CSS color |
PdfBrush |
CSSプロパティ |
PdfJpegImage |
<img> base64 のタグ |
document.Save(stream) |
pdf.SaveAs() または pdf.BinaryData |
PdfFlowDocument |
RenderHtmlAsPdf() |
PdfFlowContent.AppendHtml() |
RenderHtmlAsPdf() |
一般的な移行の問題と解決策
課題1: 座標ベースのレイアウト
XFINIUM.PDF:すべて正確なX,Y座標が必要で、手動での位置決めが必要です。
ソリューション: HTML/CSSフローレイアウトを使用する。 絶対位置指定が必要な場合は、CSSを使用してください:
.positioned-element {
position: absolute;
top: 100px;
left: 50px;
}
課題2:フォントオブジェクト管理
XFINIUM.PDF:各フォントに対して PdfStandardFont または PdfUnicodeTrueTypeFont オブジェクトを作成します。
ソリューション: CSS font-familyを使用してください:
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
課題3: カラーハンドリング
XFINIUM.PDF:色用の PdfRgbColor および PdfBrush オブジェクトを作成します。
解決策:標準的なCSSの色を使用する:
.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }
課題4:マニュアルの改ページ
XFINIUM.PDF:Y位置を追跡し、コンテンツがオーバーフローしたときに手動で新しいページを作成します。
ソリューション: IronPDFは自動改ページを処理します。 明示的な制御にはCSSを使用してください:
.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }
課題5:画像の読み込み
XFINIUM.PDF:ファイル ストリームを開き、PdfJpegImage オブジェクトを作成し、座標に描画し、ストリームを閉じます。
解決策:ファイル パスまたは base64 データを含む HTML <img> タグを使用します。
<img src="image.jpg" width="200" height="150" />
<img src="data:image/jpeg;base64,..." />
<img src="image.jpg" width="200" height="150" />
<img src="data:image/jpeg;base64,..." />
XFINIUM.PDF移行チェックリスト
マイグレーション前のタスク
コードベースを監査して、すべてのXFINIUM.PDFの使用法を特定してください:
grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
座標ベースのレイアウトを文書化し、すべてのX,Y位置決め値に注意してください。 フォントおよびカラー オブジェクトを識別します (PdfBrush)。 PdfFixedDocument.Pages.Add() を使用して、結合された PDF ワークフローをマップします。
コード更新タスク
1.Xfinium.Pdf NuGet パッケージの削除 2.IronPdf NuGetパッケージをインストールする
- 名前空間のインポートを
Xfinium.PdfからIronPdfに更新します。 DrawString()呼び出しを HTML テキスト要素に変換するDrawImage()呼び出しを HTML<img>タグに変換するDrawRectangle()とDrawLine()を CSS ボーダーに変換するPdfStandardFontを CSSfont-familyに置き換えます。PdfRgbColorとPdfBrushを CSS カラーに置き換えます。- ページループのマージを
PdfDocument.Merge()に置き換えます 10.起動時にIronPDFライセンスの初期化を追加する
移行後のテスト
移行後、これらの点を検証してください:
- ビジュアル出力を比較し、外観が期待に一致することを確認する。
- 新しいHTML/CSSアプローチによるテキストレンダリングの検証
- CSSを使用した画像ポジショニングのチェック
- 期待どおりに改ページが行われることを確認
- PDFのセキュリティ設定が正しく適用されていることを確認する
- すべてのターゲットプラットフォームでテスト
IronPDFに移行する主な利点
XFINIUM.PDFからIronPDFに移行することで、いくつかの重要な利点が得られます:
HTML ベースのコンテンツ作成: Web 開発者は既存の HTML および CSS スキルを活用できます。 座標ベースの描画APIを学んだり、フォントやブラシのオブジェクトを管理したりする必要はありません。
自動レイアウト:テキストの折り返し、ページ区切り、フローレイアウトが自動的に行われます。 要素の位置や改ページを手動で計算する必要はありません。
最新の CSS サポート: Flexbox およびグリッド レイアウトを含む完全な CSS3。 レスポンシブデザインはPDFに直接翻訳します。
簡素化された PDF 操作: PdfDocument.Merge() などの一般的な操作に対する単一メソッド呼び出しが、複雑なページ反復ループに取って代わります。
積極的な開発: .NET 10 と C# 14 の採用が 2026 年まで増加するにつれて、IronPDF の定期的な更新により、現在のおよび将来 for .NETバージョンとの互換性が確保されます。
広範なドキュメント: XFINIUM.PDF の小規模なエコシステムと比較して、包括的なドキュメント、チュートリアル、サポート リソースを備えた大規模なコミュニティです。

