IRONSOFTWAREHOME
ビデオ

How to Rotate Text in PDFs Using C#

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

GemBox.PdfからIronPDFへの移行により、.NET PDFワークフローが座標ベースのプログラム的なドキュメント構築から、最新のHTML/CSSベースのレンダリングに変わります。 このガイドは、2ページのフリーモード制限を解除し、プロ for .NET開発者向けにドキュメント作成を簡素化する包括的なステップバイステップの移行パスを提供します。

なぜGemBox.PdfからIronPDFに移行するのか

GemBox.Pdfの課題

GemBox.Pdfは有能な.NET PDFコンポーネントですが、実際の開発において考慮すべき制限があります:

  1. 2ページのフリーモード制限: 無料バージョンでは2ページを超えるPDFを読み込みまたは保存する場合、FreeLimitReachedExceptionがスローされるため、1ページの領収書または2ページの請求書を超えるものには、有料ライセンスが必要です。 (Source: gemboxsoftware.com/pdf/free-version.)

  2. HTMLからPDFへの変換不可: GemBox.PdfはHTMLをレンダリングできません— PdfDocument.Load は既存のPDFファイルを開くだけです。 HTMLをPDFに変換するには、別のGemBox.Document製品を購入する必要があります(異なるSKU、異なるライセンス)。

  3. 座標ベースのレイアウト: GemBox.Pdfは低レベルのPDFコンテンツストリームAPIです。 テキストを配置するには、PDFユーザースペース単位でX/Yを計算し、page.Content.DrawText(formattedText, new PdfPoint(x, y))を呼び出します。 フローレイアウトはありません。

  4. OfficeからPDFへの変換には他のSKUが必要: Word→PDFにはGemBox.Documentが、Excel→PDFにはGemBox.Spreadsheetがそれぞれ必要で、個別のライセンスが必要です; GemBox.Bundleはそれらすべてをカバーしますが、コストが高くなります。

5.**プログラムのみ:**設計を変更するたびにコードの変更が必要になります。 スペースを調整しますか? 座標を再計算します。 フォントサイズを変更しますか?それ以下のY位置を調整します。

  1. 商業ライセンス価格: 個別開発者ライセンスは$890(更新$534)、小チーム(10人の開発者)は$4,450、大チーム(50人の開発者)は$13,350です。(出典:gemboxsoftware.com/pdf/pricing.)

  2. デザインの習得曲線: 開発者はドキュメントフローではなく座標で考えなければならないため、"段落を追加"するような単純なタスクでも意外に手間がかかります。

GemBox.Pdf対IronPDFの比較

アスペクトGemBox.PdfIronPDF
無料版の制限2ページの最大(FreeLimitReachedException)ウォーターマークのみ、ページ制限なし
HTMLからPDFへサポートなし(GemBox.Documentが必要)フルChromiumエンジン
Word/Excel → PDF別のSKU(GemBox.Document / GemBox.Spreadsheet)HTMLパイプライン経由でレンダリング
レイアウトアプローチ座標ベース、マニュアルHTML/CSSフローレイアウト
モダンCSS該当なしFlexbox、グリッド、CSS3アニメーション
JavaScriptサポート該当なし完全なJavaScriptの実行
デザインの変更座標の再計算HTML/CSSの編集
学習曲線PDF座標系HTML/CSS(ウェブに精通している)

IronPDFは、現代 for .NET上でPDFを生成するために、なじみのあるWeb技術を活用します。


マイグレーションの複雑さの評価

機能別の見積もり作業

フィーチャー移行の複雑さ
PDFの読み込み/保存低レベル
PDFのマージ低レベル
PDFの分割低レベル
テキスト抽出低レベル
テキストの追加中規模
低レベル
画像低レベル
透かし低レベル
パスワード保護中規模
フォームフィールド中規模

パラダイムシフト

このGemBox.Pdfの移行における最大の変化は、座標ベースのレイアウトからHTML/CSSレイアウトに移行することです:

GemBox.Pdf: "位置(100, 700)にテキストを描画"
IronPDF:     "CSSスタイリングでこのHTMLをレンダリングする"
Text

このパラダイムシフトは、ウェブ技術に精通した開発者にとっては一般的に容易ですが、PDFについては別の考え方が必要です。


始める前に

前提条件

  1. .NETバージョン: IronPDFは.NET Framework 4.6.2+および.NET Core 2.0+ / .NET 5+をサポートしています。 2.ライセンスキー: IronPDFからIronPDFライセンスキーを取得します。 3.**バックアップ:**移行作業用のブランチを作成する
  2. **HTML/CSSの知識:**基本的な知識があれば役立ちますが、必須ではありません

すべてのGemBox.Pdfの使用を特定する

# Find all GemBox.Pdf references
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .

# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
SHELL

NuGetパッケージの変更

# Remove GemBox.Pdf
dotnet remove package GemBox.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

クイック スタート マイグレーション

ステップ 1: ライセンス構成の更新

前(GemBox.Pdf):

// Must call before any GemBox.Pdf operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");

翻訳後(IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }

ステップ 2: 名前空間インポートを更新する

// Before (GemBox.Pdf)
using GemBox.Pdf;
using GemBox.Pdf.Content;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;

ステップ 3: 基本的な変換パターン

前(GemBox.Pdf):

using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    // PdfFormattedText has no Text property; use Append/AppendLine.
    var formattedText = new PdfFormattedText();
    formattedText.FontSize = 24;
    formattedText.Append("Hello World");

    page.Content.DrawText(formattedText, new PdfPoint(100, 700));
    document.Save("output.pdf");
}

翻訳後(IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");

主な違い:

  • 座標計算不要
  • プログラムレイアウトの代わりにHTML/CSS
  • 2ページのフリーモード天井なし
  • よりシンプルで読みやすいコード

完全な API リファレンス

名前空間マッピング

GemBox.PdfIronPDF
GemBox.PdfIronPdf
GemBox.Pdf.ContentIronPdf (コンテンツはHTMLです)
GemBox.Pdf.SecurityIronPdf (セキュリティ設定)
GemBox.Pdf.FormsIronPdf.Forms

コア クラス マッピング

GemBox.PdfIronPDF翻訳内容
PdfDocumentPdfDocument主なPDF文書クラス
PdfPagePdfDocument.Pages[i]ページ表現
PdfContent該当なし(HTMLを使用)ページ内容
PdfFormattedText該当なし(HTMLを使用)書式付きテキスト
PdfPoint該当なし(CSSポジショニングを使用)ポジショニング
ComponentInfo.SetLicense()IronPdf.License.LicenseKeyライセンス管理

ドキュメント操作

GemBox.PdfIronPDF
new PdfDocument()new PdfDocument()
PdfDocument.Load(path)PdfDocument.FromFile(path)
PdfDocument.Load(stream)PdfDocument.FromStream(stream)
document.Save(path)pdf.SaveAs(path)
document.Save(stream)pdf.BinaryData (返す値はbyte[]です)

ページ操作

GemBox.PdfIronPDF
document.Pages.Add()HTMLレンダリングによる作成
document.Pages.Countpdf.PageCount
document.Pages[index]pdf.Pages[index]
document.Pages.AddClone(pages)PdfDocument.Merge()

テキストとコンテンツの操作

GemBox.PdfIronPDF
new PdfFormattedText()HTML文字列
formattedText.Append(text)HTMLに含める
formattedText.AppendLine(text)HTMLに含める
formattedText.FontSize = 12CSS font-size: 12pt
formattedText.Font = ...CSS font-family: ...
page.Content.DrawText(text, point)renderer.RenderHtmlAsPdf(html)
page.Content.GetText()pdf.ExtractTextFromPage(i)

コード移行の例

例1: HTMLからPDFへの変換

前(GemBox.Pdf)—GemBox.Pdfではサポートされていません; 別のGemBox.Document SKUが必要です:

// NuGet: Install-Package GemBox.Document
// NOTE: GemBox.Pdf does NOT support HTML-to-PDF. PdfDocument.Load only opens
// existing PDF files. To convert HTML to PDF you must use the separate
// GemBox.Document product (different SKU, different license).
using GemBox.Document;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        // GemBox.Document loads HTML and saves as PDF.
        var document = DocumentModel.Load("input.html");
        document.Save("output.pdf");
    }
}

翻訳後(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");
    }
}

IronPDFのChromePdfRendererは、HTML/CSS/JavaScriptレンダリングにモダンなChromiumエンジンを使用しているため、1つのNuGetパッケージでHTMLからPDFへの変換が直接カバーされ、別のSKUは必要ありません。 レンダリングオプションについては、HTML to PDF documentationを参照してください。

例2: PDFファイルをマージする

前(GemBox.Pdf):

// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");
        
        using (var document = new PdfDocument())
        {
            var source1 = PdfDocument.Load("document1.pdf");
            var source2 = PdfDocument.Load("document2.pdf");
            
            document.Pages.AddClone(source1.Pages);
            document.Pages.AddClone(source2.Pages);
            
            document.Save("merged.pdf");
        }
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

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");
    }
}

IronPDFの静的Mergeメソッドは操作を簡素化します—空のドキュメントを作成してページを個別にクローンする必要はありません。 PDFのマージと分割については、こちらをご覧ください。

例3: PDFにテキストを追加する

前(GemBox.Pdf):

// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;

class Program
{
    static void Main()
    {
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        using (var document = new PdfDocument())
        {
            var page = document.Pages.Add();
            // PdfFormattedText has no Text property; use Append/AppendLine.
            var formattedText = new PdfFormattedText();
            formattedText.FontSize = 24;
            formattedText.Append("Hello World");

            page.Content.DrawText(formattedText, new PdfPoint(100, 700));
            document.Save("output.pdf");
        }
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");
        
        var stamper = new TextStamper()
        {
            Text = "Hello World",
            FontSize = 24,
            HorizontalOffset = 100,
            VerticalOffset = 700
        };
        
        pdf.ApplyStamp(stamper);
        pdf.SaveAs("output.pdf");
    }
}

既存のPDFにテキストを追加するために、IronPDFは正確な位置制御を提供するTextStamperクラスを提供しています。 新しいドキュメントの場合は、HTMLテンプレートにテキストを含めるだけです。 追加オプションについては、スタンプのドキュメントを参照してください。

例4: テーブルの作成 (最大の改善点!)

前(GemBox.Pdf)—フリーモードでは2ページに制限された座標ベースのレイアウト:

using GemBox.Pdf;
using GemBox.Pdf.Content;

ComponentInfo.SetLicense("FREE-LIMITED-KEY");

using (var document = new PdfDocument())
{
    var page = document.Pages.Add();
    double y = 700;
    double[] xPositions = { 50, 200, 300, 400 };

    // Headers
    var headers = new[] { "Product", "Price", "Qty", "Total" };
    for (int i = 0; i < headers.Length; i++)
    {
        var text = new PdfFormattedText();
        text.FontSize = 12;
        text.Append(headers[i]);
        page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
    }
    y -= 20;

    // Data rows — each row requires manual Y advancement,
    // and free mode caps the saved file at 2 pages total.

    document.Save("products.pdf");
}

後(IronPDF)—ページ制限なし、適切なHTMLテーブル:

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var html = @"
    <html>
    <head>
        <style>
            table { border-collapse: collapse; width: 100%; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #4CAF50; color: white; }
            tr:nth-child(even) { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Price</th>
                    <th>Qty</th>
                    <th>Total</th>
                </tr>
            </thead>
            <tbody>
                <tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
                <tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
                <!-- Add hundreds or thousands of rows - no limit! -->
            </tbody>
        </table>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
C#

これはGemBox.Pdfの移行における最も重要な改善です。 フリーモードのGemBox.Pdfドキュメントを2ページ制限を超えてレンダリングするテーブルは、IronPDFでその制限なしにCSSスタイリングサポートでレンダリングされます。


重要な移行に関する注意事項

CSSポジショニングへの調整

ピクセルパーフェクトのポジショニング(GemBox.Pdfの座標系に似ている)を必要とする場合、CSS絶対ポジショニングを使用してください:

<div style="position:absolute; left:50px; top:750px; font-size:24px;">
    Text positioned at specific coordinates
</div>
HTML

ページ索引

GemBox.PdfとIronPDFのどちらも0インデックスのページを使用しているため、この移行の側面は簡単です:

// GemBox.Pdf
var page = document.Pages[0];

// IronPDF
var page = pdf.Pages[0];

セキュリティ設定

// GemBox.Pdf
var encryption = document.SaveOptions.SetPasswordEncryption();
encryption.DocumentOpenPassword = "userPassword";
encryption.PermissionsPassword = "ownerPassword";

// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";

トラブルシューティング

問題 1: PdfFormattedText が見つかりません

問題: IronPDFにはPdfFormattedTextが存在しません。

解決策: CSS スタイルを使用した HTML を使用する:

// GemBox.Pdf
var text = new PdfFormattedText();
text.FontSize = 24;
text.Append("Hello");

// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);

問題 2: DrawText メソッドが見つかりません

問題: page.Content.DrawText()は利用できません。

解決策: HTML レンダリングでコンテンツを作成するか、スタンパーを使用します。

// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);

課題3:ドキュメントの読み込みの違い

問題: PdfDocument.Load()が見つかりません。

解決策: FromStream()を使用します:

// GemBox.Pdf
var doc = PdfDocument.Load("input.pdf");

// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");

課題4:保存メソッドの違い

問題: document.Save()メソッドのシグネチャが異なります。

解決策: SaveAs()を使用してください:

// GemBox.Pdf
document.Save("output.pdf");

// IronPDF
pdf.SaveAs("output.pdf");

移行チェックリスト

移行前

  • コードベース内のすべてのGemBox.Pdfの使用をインベントリします
  • HTML 変換が必要な座標ベースのレイアウトを識別する
  • どこで2ページのフリーモード制限がコードに影響を与えるかを評価します
  • IronPDFライセンスキーを取得する
  • バージョン管理に移行ブランチを作成する

コードの移行

  • GemBox.PdfのNuGetパッケージを削除します: dotnet remove package GemBox.Pdf
  • IronPDFのNuGetパッケージをインストールします: dotnet add package IronPdf
  • 名前空間のインポートを更新する
  • IronPdf.License.LicenseKeyに置き換えます
  • PdfDocument.FromFile()に変換します
  • pdf.SaveAs()に変換します
  • 座標ベースのテキストをHTMLコンテンツに置き換える
  • PdfFormattedTextをCSSスタイリングを使用してHTMLに変換します
  • マージ操作をPdfDocument.Merge()を使用するように更新します

テスティング

  • すべてのドキュメントが正しく生成されたことを確認する
  • ドキュメントの外観が期待どおりであることを検証する
  • マルチページ出力をテストします(以前はフリーモードで2ページに制限されていました)
  • テキスト抽出が正しく機能していることを確認する
  • マージと分割操作をテストする
  • セキュリティ/暗号化機能の検証

移行後

  • GemBox.Pdfライセンスキーを削除します
  • ドキュメントの更新
  • PDF の HTML/CSS アプローチについてチームをトレーニングする
  • フリーモード制限なしに無制限のページカウントを楽しんでください!

ご注意: GemBox.Pdfはその所有者の登録商標です。 このサイトは、GemBox Software Ltd.とは提携しておらず、承認されておらず、スポンサーされていません。すべての製品名、ロゴ、およびブランドはそれぞれの所有者に帰属します。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。
Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。