チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»pdfnetdocumentoperation

Displaying items by tag: pdfnetdocumentoperation

ASP.NET および ASP.NET Core における PDF 生成チュートリアルの概要図

多くの Web アプリケーションにおいて、PDF ファイルは単なるダウンロード用の添付ファイルではありません。請求書、財務レポート、契約書、証明書、あるいは異なるデバイス間でもレイアウトを維持する必要のあるデータ出力など、PDF は業務フローの最終成果物として重要な役割を果たします。

ASP.NET 開発者にとって、サーバーサイドで PDF を直接生成することは非常に一般的な要件です。 従来の ASP.NET MVC アプリケーションを保守している場合でも、最新の ASP.NET Core サービスを構築している場合でも、コードによって PDF を生成することで、ドキュメントの構造・レイアウト・印刷結果を一貫して制御できます。

しかし、実際の開発現場では、ASP.NET における PDF 生成は必ずしも「すぐに使える」ものではなく、次のような課題に直面することが少なくありません。

  • ドキュメントのレイアウトや改ページを正確に制御したい
  • 日本語を含むテキストやフォントを正しく扱いたい
  • 生成した PDF を効率よくブラウザへ返却したい
  • ASP.NET FrameworkASP.NET Core の両方に対応したい

本記事では、これらの課題を踏まえつつ、Spire.PDF for .NET を使用して、ASP.NET および ASP.NET Core 環境で C# による PDF 生成を行う実践的な方法を体系的に解説します。MVC や Web API といった一般的なプロジェクト構成にも対応しており、実務にそのまま適用できる内容となっています。

この記事を読み終える頃には、ASP.NET における PDF 生成の仕組みを明確に理解し、実際の業務システムへスムーズに組み込めるようになるでしょう。

クイックナビゲーション

1. ASP.NET PDF 生成の環境準備

ASP.NET または ASP.NET Core プロジェクトで PDF 生成を開始する前に、まず開発環境が正しく構成されていることを確認する必要があります。適切な環境設定を行うことで、実行時エラーや互換性の問題を未然に防ぐことができます。

1.1 .NET SDK の要件

  • ASP.NET Framework プロジェクトのターゲット フレームワークは .NET Framework 4.6.1 以上である必要があります。

  • ASP.NET Core プロジェクト要件に応じて .NET 6 または .NET 7 SDK をインストールしてください。

  • インストール済みの SDK バージョンは、次のコマンドで確認できます。

dotnet --version

1.2 Spire.PDF for .NET のインストール

PDF を生成するには、プロジェクトと互換性のある PDF ライブラリが必要です。Spire.PDF for .NET は、ASP.NET Framework と ASP.NET Core の両方をサポートする実績あるライブラリです。

  • Visual Studio で NuGet を使用してインストールする場合:
Install-Package Spire.PDF

または、直接Spire.PDF for .NET をダウンロードして手動で追加することもできます。

  • インストール後、プロジェクト内で Spire.Pdf.dll が正しく参照されていることを確認してください。

1.3 プロジェクトテンプレートに関する注意点

  • ASP.NET Framework

    • MVC または Web Forms プロジェクトを使用するのがおすすめです
    • System.Web など必要なアセンブリが参照されていることを確認してください
  • ASP.NET Core

    • MVC または Web API プロジェクトを使用できます
    • 必要に応じてサービスやミドルウェアを構成します

また、PDF をファイルとして保存する場合は、実行環境に書き込み権限があること、および日本語表示に必要なフォントが利用可能であることも確認しておきましょう。

2. ASP.NET Framework で C# を使って PDF を作成する

本章では、ASP.NET Framework アプリケーションにおいて C# を使用して PDF ファイルを生成する方法を紹介します。従来型の ASP.NET Web Forms および ASP.NET MVC プロジェクトのいずれにも適用可能です。

2.1 ASP.NET でシンプルな PDF を作成する

ASP.NET で PDF を生成する基本的な流れは次のとおりです。

  • PdfDocument オブジェクトを作成する
  • ページを追加し、テキストや図形などの内容を描画する
  • PdfDocument.SaveToFile() でファイルとして保存、またはクライアントへ返却する

以下は、PDF を作成してサーバー側に保存するシンプルな例です。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();

// 日本語表示に対応したフォント(Yu Gothic UI)を指定
PdfTrueTypeFont font = new PdfTrueTypeFont(
    new Font("Yu Gothic UI", 12f, FontStyle.Regular),
    true
);

page.Canvas.DrawString(
    "本 PDF は、業務システムにより自動生成されたレポートです。",
    font,
    PdfBrushes.Black,
    new PointF(40, 40)
);

// サーバー上に保存
document.SaveToFile(Server.MapPath("~/Output/Sample.pdf"));
document.Close();

この例では、ASP.NET 環境における PDF 生成の基本的な仕組みを示しています。PDF のページ構成、テキスト内容、配置位置はすべてコードで制御されているため、業務要件に応じてレイアウトを柔軟に調整できます。

必要に応じて、テキストだけでなく、表や画像を追加することで、請求書・帳票・報告書など、実用的な PDF ドキュメントを構築できます。

※ PDF に画像を挿入する方法については、次のチュートリアルを参照してください: C# を使用して PDF に画像を追加する方法

2.2 ASP.NET MVC で PDF を生成する

ASP.NET MVC プロジェクトでは、PDF は通常 Controller の Action メソッド内で生成され、 そのままブラウザへ返却されます。これにより、PDF を一時ファイルとして保存せず、オンライン表示やダウンロードを実現できます。

以下は、MVC コントローラーから PDF を返却する一般的な実装例です。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;
using System.Web.Mvc;

namespace WebApplication.Controllers
{
    public class DefaultController : Controller
    {
        public ActionResult GeneratePdf()
        {
            using (PdfDocument document = new PdfDocument())
            {
                PdfPageBase page = document.Pages.Add();

                PdfTrueTypeFont font = new PdfTrueTypeFont(
                    new Font("Yu Gothic UI", 12f, FontStyle.Regular),
                    true
                );

                page.Canvas.DrawString(
                    "ASP.NET MVC で生成された業務用 PDF ドキュメントです。",
                    font,
                    PdfBrushes.Black,
                    new PointF(40, 40)
                );

                // メモリストリームに保存してブラウザへ返却
                using (MemoryStream stream = new MemoryStream())
                {
                    document.SaveToStream(stream);

                    return File(
                        stream.ToArray(),
                        "application/pdf",
                        "MvcSample.pdf"
                    );
                }
            }
        }
    }
}

生成された PDF の表示例は次のとおりです。

ASP.NET MVC で C# を使って PDF を生成した例

MVC プロジェクトにおける実践的なポイント

  • Controller から FileResult を直接返却することで、PDF を最終レスポンスとして扱えます
  • 一時的に生成する PDF の場合、ローカルファイルではなく MemoryStream を使用することで、ディスク I/O を削減できます
  • PDF サイズが大きい場合や同時アクセス数が多い場合は、メモリ使用量を考慮した設計が必要です
  • この方式は、ユーザー操作に応じて即時生成される帳票(売上レポート、請求書のダウンロードなど)に適しています

ヒント:ブラウザ上で PDF を直接プレビューしたい場合は、Spire.PDFViewer for ASP.NET を使用すると、Web ページ内で PDF を表示できます。

3. ASP.NET Core アプリケーションで PDF を生成する

ASP.NET Core で PDF を生成する際、基本的な API の使い方は ASP.NET Framework とほぼ同じですが、ファイルの返却方法・パスの扱い・実行環境の前提条件には明確な違いがあります。

たとえば、ASP.NET Core では System.Web に依存せず、物理パスへの直接出力も推奨されていません。そのため、PDF は ストリーム(Stream)ベースで生成・返却する実装が一般的です。

本章では、ASP.NET Core MVC および ASP.NET Core Web API プロジェクトにおいて、C# を使って PDF を生成し、クライアントへ返却する方法を具体例とともに解説します。この方式は、クロスプラットフォーム環境やクラウド/コンテナ環境との親和性も高いのが特徴です。

3.1 ASP.NET Core MVC アプリで PDF を生成する

ASP.NET Core MVC では、PDF は Controller の Action メソッド内で生成され、ファイルレスポンスとしてそのまま返却されるのが一般的です。

以下の例では、ASP.NET Core Web App(MVC)プロジェクトを作成し、Controllers フォルダーに PdfController を追加して PDF を生成します。

using Microsoft.AspNetCore.Mvc;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

namespace CoreWebApplication.Controllers
{
    public class PdfController : Controller
    {
        public IActionResult CreatePdf()
        {
            using (PdfDocument document = new PdfDocument())
            {
                PdfPageBase page = document.Pages.Add();

                PdfTrueTypeFont font = new PdfTrueTypeFont(
                    new Font("Yu Gothic UI", 14f, FontStyle.Bold),
                    true
                );

                page.Canvas.DrawString(
                    "ASP.NET Core で生成された業務レポート(PDF)です。",
                    font,
                    PdfBrushes.DarkRed,
                    new PointF(40, 40)
                );

                using (MemoryStream stream = new MemoryStream())
                {
                    document.SaveToStream(stream);

                    return File(
                        stream.ToArray(),
                        "application/pdf",
                        "AspNetCoreSample.pdf"
                    );
                }
            }
        }
    }
}

生成される PDF の表示例は次のとおりです。

ASP.NET Core MVC で C# を使用して PDF を生成した例

ASP.NET Framework との主な違い

  • Server.MapPath のようなサーバーパス変換 API は使用しません
  • PDF は物理ファイルではなく、メモリ上のストリームとして生成・返却するのが基本です
  • 無状態(ステートレス)な Web アーキテクチャと相性が良く、Docker やクラウド環境でもファイルシステム依存の問題を回避できます
  • ASP.NET Core は Windows / Linux の両方で動作するため、フォントパスや OS 固有リソースへの依存は極力避ける必要があります

このようなストリームベースの PDF 生成方式は、社内管理画面や業務システムでの帳票出力など、「ユーザー操作に応じて即時ダウンロードする PDF」に非常に適しています。

PDF 内に表形式のデータを出力したい場合は、ASP.NET Core で C# を使用して PDF テーブルを生成する方法もあわせて参照してください。

3.2 ASP.NET Core Web API で PDF を生成する

フロントエンドとバックエンドを分離したアーキテクチャでは、PDF 生成処理を ASP.NET Core Web API として提供するケースが一般的です。

この場合、API は PDF を **バイナリデータ(byte 配列)**として返却し、Web フロントエンド、モバイルアプリ、または他のサービスから利用されます。

以下は、Web API で PDF を生成する基本的な実装例です。

using Microsoft.AspNetCore.Mvc;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

[ApiController]
[Route("api/pdf")]
public class PdfApiController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        PdfDocument document = new PdfDocument();
        PdfPageBase page = document.Pages.Add();

        PdfTrueTypeFont font = new PdfTrueTypeFont(
            new Font("Yu Gothic UI", 14f, FontStyle.Bold),
            true
        );

        page.Canvas.DrawString(
            "ASP.NET Core Web API により生成された PDF ドキュメントです。",
            font,
            PdfBrushes.BlueViolet,
            new PointF(40, 40)
        );

        using (MemoryStream stream = new MemoryStream())
        {
            document.SaveToStream(stream);
            document.Close();

            return File(
                stream.ToArray(),
                "application/pdf",
                "ApiGenerated.pdf"
            );
        }
    }
}

生成された PDF のプレビュー例は次のとおりです。

ASP.NET Core Web API で C# を使用して PDF を生成した例

Web API シナリオでの注意点

  • Web API では、PDF は 画面表示用ではなくデータとして返却されます
  • 同期 API では、PDF 生成処理が長時間実行されないよう注意が必要です
  • 大量ページや複雑な帳票を生成する場合は、非同期処理やバックグラウンドジョブとして実装することが推奨されます
  • マイクロサービス構成では、PDF 生成は「自動処理・定期処理・サービス間連携」の一部として組み込まれることが多くなります

このように、PDF 生成を Web API として提供することで、フロントエンドの実装とドキュメント生成ロジックを明確に分離でき、システム全体の保守性と拡張性を高めることができます。

4. ASP.NET における PDF 生成の応用シナリオ

これまでの例では、PDF を作成するための基本的な流れを紹介してきました。しかし、実際の業務システムでは、PDF は固定文書ではなく、実行時のデータに基づいて動的に生成されるケースがほとんどです。

また、データ量の増加に伴い、レイアウトの維持や改ページ制御も重要な要件となります。本章では、代表的な応用シナリオを通して、ASP.NET アプリケーションで安定した構造を持つ PDF を生成する方法を解説します。

4.1 動的データを PDF に出力する

業務用 PDF では、データベースや Web API から取得した情報をもとに、受注一覧、売上レポート、明細表などを生成することが一般的です。

このようなケースでは、ループ処理でデータを描画しながら、縦位置(Y 座標)と改ページのタイミングを明示的に制御する必要があります。

以下の例では、簡易的な「受注レポート」を PDF として出力します。

PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();

PdfTrueTypeFont headerFont = new PdfTrueTypeFont(
    new Font("Yu Gothic UI", 12f, FontStyle.Bold),
    true
);
PdfTrueTypeFont bodyFont = new PdfTrueTypeFont(
    new Font("Yu Gothic UI", 10f, FontStyle.Regular),
    true
);

float startY = 40;
float y = startY;
float pageHeight = page.Canvas.ClientSize.Height - 40;

// タイトル
page.Canvas.DrawString(
    "受注一覧レポート",
    headerFont,
    PdfBrushes.Black,
    40,
    y
);
y += 30;

// 動的データ(サンプル)
string[] orders =
{
    "受注番号:A-1001 金額:¥250,000",
    "受注番号:A-1002 金額:¥180,000",
    "受注番号:A-1003 金額:¥320,000"
};

foreach (string order in orders)
{
    // 改ページ判定
    if (y > pageHeight)
    {
        page = document.Pages.Add();
        y = startY;
    }

    page.Canvas.DrawString(
        order,
        bodyFont,
        PdfBrushes.Black,
        40,
        y
    );
    y += 20;
}

document.SaveToFile("OrderReport.pdf");
document.Close();

出力結果のイメージ:

ASP.NET で動的データを PDF に出力する例(受注レポート)

このように、コードで描画位置を管理することで、データ件数が変動してもレイアウトが崩れない PDF を生成できます。特に、帳票・一覧表・レポート系の出力では、この方法が非常に有効です。

4.2 PDF のスタイルとレイアウトを制御する

コードベースで PDF を生成する場合、HTML のように自動でレイアウトが調整されることはありません。 そのため、ヘッダー・フッター・余白・行間などを明示的に定義する必要があります。

以下は、ページヘッダーとフッターを追加するシンプルな例です。

PdfPageBase page = document.Pages.Add();

PdfTrueTypeFont font = new PdfTrueTypeFont(
    new Font("Yu Gothic UI", 10f),
    true
);

// ヘッダー
page.Canvas.DrawString(
    "社内資料(機密)",
    font,
    PdfBrushes.Gray,
    new PointF(40, 15)
);

// フッター(ページ番号)
page.Canvas.DrawString(
    "Page 1",
    font,
    PdfBrushes.Gray,
    new PointF(
        page.Canvas.ClientSize.Width - 60,
        page.Canvas.ClientSize.Height - 30
    )
);

出力結果のイメージ:

ASP.NET で PDF のレイアウトとスタイルを制御する例

多ページの PDF ドキュメントを生成する場合、縦方向の位置計算を一元的に管理し、コンテンツを書き込む前に残りのスペースを判定することで、データが単一ページの容量を超えた際にも安全に新しいページへ切り替えることができます。

また、ヘッダー、行間、改ページのルールを集中的に管理することで、ページをまたいだレイアウトの一貫性を保ち、画面表示にも印刷にも適したドキュメントを生成できます。

4.3 その他の C# による PDF 生成方法

ASP.NET アプリケーションでは、 直接 PDF を生成する方法以外にも、用途に応じた変換処理が利用されます。

以下の関連チュートリアルも参考にしてください。

5. ASP.NET プロジェクトに適した PDF ライブラリの選び方

ASP.NET または ASP.NET Core アプリケーションで PDF 生成を実装する際、どの PDF ライブラリを選択するかは、開発効率・保守性・実行時の安定性に直結します。

単に「機能が多いかどうか」だけで判断するのではなく、実際の運用シーンを想定した観点から評価することが重要です。

PDF ライブラリ選定時の主なポイント

1. API の分かりやすさと拡張性

優れた PDF ライブラリは、次のような特徴を備えています。

  • ドキュメント、ページ、フォント、描画オブジェクトなどが明確なオブジェクトモデルとして整理されている
  • テキスト描画やレイアウト指定が直感的に行える
  • 一般的な操作に多くのボイラープレートコードを必要としない

PDF 出力ロジックは、帳票追加やレイアウト変更などにより長期的に拡張されることが多いため、API の理解しやすさは非常に重要です。

2. ASP.NET / ASP.NET Core への対応状況

多くの開発現場では、次のような環境が混在しています。

  • 既存の ASP.NET Framework アプリケーション
  • 新規開発の ASP.NET Core サービス
  • MVC と Web API の併用構成

そのため、同一の API で両環境に対応できる PDF ライブラリを選択することで、 移行コストや学習コストを大幅に削減できます。

3. パフォーマンスと安定性

本番環境での PDF 生成は、次のような条件下で実行されることが一般的です。

  • ユーザー操作により即時生成される帳票
  • バックグラウンドジョブや定期バッチ
  • 同時アクセス数の多い Web サービス

そのため、大量ページの PDF を安定して生成できるかメモリ使用量が適切に制御されているかといった点も重要な評価基準となります。

HTML 変換型とコード生成型の違い

ASP.NET における PDF 生成ライブラリは、大きく次の 2 種類に分けられます。

  • HTML をレンダリングして PDF に変換する方式
  • C# コードで直接 PDF を生成する方式

HTML 変換型は、既存の Web ページをそのまま PDF 化できる一方で、ブラウザ依存やレイアウトの再現性に課題が生じることがあります。一方、コード生成型PDFライブラリは、ページ構造、ページ分割、印刷効果を精密に制御でき、レポート、請求書、報告書、契約書などの業務文書生成シーンに特に適しています。

ASP.NET で PDF 生成を行う場合、「簡単に作れるか」よりも 「安定して運用できるか」 を重視して PDF ライブラリを選定することが、長期的には大きなメリットになります。

6. ASP.NET の PDF 生成に Spire.PDF を選ぶ理由

数ある .NET 向け PDF ライブラリの中でも、Spire.PDF for .NET は、ASP.NET および ASP.NET Core 環境において業務用途の PDF 生成に特化した機能と設計を備えています。

以下では、実際の開発・運用の視点から、その主な特長を整理します。

6.1 直感的で一貫性のある API 設計

Spire.PDF は、PDF ドキュメントを構成する各要素を 明確なクラス構造として提供しています。

  • PdfDocument:PDF 全体の管理
  • PdfPageBase:ページ単位の操作
  • PdfFont / PdfTrueTypeFont:フォント設定
  • PdfBrush / PdfPen:描画スタイル
  • PdfStringFormat:文字配置・行揃え制御
  • そのほか、C# による PDF 操作を行うための多数の API

これにより、レイアウト意図をコード上で明確に表現できるため、帳票やレポートのような複雑な構成でも保守性を維持しやすくなります。

6.2 日本語を含む多言語フォントへの対応

業務システムでは、日本語・英語・中国語など複数言語を含む PDF 出力が求められるケースが少なくありません。

Spire.PDF では、TrueType フォントを直接指定できるため、

  • Yu Gothic UI
  • MS Gothic
  • Meiryo

などの 日本語フォントを正しく埋め込んだ PDF を生成できます。

これにより、

  • 文字化けの防止
  • 印刷結果の一貫性
  • 環境依存の回避

といった点で、大きなメリットがあります。

6.3 ASP.NET / ASP.NET Core 両対応

Spire.PDF for .NET は、

  • ASP.NET Framework
  • ASP.NET Core
  • .NET 6 / .NET 7 以降

といった複数の実行環境に対応しており、同一のコードベースで PDF 生成処理を共通化できます。

これにより、

  • 既存システムの段階的移行
  • 新旧サービスの併用
  • 将来的な .NET バージョンアップ

にも柔軟に対応可能です。

6.4 帳票・レポート向けの実用機能が豊富

Spire.PDF は、単なるテキスト出力にとどまらず、 実務で必要とされる機能を幅広くサポートしています。

  • 表(テーブル)の描画
  • 画像・ロゴの挿入
  • 図形・罫線の描画
  • ページヘッダー/フッター
  • 自動改ページ処理

これにより、 請求書・見積書・業務レポートなどの PDF を コードベースで安定して生成できます。

7. よくある質問(FAQ)

MVC を使用せずに ASP.NET Core で PDF を生成できますか?

可能です。ASP.NET Core での PDF 生成は MVC に依存する必要はありません。MVC コントローラー以外でも、以下のような場面で PDF を生成して返すことができます:

  • ASP.NET Core Web API コントローラー
  • Minimal API
  • バックグラウンドサービス

返却する内容が有効な PDF バイト列であり、Content-Type を正しく設定していれば、正常に動作します。

ASP.NET と ASP.NET Core での PDF 生成にはどのような違いがありますか?

PDF 作成の基本的なロジックは共通していますが、いくつかの差異があります:

  • ASP.NET Framework は System.Web に依存(例:Server.MapPath
  • ASP.NET Core はストリームベースのファイル処理方式を採用
  • ASP.NET Core はクロスプラットフォーム対応で、モダンなデプロイ環境に適している

PDF API の観点から見ると、大部分のコードロジックは共通して再利用可能です。

ASP.NET で C# コードだけで PDF を完全に生成できますか?

可能です。多くの実運用システムでは、C# コードのみで PDF を生成しています。この方法には以下の利点があります:

  • HTML レンダリングによる表示の不一致を回避
  • レイアウトを正確に制御可能
  • 帳票や請求書などの構造化文書に最適

一貫性と信頼性を重視する ASP.NET PDF ソリューションでは、この実装方式が非常に一般的です。

まとめ

ASP.NET および ASP.NET Core アプリケーションにおいて、PDF ファイルを生成することは非常に一般的な要件であり、特に帳票、請求書、データエクスポートなどのシーンで有用です。C# コードを直接用いて PDF を生成することで、文書の構造、レイアウト、出力挙動を完全に制御できます。

本記事では、ASP.NET Framework と ASP.NET Core における PDF 生成方法を体系的に解説し、MVC や Web API の各シナリオ、動的データ出力、基本的なレイアウト制御をカバーしました。また、実際のプロジェクト要件に応じて適切な PDF ライブラリを選択するポイントについても触れています。

実際のプロジェクト環境でこれらのサンプルを制限なく試したい場合は、試用ライセンスを申請 することで、評価段階で全機能を利用できます。

Published in 文書操作

C# PDF とバイトのワークフローの概要

C# 開発では、PDF をバイト配列として扱うケースがよくあります。たとえば、PDF 文書をデータベースに保存したり、API を通して送受信したり、ファイルシステムを使わずに完全にメモリ内で処理する必要がある場合です。このような場面では、C# で PDF とバイト配列を相互に変換する方法が重要になります。

本記事では、Spire.PDF for .NET を使用して、バイト配列から PDF を生成する方法、PDF をバイト配列に変換する方法、さらにはメモリ上で直接 PDF を編集する方法まで、手順を追って解説します。

読みたいところからジャンプ

なぜ C# で PDF とバイト配列を扱うのか?

byte[] をデータの受け渡し形式として利用することで、一時ファイルを避けられ、クラウドやコンテナ環境にも適したコードが書けます。

  • データベース保存(BLOB): PDF を生のバイトとして保存し、必要な時だけ復元。
  • Web API: HTTP 経由でディスクを介さずに PDF を送受信。
  • メモリ内処理: ストリーム上で変換や透かし挿入を完結。
  • セキュリティ・分離: ファイル I/O を最小限にし、一時ファイルのリスクを軽減。

準備: サンプルコードを実行する前に、Spire.PDF for .NET の NuGet パッケージを追加してください。

Install-Package Spire.PDF

インストール後は、byte[]Stream から読み込み、ページを編集し、出力をメモリやディスクに書き出せます。追加のコンバーターは不要です。

C# でバイト配列を PDF に変換する方法

API やメッセージキューから受け取った byte[] が PDF を表す場合、文書として展開し処理を行ったり、ディスクに保存したりする必要があります。Spire.PDF for .NET を使えば、一時ファイルを作成せずにメモリから直接ロードできます。

シナリオと手順: DB や API からの byte[] を受け取り、メモリ上で PdfDocument を構築し、必要なら基本情報を確認してから保存します。

using Spire.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // 例: DB や API から取得した byte[]
        byte[] pdfBytes = File.ReadAllBytes("Sample.pdf");

        // 1) バイト配列からメモリ上に PDF をロード
        PdfDocument doc = new PdfDocument();
        doc.LoadFromBytes(pdfBytes);

        // 2) (任意)保存前にページ数などの基本情報を確認
        // int pageCount = doc.Pages.Count;

        // 3) ファイルに保存
        doc.SaveToFile("Output.pdf");
        doc.Close();
    }
}

下図はバイト配列から PDF への変換フローです。

bytes loaded into PdfDocument and saved as PDF in C# with Spire.PDF

ポイント:

  • LoadFromBytes(byte[]) で完全にメモリ上にロード。ファイル書き込み権限がない環境に最適。
  • ロード後に分岐して、検証・編集・ルーティングなども可能。
  • SaveToFile(string) で下流処理や保存用にディスクへ書き出し。

C# で PDF をバイト配列に変換する方法

逆方向として、PDF を byte[] に変換することで、データベース書き込み、キャッシュ、HTTP レスポンスでの送信が可能になります。Spire.PDF for .NET では、MemoryStream に直接書き込み、ToArray() でバイト配列に変換できます。

シナリオと手順: 既存の PDF を読み込み、MemoryStream に保存し、byte[] を抽出します。API のレスポンスや DB 保存に便利なパターンです。

using Spire.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // 1) PDF をロード(ローカル、ネットワーク、リソースなど)
        PdfDocument doc = new PdfDocument();
        doc.LoadFromFile("Input.pdf");

        // 2) MemoryStream に保存してバイト配列を取得
        byte[] pdfBytes;
        using (var ms = new MemoryStream())
        {
            doc.SaveToStream(ms);
            pdfBytes = ms.ToArray();
        }

        doc.Close();

        // pdfBytes を DB 保存や API レスポンスとして利用可能
        // 例: return File(pdfBytes, "application/pdf");
    }
}

下図は PDF からバイト配列への変換フローです。

PDF loaded into PdfDocument, saved to MemoryStream, then bytes in C#

コードの要点:

  • SaveToStream → ToArray が、C# で一時ファイルを作らずに PDF をバイト配列化する標準的な方法。
  • 大きな PDF にも対応可能で、制約はメモリ量のみ。
  • ASP.NET ではコントローラや API の戻り値として直接返せる。

バイト配列から直接 PDF を作成・編集する方法

真価は、PDF を完全にメモリ上で編集できる点にあります。byte[] からロードし、テキストや画像を追加、透かしやフォーム入力を行い、編集結果を新しい byte[] として保存できます。ファイルレスの処理フローやマイクロサービスに最適です。

シナリオと手順: バイト配列から PDF をロードし、1 ページ目に小さなテキストを追加して、編集済みの文書を新しいバイト配列として出力します。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

class Program
{
    static void Main()
    {
        // 入力ソース(DB、API、ファイルなど)を byte[] で受け取る
        byte[] inputBytes = File.ReadAllBytes("Input.pdf");

        // 1) メモリ上にロード
        var doc = new PdfDocument();
        doc.LoadFromBytes(inputBytes);

        // 2) 編集: 1 ページ目に小さなテキストを追加
        PdfPageBase page = doc.Pages[0];
        page.Canvas.DrawString(
            "Edited in memory",
            new PdfTrueTypeFont(new Font("Yu Gothic UI", 14f), true),
            PdfBrushes.DarkBlue,
            new PointF(100, page.Size.Height - 100)
        );

        // 3) 編集済み PDF を新しい byte[] に保存
        byte[] editedBytes;
        using (var ms = new MemoryStream())
        {
            doc.SaveToStream(ms);
            editedBytes = ms.ToArray();
        }

        doc.Close();

        // editedBytes を DB 保存や API レスポンスとして利用可能
    }
}

下図は編集済み PDF の例です。

Edited PDF page with insrted text using C# in bytes

補足:

  • このパターンは テキスト・画像・透かし・注釈・フォーム入力 にもそのまま使える。
  • 再処理に備え、編集処理は冪等性を保つ(例: 透かしが重複しないようにチェック)。
  • ASP.NET ではレスポンス返却前の オンザフライ編集 にも便利。

ゼロから PDF を構築する手順については、C# で PDF 文書を作成する方法 を参照ください。

Spire.PDF for .NET を使う利点

バイト配列ワークフローに適した特徴をまとめると以下の通りです。

課題 Spire.PDF for .NET で得られるメリット
I/O の柔軟性 ファイルパス・Streambyte[] すべて同じ PdfDocument API で対応。
メモリ内編集 テキスト / 画像描画、注釈・フォーム管理、透かし追加など、一時ファイル不要。
サービス親和性 ASP.NET エンドポイントやバックグラウンド処理と簡潔に統合可能。
実運用対応 複数ページ PDF にも対応。ストリームでメモリ使用量を制御可能。
シンプルなコード ボイラープレート最小化。煩雑なバイト操作や脆弱な Interop を回避。

まとめ

本記事では、C# でバイト配列から PDF を生成する方法PDF をバイト配列に変換する方法、そして メモリ上で直接 PDF を編集する方法 を紹介しました。ストリームとバイト配列を活用することで、API 設計がシンプルになり、レスポンスが高速化し、データベースやクラウド環境にも適した処理フローを実現できます。Spire.PDF for .NET を利用すれば、ファイルレスかつ拡張性の高いワークフローを簡潔に構築できます。

機能を制限なく試したい場合は、30 日間の無料一時ライセンスを申請 してください。軽量なタスクには、Free Spire.PDF for .NET も利用できます。

よくある質問

ディスクに保存せず、C# でバイト配列から PDF を作成できますか? はい。LoadFromBytes でロードし、MemoryStream に保存するか、API から直接返却すれば、ディスク不要で処理できます。

C# で PDF をバイト配列に変換してデータベースに保存する方法は? PdfDocumentSaveToStream を実行し、MemoryStreamToArray() を呼び出します。その byte[] を BLOB として保存できます。

バイト配列として存在する PDF を編集できますか?

もちろん可能です。バイト配列からロードし、テキスト・画像・透かし・注釈・フォーム入力を行い、新しい byte[] に保存できます。

パフォーマンスや信頼性を高めるポイントは?

ストリームは早めに Dispose し、必要に応じてバッファを再利用します。操作やスレッドごとに新しい PdfDocument を生成してください。大きなファイルにはストリーム I/O を活用することで、メモリ使用量を安定させられます。

Published in 文書操作

PDF ファイルのインタラクティブ性を高めることは、文書管理やユーザーエンゲージメントの重要な要素です。C# を使用して .NET フレームワーク内で PDF にアクションを追加することで、ファイルリンク、ウェブリンク、音声などの動的要素を組み込むことができます。これにより、ページ間の移動、外部アプリケーションの起動、背景音楽の再生などのさまざまな機能が実行可能になり、PDF の実用性や魅力が向上します。本記事では、Spire.PDF for .NET ライブラリを使用して C# で PDF ドキュメントにアクションを作成する方法を紹介します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

C# で PDF にアクションを追加する基本手順

C# を用いて PDF にアクションを追加するには、ナビゲーション ボタン、ファイル リンク、または音声トリガーなど、ユーザー体験を向上させるインタラクティブ要素を統合します。Spire.PDF for .NET ライブラリを使用すると、主要なクラスやメソッドを活用してさまざまなアクションを作成できます。以下は、Spire.PDF for .NET を使って PDF にアクションを追加する一般的な手順です:

  • PdfDocument クラスのインスタンスを作成し、PdfDocument.LoadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
  • PdfDocument.Pages[] プロパティを使用して対象のページを取得します。
  • アクションを表すクラスのインスタンスを作成し、そのプロパティを設定します。
  • アクションを使用してページ上の矩形領域に PdfActionAnnotation クラスのインスタンスを作成します。
  • 必要に応じて、アクションのキューとなるテキストをページに追加します(オプション)。
  • PdfPageBase.Annotations.Add() メソッドを使用してアクション注釈をページに追加します。
  • PdfDocument.SaveToFile() メソッドを使用して結果のドキュメントを保存します。

C# で PDF にナビゲーション アクションを作成

PdfGoToAction クラスを使用すると、ドキュメント内の指定した目的地へのナビゲーションを定義できます。このアクションを実現するには、PdfDestination オブジェクトを作成し、それを PdfGoToAction インスタンスに渡します。以下は、PDF にナビゲーションアクションを追加するコード例です:

  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.General;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddNavigationButtonPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentのインスタンスを作成
            PdfDocument pdf = new PdfDocument();

            // PDFファイルを読み込む
            pdf.LoadFromFile("Sample.pdf");

            // PdfDestinationインスタンスを作成し、遷移先を設定
            PdfDestination destination = new PdfDestination(pdf.Pages[1]);
            destination.Location = new PointF(0, 0);
            destination.Mode = PdfDestinationMode.Location;
            destination.Zoom = 0.8f;

            // 遷移先に基づいてPdfGoToActionを作成
            PdfGoToAction action = new PdfGoToAction(destination);

            // 四角形を作成し、最初のページに描画
            RectangleF rect = new RectangleF(70, pdf.PageSettings.Size.Height - 120, 140, 20);
            pdf.Pages[0].Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
            // 四角形にテキストを描画
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 14f, FontStyle.Bold), true);
            PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
            pdf.Pages[0].Canvas.DrawString("2ページに移動", font, PdfBrushes.Green, rect, stringFormat);

            // 四角形とアクションに基づいてPdfActionAnnotationインスタンスを作成
            PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);

            // 最初のページにアクション注釈を追加
            pdf.Pages[0].Annotations.Add(actionAnnotation);

            // ドキュメントを保存
            pdf.SaveToFile("output/ナビゲーション・アクション.pdf");
            pdf.Close();
        }
    }
}

C# で PDF にナビゲーション アクションを作成

C# で PDF にファイル開くアクションを作成

PdfLaunchAction クラスを使用すると、PDF 内に埋め込まれたボタンをクリックして特定のファイルを開くアクションを定義できます。このアクションを実装する際、ファイルのパス(絶対または相対)を設定し、新しいウィンドウで開くかどうかを指定できます。以下は、PDF ドキュメントにファイル開くアクションを追加するコード例です:

  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddFileLaunchActionPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentのインスタンスを作成
            PdfDocument pdf = new PdfDocument();

            // PDFファイルを読み込む
            pdf.LoadFromFile("Sample.pdf");

            // 最初のページを取得
            PdfPageBase page = pdf.Pages[0];

            // ページ上に四角形を描画
            RectangleF rect = new RectangleF(50, 50, 180, 20);
            page.Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
            // 四角形内にテキストを描画
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 14f, FontStyle.Bold), true);
            PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
            pdf.Pages[0].Canvas.DrawString("クリックしてSample2を開く", font, PdfBrushes.Green, rect, stringFormat);

            // PdfLaunchActionインスタンスを作成
            PdfLaunchAction action = new PdfLaunchAction("C:/Sample2.pdf", PdfFilePathType.Absolute);
            // 新しいウィンドウで開くように起動モードを設定
            action.IsNewWindow = true;

            // 四角形と起動アクションに基づいてPdfActionAnnotationインスタンスを作成
            PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);

            // 最初のページにアクション注釈を追加
            page.Annotations.Add(actionAnnotation);

            // ドキュメントを保存
            pdf.SaveToFile("output/ファイル開くアクション.pdf");
            pdf.Close();
        }
    }
}

C# で PDF にファイル開くアクションを作成

C# で PDF にサウンド アクションを作成

PdfSoundAction クラスを使用すると、PDF ドキュメント内にオーディオをアクションとして埋め込むことができ、ファイルを開いたときやボタンをクリックしたときなど、特定のトリガーに応じて音声を再生できます。以下は、PDF ドキュメントにサウンド アクションを作成するコード例です:

  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using Spire.Pdf.General;
using System.Drawing;

namespace AddSoundActionPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentのインスタンスを作成
            PdfDocument pdf = new PdfDocument();

            // PDFファイルを読み込む
            pdf.LoadFromFile("Sample.pdf");

            // 最初のページを取得
            PdfPageBase page = pdf.Pages[0];

            // ページにキュー画像を描画
            PdfImage image = PdfImage.FromFile("Sound.png");
            page.Canvas.DrawImage(image, new PointF(30, 30));

            // PdfSoundActionインスタンスを作成し、そのプロパティを設定
            PdfSoundAction action = new PdfSoundAction("Wave.wav");
            // サウンドのパラメータを設定
            action.Sound.Bits = 16;
            action.Sound.Channels = PdfSoundChannels.Stereo;
            action.Sound.Encoding = PdfSoundEncoding.Signed;
            action.Sound.Rate = 44100;
            // 再生オプションを設定
            action.Volume = 0;
            action.Repeat = true;
            action.Mix = true;
            action.Synchronous = true;

            // キュー画像の位置に基づいてサウンドアクションのPdfActionAnnotationインスタンスを作成
            RectangleF rect = new RectangleF(30, 30, image.Width, image.Height);
            PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);

            // 最初のページにアクション注釈を追加
            page.Annotations.Add(actionAnnotation);

            // ドキュメントが開かれた後にサウンドアクションを再生するよう設定
            pdf.AfterOpenAction = action;

            // ドキュメントを保存
            pdf.SaveToFile("output/サウンドアクション.pdf");
            pdf.Close();
        }
    }
}

C# で PDF にサウンド アクションを作成

C# で PDF にウェブリンク アクションを作成

PdfUriAction クラスを使用すると、PDF ドキュメントにウェブリンクアクションを作成できます。これにより、ボタンをクリックした際などにウェブリンクを開くことが可能になります。以下は、ウェブリンクアクションを作成するコード例です:

  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddSoundActionPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentのインスタンスを作成
            PdfDocument pdf = new PdfDocument();

            // PDFファイルを読み込む
            pdf.LoadFromFile("Sample.pdf");

            // 最初のページを取得
            PdfPageBase page = pdf.Pages[0];

            // ページ上に四角形を描画
            RectangleF rect = new RectangleF(30, 30, 120, 20);
            page.Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
            // 四角形内にテキストを描画
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 14f, FontStyle.Bold), true);
            PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
            page.Canvas.DrawString("クリックしてGoogle検索へ", font, PdfBrushes.LightSkyBlue, rect);

            // PdfUriActionインスタンスを作成し、そのプロパティを設定
            PdfUriAction action = new PdfUriAction();
            action.Uri = "https://www.google.com/";

            // Webリンクアクションと四角形を使用してPdfActionAnnotationインスタンスを作成
            PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);

            // 最初のページにアクション注釈を追加
            page.Annotations.Add(actionAnnotation);

            // ドキュメントを保存
            pdf.SaveToFile("output/ウェブリンク・アクション.pdf");
            pdf.Close();
        }
    }
}

C# で PDF にウェブリンク アクションを作成

C# で PDF に JavaScript アクションを作成

PdfJavaScriptAction は PDF 内で JavaScript アクションを表し、フォームのバリデーション、データ計算、カスタムユーザーインターフェースなどの複雑なインタラクションを実現することができます。以下は、C# を使用して PDF ドキュメントに簡単な JavaScript アクションを追加するコード例です:

  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;

namespace AddJavaScriptActionPDF
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentインスタンスを作成
            PdfDocument pdf = new PdfDocument();

            // PDFファイルを読み込む
            pdf.LoadFromFile("Sample.pdf");

            // JavaScriptコードを定義
            var jsCode =
            "app.alert({" +
            "    cMsg: 'グレートバリアリーフについての記事を読む準備ができましたか?\\n\\nこの記事では、オーストラリアのグレートバリアリーフの概要、その生態系、観光情報、および環境保護の取り組みについて詳しく説明します。ぜひお楽しみください!', " +
            "    nIcon: 3, " +
            "    cTitle: '文档介绍'" +
            "});";

            // JavaScriptコードを使用し、PdfJavaScriptActionインスタンスを作成
            PdfJavaScriptAction action = new PdfJavaScriptAction(jsCode);

            // 作成したJavaScriptアクションをドキュメントのオープン時に実行されるように設定
            pdf.AfterOpenAction = action;

            // ドキュメントを保存
            pdf.SaveToFile("output/PDFJavaScriptアクション.pdf");
            pdf.Close();
        }
    }
}

C# で PDF に JavaScript アクションを作成

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in アクション

PDF 注釈ツールを使用すると、テキストをハイライトしたり、付箋を追加したり、形状を描画したり、コメントを直接 PDF ドキュメントに挿入したりできます。これは、フィードバックを提供したり、メモを取ったり、デザインにマークアップをしたり、ドキュメントでの共同作業を行ったりする際に便利です。PDF 注釈機能をマスターすることで、ワークフローを効率化し、PDF ファイルの作業時に生産性を向上させることができます。

この記事では、C# で Spire.PDF for .NET を使用して PDF ドキュメントにさまざまな種類の注釈をプログラム的に追加する方法を説明します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

C# で PDF にマークアップ注釈を追加する

PDF のマークアップ注釈を使用すると、ユーザーは特定のテキストを強調表示するために背景色を選択して適用できます。Spire.PDF はこのタイプの注釈を操作するために PdfTextMarkupAnnotation クラスを提供しています。C# で Spire.PDF を使用して PDF にマークアップ注釈を追加する手順は次のとおりです。

  • PdfDocument オブジェクトを作成します。
  • 指定されたファイルパスから PDF ドキュメントをロードします。
  • ドキュメントから特定のページを取得します。
  • PdfTextFinder クラスのメソッドを使用してページから目的のテキストを検索します。
  • 見つかったテキストに基づいて PdfTextMarkupAnnotation オブジェクトを作成します。
  • PdfPageBase.Annotations.Add() メソッドを使用してページに注釈を追加します。
  • ドキュメントを別の PDF ファイルとして保存します。
  • C#
using Spire.Pdf.Annotations;
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Drawing;

namespace AddMarkupAnnotation
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            // PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            // 特定のページを取得
            PdfPageBase page = doc.Pages[0];

            // ページに基づいてPdfTextFinderオブジェクトを作成
            PdfTextFinder finder = new PdfTextFinder(page);

            // 検索オプションを設定
            finder.Options.Parameter = TextFindParameter.WholeWord;
            finder.Options.Parameter = TextFindParameter.IgnoreCase;

            // 指定されたテキストのインスタンスを検索
            List fragments = finder.Find("やがて、金や銀などの貴金属が、その希少性と耐久性から、一般的な通貨として登場した。");

            // 最初のインスタンスを取得
            PdfTextFragment textFragment = fragments[0];

            // 注釈テキストを指定
            String text = "この文は、紙幣と硬貨が経済に与える影響を強調しています。";

            // 見つかったテキストの境界を反復処理
            for (int i = 0; i < textFragment.Bounds.Length; i++)
            {
                // 特定の境界を取得
                RectangleF rect = textFragment.Bounds[i];

                // テキストマークアップ注釈を作成
                PdfTextMarkupAnnotation annotation = new PdfTextMarkupAnnotation("Jessey", text, rect);

                // マークアップ色を設定
                annotation.TextMarkupColor = Color.Green;

                // 注釈のコレクションに注釈を追加
                page.Annotations.Add(annotation);
            }

            // 結果をファイルに保存
            doc.SaveToFile("output/PDFにマークアップ注釈を追加.pdf");

            // リソースを解放
            doc.Dispose();
        }
    }
}

C#:PDF ドキュメントに注釈を追加する方法

C# で PDF に自由テキスト注釈を追加する

PDF ファイルに自由テキスト注釈を追加することで、ユーザーは印刷した文書にメモを取るように手書きやタイプしたテキストを直接追加できます。Spire.PDF は自由テキスト注釈を扱うために PdfFreeTextAnnotation を提供しています。PDF ドキュメントに自由テキスト注釈を作成する方法は次のとおりです。

  • PdfDocument オブジェクトを作成します。
  • 指定されたファイルパスから PDF ドキュメントをロードします。
  • ドキュメントから特定のページを取得します。
  • PdfTextFinder クラスのメソッドを使用してページから目的のテキストを検索します。
  • 注釈を追加するための x および y 座標を指定します。
  • PdfFreeTextAnnotation オブジェクトを作成し、テキスト、フォント、ボーダー、色などのプロパティを設定します。
  • PdfPageBase.Annotations.Add() メソッドを使用してページに注釈を追加します。
  • ドキュメントを別の PDF ファイルとして保存します。
  • C#
using Spire.Pdf.Annotations;
using Spire.Pdf.Texts;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddFreeTextAnnotation
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            // PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            // 特定のページを取得
            PdfPageBase page = doc.Pages[0];

            // ページに基づいてPdfTextFinderオブジェクトを作成
            PdfTextFinder finder = new PdfTextFinder(page);

            // 検索オプションを設定
            finder.Options.Parameter = TextFindParameter.WholeWord;
            finder.Options.Parameter = TextFindParameter.IgnoreCase;

            // 指定されたテキストのインスタンスを検索
            List fragments = finder.Find("貴金属");

            // 最初のインスタンスを取得
            PdfTextFragment textFragment = fragments[0];

            // テキスト境界を取得
            RectangleF rect = textFragment.Bounds[0];

            // 注釈を追加するxおよびy座標を取得
            float x = rect.Right;
            float y = rect.Bottom;

            // フリーテキスト注釈を作成
            RectangleF rectangle = new RectangleF(x - 100, y, 210, 20);
            PdfFreeTextAnnotation textAnnotation = new PdfFreeTextAnnotation(rectangle);

            // 注釈の内容を設定
            textAnnotation.Text = "貴金属とは、金や銀といった価値の高い金属のこと。";

            // 注釈のその他のプロパティを設定
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 10f, FontStyle.Bold), true);
            PdfAnnotationBorder border = new PdfAnnotationBorder(1f);
            textAnnotation.Font = font;
            textAnnotation.Border = border;
            textAnnotation.BorderColor = Color.Purple;
            textAnnotation.Color = Color.Green;
            textAnnotation.Opacity = 1.0f;

            // 注釈のコレクションに注釈を追加
            page.Annotations.Add(textAnnotation);

            // 結果をファイルに保存
            doc.SaveToFile("output/PDFに自由テキスト注釈を追加.pdf");

            // リソースを解放
            doc.Dispose();
        }
    }
}

C#:PDF ドキュメントに注釈を追加する方法

C# で PDF にポップアップ注釈を追加する

PDF ファイルのポップアップ注釈を使用すると、クリックすると表示される小さなラベルやコメントを追加できます。これにより、追加情報や短いメッセージを表示できます。Spire.PDF はポップアップ注釈を扱うために PdfPopupAnnotation クラスを提供しています。ポップアップ注釈を PDF に追加する手順は次のとおりです。

  • PdfDocument オブジェクトを作成します。
  • 指定されたファイルパスから PDF ドキュメントをロードします。
  • ドキュメントから特定のページを取得します。
  • PdfTextFinder クラスのメソッドを使用してページから目的のテキストを検索します。
  • 注釈を追加するための x および y 座標を指定します。
  • PdfPopupAnnotation オブジェクトを作成し、テキスト、アイコン、色などのプロパティを設定します。
  • PdfPageBase.Annotations.Add() メソッドを使用してページに注釈を追加します。
  • ドキュメントを別の PDF ファイルとして保存します。
  • C#
using Spire.Pdf.Annotations;
using Spire.Pdf.Texts;
using Spire.Pdf;
using System.Drawing;

namespace AddPopupAnnotation
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            // PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            // 特定のページを取得
            PdfPageBase page = doc.Pages[0];

            // ページに基づいてPdfTextFinderオブジェクトを作成
            PdfTextFinder finder = new PdfTextFinder(page);

            // 検索オプションを設定
            finder.Options.Parameter = TextFindParameter.WholeWord;
            finder.Options.Parameter = TextFindParameter.IgnoreCase;

            // 指定されたテキストのインスタンスを検索
            List fragments = finder.Find("貴金属");

            // 最初のインスタンスを取得
            PdfTextFragment textFragment = fragments[0];

            // テキスト境界を取得
            RectangleF textBound = textFragment.Bounds[0];

            // 注釈を追加するxおよびy座標を取得
            float x = textBound.Right + 5;
            float y = textBound.Top - 15;

            // ポップアップ注釈を作成
            RectangleF rectangle = new RectangleF(x, y, 30, 30);
            PdfPopupAnnotation popupAnnotation = new PdfPopupAnnotation(rectangle);

            // 注釈テキストを設定
            popupAnnotation.Text = "貴金属とは、金や銀といった価値の高い金属のこと。";

            // 注釈のアイコンと色を設定
            popupAnnotation.Icon = PdfPopupIcon.Comment;
            popupAnnotation.Color = Color.Red;

            // 注釈のコレクションに注釈を追加
            page.Annotations.Add(popupAnnotation);

            // 結果をファイルに保存
            doc.SaveToFile("output/PDFにポップアップ注釈を追加.pdf");

            // リソースを解放
            doc.Dispose();
        }
    }
}

C#:PDF ドキュメントに注釈を追加する方法

C# で PDF に形状注釈を追加する

PDF の形状注釈は、長方形、円、線、矢印などのグラフィカルな形状を PDF ドキュメントに追加して、情報を強調表示したり提供したりすることを指します。Spire.PDF は、カスタム形状注釈を PDF ドキュメントに作成するために PdfPolyLineAnnotation クラスを提供しています。詳細な手順は次のとおりです。

  • PdfDocument オブジェクトを作成します。
  • 指定されたファイルパスから PDF ドキュメントをロードします。
  • ドキュメントから特定のページを取得します。
  • PdfTextFinder クラスのメソッドを使用してページから目的のテキストを検索します。
  • 注釈を追加するための座標を指定します。
  • PdfPolyLineAnnotation オブジェクトを作成し、注釈のテキストを設定します。
  • PdfPageBase.Annotations.Add() メソッドを使用してページに注釈を追加します。
  • ドキュメントを別の PDF ファイルとして保存します。
  • C#
using Spire.Pdf.Annotations;
using Spire.Pdf.Texts;
using Spire.Pdf;
using System.Drawing;

namespace AddShapeAnnotation
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            // PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            // 特定のページを取得
            PdfPageBase page = doc.Pages[0];

            // ページに基づいてPdfTextFinderオブジェクトを作成
            PdfTextFinder finder = new PdfTextFinder(page);

            // 検索オプションを設定
            finder.Options.Parameter = TextFindParameter.WholeWord;
            finder.Options.Parameter = TextFindParameter.IgnoreCase;

            // 指定されたテキストのインスタンスを検索
            List fragments = finder.Find("貴金属");

            // 最初のインスタンスを取得
            PdfTextFragment textFragment = fragments[0];

            // テキスト境界を取得
            RectangleF textBound = textFragment.Bounds[0];

            // 注釈を追加する座標を取得
            float left = textBound.Left;
            float top = textBound.Top;
            float right = textBound.Right;
            float bottom = textBound.Bottom;

            // 形状注釈を作成
            PdfPolyLineAnnotation polyLineAnnotation = new PdfPolyLineAnnotation(page, new PointF[] {
                new PointF(left, top), new PointF(right, top), new PointF(right - 5, bottom), new PointF(left - 5, bottom), new PointF(left, top) });

            // 注釈テキストを設定
            polyLineAnnotation.Text = "貴金属とは、金や銀といった価値の高い金属のこと。";

            // 注釈のコレクションに注釈を追加
            page.Annotations.Add(polyLineAnnotation);

            // 結果をファイルに保存
            doc.SaveToFile("output/PDFに図形の注釈を追加.pdf");

            // リソースを解放
            doc.Dispose();
        }
    }
}

C#:PDF ドキュメントに注釈を追加する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in 注釈

印刷せずにエンドユーザーが直接入力できる PDF フォームを作成する機能は、ビジネスの効率化に大きなメリットをもたらします。ユーザーはこれらの書類をダウンロードし、入力して保存し、再度送信することができます。印刷やスキャンの手間が不要です。このガイドでは、C# で Spire.PDF for .NET を使用して、PDF に入力可能なフォームを作成、入力、または削除する方法について説明します。

Spire.PDF for .NET は、Spire.Pdf.Fields 名前空間に一連の便利なクラスを提供しており、テキストボックス、チェックボックス、コンボボックス、リストボックス、ラジオボタンなど、さまざまな種類のフォームフィールドを作成・編集できます。以下の表に、このチュートリアルで使用する主要なクラスを示します。

クラス 説明
PdfForm PDF 文書のインタラクティブフォームを表します。
PdfField PDF 文書のインタラクティブフォームのフィールドを表します。
PdfTextBoxField PDF フォームのテキストボックスフィールドを表します。
PdfCheckBoxField PDF フォームのチェックボックスフィールドを表します。
PdfComboBoxField PDF フォームのコンボボックスフィールドを表します。
PdfListBoxField PDF フォームのリストボックスフィールドを表します。
PdfListFieldItem リストフィールドの項目を表します。
PdfRadioButtonListField PDF フォームのラジオボタンフィールドを表します。
PdfRadioButtonListItem ラジオボタンリストの項目を表します。
PdfButtonField PDF フォームのボタンフィールドを表します。
PdfSignatureField PDF フォームの署名フィールドを表します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

PDF 文書に入力可能なフォームフィールドを作成

PDF フォームを作成するには、対応するフィールドクラスのインスタンスを初期化し、Bounds プロパティを使用してフィールドのサイズと位置を設定し、PdfFormFieldCollection.Add() メソッドを使用して PDF に追加します。Spire.PDF for .NET を使用して PDF 文書にさまざまなタイプのフォームフィールドを作成する手順は以下のとおりです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.Pages.Add() メソッドを使用してページを追加します。
  • PdfTextBoxField オブジェクトを作成し、Bounds、フォント、テキストなどのプロパティを設定してから、PdfFormFieldCollection.Add() メソッドを使用して文書に追加します。
  • チェックボックス、コンボボックス、リストボックス、ラジオボタン、署名フィールド、ボタンを追加するために、ステップ3を繰り返します。
  • PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Fields;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace CreateFillableFormsInPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            //ページを追加
            PdfPageBase page = doc.Pages.Add();

            //x座標とy座標を初期化
            float baseX = 100;
            float baseY = 30;

            //2つのブラシオブジェクトを作成
            PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.Blue));
            PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.Black));

            //フォントを作成
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 12f, FontStyle.Regular), true);

            //テキストボックスを追加
            page.Canvas.DrawString("テキストボックス:", font, brush1, new PointF(10, baseY));
            RectangleF tbxBounds = new RectangleF(baseX, baseY, 150, 15);
            PdfTextBoxField textBox = new PdfTextBoxField(page, "textbox");
            textBox.Bounds = tbxBounds;
            textBox.Text = "Hello World";
            textBox.Font = font;
            doc.Form.Fields.Add(textBox);
            baseY += 25;

            //2つのチェックボックスを追加
            page.Canvas.DrawString("チェックボックス:", font, brush1, new PointF(10, baseY));
            RectangleF checkboxBound1 = new RectangleF(baseX, baseY, 15, 15);
            PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "checkbox1");
            checkBoxField1.Bounds = checkboxBound1;
            checkBoxField1.Checked = false;
            page.Canvas.DrawString("オプション 1", font, brush2, new PointF(baseX + 20, baseY));

            RectangleF checkboxBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
            PdfCheckBoxField checkBoxField2 = new PdfCheckBoxField(page, "checkbox2");
            checkBoxField2.Bounds = checkboxBound2;
            checkBoxField2.Checked = false;
            page.Canvas.DrawString("オプション 2", font, brush2, new PointF(baseX + 90, baseY));
            doc.Form.Fields.Add(checkBoxField1);
            doc.Form.Fields.Add(checkBoxField2);
            baseY += 25;

            //リストボックスを追加
            page.Canvas.DrawString("リストボックス:", font, brush1, new PointF(10, baseY));
            RectangleF listboxBound = new RectangleF(baseX, baseY, 150, 50);
            PdfListBoxField listBoxField = new PdfListBoxField(page, "listbox");
            listBoxField.Items.Add(new PdfListFieldItem("項目 1", "item1"));
            listBoxField.Items.Add(new PdfListFieldItem("項目 2", "item2"));
            listBoxField.Items.Add(new PdfListFieldItem("項目 3", "item3"));
            listBoxField.Bounds = listboxBound;
            listBoxField.Font = font;
            listBoxField.SelectedIndex = 0;
            doc.Form.Fields.Add(listBoxField);
            baseY += 60;

            //2つのラジオボタンを追加
            page.Canvas.DrawString("ラジオボタン:", font, brush1, new PointF(10, baseY));
            PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "radio");
            PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("option1");
            RectangleF radioBound1 = new RectangleF(baseX, baseY, 15, 15);
            radioItem1.Bounds = radioBound1;
            page.Canvas.DrawString("オプション 1", font, brush2, new PointF(baseX + 20, baseY));

            PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("option2");
            RectangleF radioBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
            radioItem2.Bounds = radioBound2;
            page.Canvas.DrawString("オプション 2", font, brush2, new PointF(baseX + 90, baseY));
            radioButtonListField.Items.Add(radioItem1);
            radioButtonListField.Items.Add(radioItem2);
            radioButtonListField.SelectedIndex = 0;
            doc.Form.Fields.Add(radioButtonListField);
            baseY += 25;

            //コンボボックスを追加
            page.Canvas.DrawString("コンボボックス:", font, brush1, new PointF(10, baseY));
            RectangleF cmbBounds = new RectangleF(baseX, baseY, 150, 15);
            PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "combobox");
            comboBoxField.Bounds = cmbBounds;
            comboBoxField.Items.Add(new PdfListFieldItem("項目 1", "item1"));
            comboBoxField.Items.Add(new PdfListFieldItem("項目 2", "item2"));
            comboBoxField.Items.Add(new PdfListFieldItem("項目 3", "item3"));
            comboBoxField.Items.Add(new PdfListFieldItem("項目 4", "item4"));
            comboBoxField.SelectedIndex = 0;
            comboBoxField.Font = font;
            doc.Form.Fields.Add(comboBoxField);
            baseY += 25;

            //署名フィールドを追加
            page.Canvas.DrawString("署名欄:", font, brush1, new PointF(10, baseY));
            PdfSignatureField sgnField = new PdfSignatureField(page, "sgnField");
            RectangleF sgnBounds = new RectangleF(baseX, baseY, 150, 80);
            sgnField.Bounds = sgnBounds;
            doc.Form.Fields.Add(sgnField);
            baseY += 90;

            //ボタンを追加
            page.Canvas.DrawString("ボタン:", font, brush1, new PointF(10, baseY));
            RectangleF btnBounds = new RectangleF(baseX, baseY, 50, 15);
            PdfButtonField buttonField = new PdfButtonField(page, "button");
            buttonField.Bounds = btnBounds;
            buttonField.Text = "送信";
            buttonField.Font = font;
            PdfSubmitAction submitAction = new PdfSubmitAction("https://www.e-iceblue.com/getformvalues.php");
            submitAction.DataFormat = SubmitDataFormat.Html;
            buttonField.Actions.MouseDown = submitAction;
            doc.Form.Fields.Add(buttonField);

            //ファイルに保存
            doc.SaveToFile("output/PDFにフォームフィールドを作成.pdf", FileFormat.PDF);
            doc.Close();
        }
    }
}

C#:PDF で記入可能なフォームを作成、記入、削除する方法

既存の PDF 文書のフォームフィールドに入力

フォームに入力するには、まず PDF 文書からすべてのフォームフィールドを取得し、特定のフィールドの種類を判別した後、値を入力するか、定義済みのリストから選択します。Spire.PDF for .NET を使用して既存の PDF 文書にフォームフィールドを入力する手順は以下のとおりです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用して PDF 文書を読み込みます。
  • PdfDocument.Form プロパティを通じてフォームを取得します。
  • PdfFormWidget.FieldsWidget プロパティを使用してフォームウィジェットコレクションを取得します。
  • フォームウィジェットコレクションをループして、特定の PdfField を取得します。
  • そのフィールドがテキストボックスであるかどうかを判別し、該当する場合は PdfTextBoxFieldWidget.Text プロパティを使用してテキストを設定します。
  • ステップ6を繰り返して、ラジオボタン、チェックボックス、コンボボックス、リストボックスに値を入力します。
  • PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;

namespace FillFormFields
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            //フォームを含むテンプレートを読み込む
            doc.LoadFromFile("Sample1.pdf");

            //ドキュメントからフォームを取得
            PdfFormWidget form = (PdfFormWidget)doc.Form;

            //フォームウィジェットコレクションを取得
            PdfFormFieldWidgetCollection formWidgetCollection = form.FieldsWidget;

            //ウィジェットをループ処理
            for (int i = 0; i < formWidgetCollection.Count; i++)
            {
                //特定のフィールドを取得
                PdfField field = formWidgetCollection[i];

                //フィールドがテキストボックスかどうかを確認
                if (field is PdfTextBoxFieldWidget)
                {
                    if (field.Name == "name")
                    {
                        //テキストボックスのテキストを設定
                        PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field;
                        textBoxField.Text = "カイラ・スミス";
                    }
                }

                //フィールドがラジオボタンかどうかを確認
                if (field is PdfRadioButtonListFieldWidget)
                {
                    if (field.Name == "gender")
                    {
                        //ラジオボタンの選択インデックスを設定
                        PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget)field;
                        radioButtonListField.SelectedIndex = 1;
                    }
                }

                //フィールドがコンボボックスかどうかを確認
                if (field is PdfComboBoxWidgetFieldWidget)
                {
                    if (field.Name == "country")
                    {
                        //コンボボックスの選択インデックスを設定
                        PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget)field;
                        int[] index = { 0 };
                        comboBoxField.SelectedIndex = index;
                    }
                }

                //フィールドがチェックボックスかどうかを確認
                if (field is PdfCheckBoxWidgetFieldWidget)
                {
                    //チェックボックスの「Checked」ステータスを設定
                    PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;
                    switch (checkBoxField.Name)
                    {
                        case "movie":
                            checkBoxField.Checked = true;
                            break;
                        case "music":
                            checkBoxField.Checked = true;
                            break;
                    }
                }

                //フィールドがリストボックスかどうかを確認
                if (field is PdfListBoxWidgetFieldWidget)
                {
                    if (field.Name == "degree")
                    {
                        //リストボックスの選択インデックスを設定
                        PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget)field;
                        int[] index = { 1 };
                        listBox.SelectedIndex = index;
                    }
                }
            }

            //ファイルに保存
            doc.SaveToFile("output/PDFフォームの記入.pdf", FileFormat.PDF);
            doc.Close();
        }
    }
}

C#:PDF で記入可能なフォームを作成、記入、削除する方法

フォームフィールドを PDF 文書から削除

PDF 文書のフォームフィールドは、インデックスまたは名前でアクセスでき、PdfFieldCollection.Remove() メソッドを使用して削除できます。Spire.PDF for .NET を使用して、特定のフィールドまたは既存の PDF 文書からすべてのフィールドを削除する手順は以下のとおりです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用して PDF 文書を読み込みます。
  • 文書からフォームウィジェットコレクションを取得します。
  • ウィジェットコレクションをループして特定の PdfField を取得し、PdfFieldCollection.Remove() メソッドを使用してフィールドを1つずつ削除します。
  • 特定のフォームフィールドを削除するには、PdfFormWidget.FieldsWidget["fieldName"] プロパティを使用してフィールドを取得し、PdfFieldCollection.Remove() メソッドを呼び出します。
  • PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;

namespace RemoveFormFields
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            //PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            //ドキュメントからフォームフィールドを取得
            PdfFormWidget formWidget = doc.Form as PdfFormWidget;

            //ウィジェットをループ処理
            for (int i = formWidget.FieldsWidget.List.Count - 1; i >= 0; i--)
            {
                //特定のフィールドを取得
                PdfField field = formWidget.FieldsWidget.List[i] as PdfField;

                //フィールドを削除
                formWidget.FieldsWidget.Remove(field);
            }

            //特定の名前でフィールドを取得
            //PdfField field = formWidget.FieldsWidget["name"];
            //フィールドを削除
            //formWidget.FieldsWidget.Remove(field);

            //ファイルに保存
            doc.SaveToFile("output/PDFからすべてのフォームファイルを削除.pdf");
            doc.Close();
        }
    }
}

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

PDF ドキュメントのヘッダーとフッターは、タイトル、著者、日付、ページ番号などの貴重な情報を提供し、ドキュメントの使いやすさとブランドアイデンティティを向上させます。この記事では、C# で Spire.PDF for .NET を使用して既存の PDF ドキュメントにヘッダーとフッターを追加する方法を説明します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

基本知識

Spire.PDF for .NET を使用して既存の PDF を操作する場合、座標系の原点はページの左上にあり、X 軸は右に、Y 軸は下に伸びています。ヘッダーを追加するには、上部の空白領域にコンテンツを配置し、フッターを追加するには下部の空白領域にコンテンツを配置します。

C#:PDF 文書にヘッダーとフッターを追加する方法

空白領域がコンテンツを収容するのに十分でない場合は、PDF ページの余白を広げることを検討できます。

C# で既存の PDF ドキュメントにヘッダーを追加する

Spire.PDF for .NET では、PdfCanvas.DrawString()PdfCanvas.DrawImage()PdfCanvas.DrawLine() などのメソッドを使用して、PDF ページにテキスト、画像、図形を描画できます。ページ番号や日付などの動的情報をヘッダーに追加するには、PdfPageNumberFieldPdfSectionNumberFieldPdfCreationDateField などの自動フィールドを使用します。

以下は Spire.PDF for .NET を使用して、テキスト、画像、日付、線で構成されるヘッダーを PDF ドキュメントに追加する手順です。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
  • テキストや図形を描画するために使用するフォント、ペン、ブラシオブジェクトを作成します。
  • PdfPageBase.Canvas.DrawString() メソッドを使用して、ページの上部空白領域にテキストを描画します。
  • PdfPageBase.Canvas.DrawLine() メソッドを使用して、ページの上部空白領域に線を描画します。
  • PdfImage.FromFile() メソッドを使用して画像を読み込みます。
  • PdfPageBase.Canvas.DrawImage() メソッドを使用して、ページの上部空白領域に画像を描画します。
  • ドキュメントの作成時間を反映する PdfCreationDateField オブジェクトを作成します。
  • PdfCreationDateField.Draw() メソッドを使用して、ページの上部空白領域に作成時間を描画します。
  • PdfDocument.SaveToFile() メソッドを使用してドキュメントを別の PDF ファイルに保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.AutomaticFields;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddHeaderToExistingPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            //PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            //ヘッダー用の画像を読み込む
            PdfImage headerImage = PdfImage.FromFile("Logo.png");

            //画像の幅をピクセルで取得
            float width = headerImage.Width;

            //ピクセルをポイントに変換
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            float pointWidth = unitCvtr.ConvertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);

            //ヘッダー用のテキストを指定
            string headerText = "E-iceblue テック\nwww.e-iceblue.com";

            //TrueTypeフォントを作成
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 12f, FontStyle.Bold), true);

            //ブラシを作成
            PdfBrush brush = PdfBrushes.Purple;

            //ペンを作成
            PdfPen pen = new PdfPen(brush, 1.0f);

            //作成日時フィールドを作成
            PdfCreationDateField creationDateField = new PdfCreationDateField(font, brush);
            creationDateField.DateFormatString = "yyyy-MM-dd";

            //静的文字列と日付フィールドを組み合わせる複合フィールドを作成
            PdfCompositeField compositeField = new PdfCompositeField(font, brush, "作成時間:{0}", creationDateField);
            compositeField.Location = new Point(55, 48);

            //ドキュメント内のページをループ
            for (int i = 0; i < doc.Pages.Count; i++)
            {
                //特定のページを取得
                PdfPageBase page = doc.Pages[i];

                //画像を上部の空白領域に描画
                page.Canvas.DrawImage(headerImage, page.ActualSize.Width - pointWidth - 55, 20);

                //テキストを上部の空白領域に描画
                page.Canvas.DrawString(headerText, font, brush, 55, 20);

                //上部の空白領域に線を描画
                page.Canvas.DrawLine(pen, new PointF(55, 70), new PointF(page.ActualSize.Width - 55, 70));

                //複合フィールドを上部の空白領域に描画
                compositeField.Draw(page.Canvas);
            }

            //ファイルに保存
            doc.SaveToFile("output/PDFにヘッダーを挿入.pdf");
            doc.Dispose();
        }
    }
}

C#:PDF 文書にヘッダーとフッターを追加する方法

C# で既存の PDF ドキュメントにフッターを追加する

同様に、PdfCanvas.DrawString()PdfCanvas.DrawImage()PdfCanvas.DrawLine() を使用してフッターを追加できます。PdfPageNumberFieldPdfPageCountField などの自動フィールドは動的データの統合を助けます。

以下は Spire.PDF for .NET を使用して、画像とページ番号で構成されるフッターを PDF ドキュメントに追加する手順です。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
  • PdfImage.FromFile() メソッドを使用して画像を読み込みます。
  • PdfPageBase.Canvas.DrawImage() メソッドを使用して、ページの下部空白領域に画像を描画します。
  • PdfPageNumberField オブジェクトと PdfPageCountField オブジェクトを作成し、それらを PdfCompositeField オブジェクトに組み合わせて "X/Y" という文字列を返します。
  • PdfCompositeField.Draw() メソッドを使用して、ページの下部空白領域にページ番号を描画します。
  • PdfDocument.SaveToFile() メソッドを使用してドキュメントを別の PDF ファイルに保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.AutomaticFields;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace AddHeaderToExistingPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成
            PdfDocument doc = new PdfDocument();

            //PDFファイルを読み込む
            doc.LoadFromFile("Sample.pdf");

            //画像を読み込む
            PdfImage footerImage = PdfImage.FromFile("bg.png");

            //TrueTypeフォントを作成
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 12f, FontStyle.Bold), true);

            //ブラシを作成
            PdfBrush brush = PdfBrushes.White;

            //ページ番号フィールドを作成
            PdfPageNumberField pageNumberField = new PdfPageNumberField();

            //ページ数フィールドを作成
            PdfPageCountField pageCountField = new PdfPageCountField();

            //ページ数フィールドとページ番号フィールドを単一の文字列に結合する複合フィールドを作成
            PdfCompositeField compositeField = new PdfCompositeField(font, brush, "{0} / {1}", pageNumberField, pageCountField);

            //テキストサイズを取得
            SizeF fontSize = font.MeasureString(compositeField.Text);

            //ページサイズを取得
            SizeF pageSize = doc.Pages[0].Size;

            //複合フィールドの位置を設定
            compositeField.Location = new Point((int)(pageSize.Width - fontSize.Width) / 2, (int)pageSize.Height - 45);

            //ドキュメント内のページをループ
            for (int i = 0; i < doc.Pages.Count; i++)
            {
                //特定のページを取得
                PdfPageBase page = doc.Pages[i];

                //画像を下部の空白領域に描画
                page.Canvas.DrawImage(footerImage, 55, pageSize.Height - 65, pageSize.Width - 110, 50);

                //複合フィールドを下部の空白領域に描画
                compositeField.Draw(page.Canvas);
            }

            //ファイルに保存
            doc.SaveToFile("output/PDFにフッターを挿入.pdf");
            doc.Dispose();
        }
    }
}

C#:PDF 文書にヘッダーとフッターを追加する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

PDF は、さまざまなプラットフォームでドキュメントを共有および保存するための標準的な形式となっており、プロフェッショナルな場面だけでなく個人的な環境でも広く使用されています。ただし、高品質な PDF ドキュメントを作成するには、複数の確認と修正が必要です。この文脈において、PDF ファイルを効率的に比較し、その違いを明確に特定する方法を知っていることは非常に重要です。これにより、ドキュメント編集者はドキュメントの異なるバージョン間の相違点を素早く特定できるため、ドキュメントの作成とレビューのプロセスでかなりの時間を節約することができます。本記事では、C# プログラムで Spire.PDF for .NET を使用して PDF ドキュメントを比較する方法を説明します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

C# で 2 つの PDF ドキュメントを比較する

Spire.PDF for .NET を使用すると、開発者は PdfComparer クラスのインスタンスを作成し、2 つの PdfDocument オブジェクトをパラメータとして渡し、PdfComparer.Compare(String fileName) メソッドを使用して 2 つのドキュメントを比較することができます。比較結果は新しい PDF ドキュメントとして保存され、2 つの PDF 間の差異をさらに分析やレビューすることができます。

比較結果の PDF ドキュメントでは、左側に元の 2 つのドキュメントが表示され、削除された項目は赤色で、追加された項目は黄色で表示されます。

以下に、2つの PDF ドキュメントを比較するための詳細な手順を示します:

  • PdfDocument クラスのオブジェクトを2つ作成し、PdfDocument.LoadFromFile() メソッドを使用して 2 つの PDF ドキュメントを読み込みます。
  • PdfComparer クラスのインスタンスを作成し、2 つの PdfDocument オブジェクトをパラメータとして渡します。
  • 2 つのドキュメントを比較し、PdfComparer.Compare() メソッドを使用して結果を別の PDF ドキュメントとして保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Comparison;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントをロードします
            PdfDocument pdf1 = new PdfDocument();
            pdf1.LoadFromFile("サンプル1.pdf");

            // 別のPdfDocumentクラスのオブジェクトを作成し、別のPDFドキュメントをロードします
            PdfDocument pdf2 = new PdfDocument();
            pdf2.LoadFromFile("サンプル2.pdf");

            // PdfComparerクラスのオブジェクトを作成し、2つのドキュメントを比較します
            PdfComparer comparer = new PdfComparer(pdf1, pdf2);
            
            // 2つのドキュメントを比較し、比較結果を別のPDFドキュメントに保存します
            comparer.Compare("output/比較の結果.pdf");
            pdf1.Close();
            pdf2.Close();
        }
    }
}

C#:PDF ドキュメントを比較する方法

2 つの PDF ドキュメントの特定のページ範囲を比較する

PdfComparer クラスのインスタンスを作成した後、開発者は PdfComparer.Options.SetPageRange() メソッドを使用して比較するページ範囲を設定することもできます。これにより、2 つの PDF ドキュメント内の指定されたページ範囲のみを比較することが可能です。具体的な手順は以下の通りです:

  • PdfDocument クラスの 2 つのオブジェクトを作成し、PdfDocument.LoadFromFile() メソッドを使用して 2 つの PDF ドキュメントを読み込みます。
  • PdfComparer クラスのインスタンスを作成し、2 つの PdfDocument オブジェクトをパラメータとして渡します。
  • PdfComparer.Options.SetPageRange() メソッドを使用して比較するページ範囲を設定します。
  • PdfComparer.Compare() メソッドを使用して、2 つの PDF ドキュメントの指定されたページ範囲を比較し、結果を別の PDF ドキュメントとして保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Comparison;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントをロードします
            PdfDocument pdf1 = new PdfDocument();
            pdf1.LoadFromFile("サンプル1.pdf");

            // 別のPdfDocumentクラスのオブジェクトを作成し、別のPDFドキュメントをロードします
            PdfDocument pdf2 = new PdfDocument();
            pdf2.LoadFromFile("サンプル2.pdf");

            // PdfComparerクラスのオブジェクトを作成し、2つのドキュメントを比較します
            PdfComparer comparer = new PdfComparer(pdf1, pdf2);

            // 比較するページ範囲を設定します
            comparer.Options.SetPageRanges(1, 1, 1, 1);
            
            // 指定されたページ範囲を比較し、比較結果を別のPDFドキュメントに保存します
            comparer.Compare("output/ページ範囲の比較結果.pdf");
            pdf1.Close();
            pdf2.Close();
        }
    }
}

C#:PDF ドキュメントを比較する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in 文書操作

コードによる PDF 生成にはさまざまな利点があります。リアルタイムデータ、データベースレコード、ユーザー入力などの動的コンテンツを容易に統合するのに役立ちます。この機能は、ユーザーにより優れたカスタマイズと自動化機能を提供し、面倒な手動操作も回避します。この記事では、Spire.PDF for .NET を使用して PDF ドキュメントを作成する方法を紹介します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを.NETプロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

予備知識

Spire.PDF for .NET のページ(PdfPageBase クラスで表される)は、クライアント領域と周囲のマージンで構成されています。コンテンツ領域は、ユーザーがさまざまなコンテンツを記述するための領域であり、ページ余白は通常空白のエッジになります。

下図に示すように、ページ上の座標系の原点はクライアント領域の左上隅にあり、x 軸は水平に右に伸び、y 軸は垂直に下に伸びています。クライアント領域に追加するすべての要素は、指定された座標に基づいている必要があります。

C#/VB.NET:PDF ドキュメントを作成する方法

さらに、次の表に重要なクラスと方法を示します。これは、以下のコードを理解しやすくするのに役立ちます。

クラスと方法 説明
PdfDocument クラス PDF ドキュメント モデルを表します。
PdfPageBase クラス PDF ドキュメント内のページを表します。
PdfSolidBrush クラス オブジェクトを単色で塗りつぶすブラシを表します。
PdfTrueTypeFont クラス True Typeフォントを表します。
PdfStringFormat クラス アライメント、文字間隔、インデントなどのテキスト書式情報を表します。
PdfTextWidget クラス 複数のページにまたがる機能を持つテキスト領域を表します。
PdfTextLayout クラス テキストのレイアウト情報を表します。
PdfDocument.Pages.Add() メソッド PDF ドキュメントにページを追加します。
PdfPageBase.Canvas.DrawString() メソッド 指定したフォントとブラシオブジェクトを使用して、ページ上の指定した位置に文字列を描画します。
PdfTextWidget.Draw() メソッド テキストウィジェットをページの指定した位置に描画します。
PdfDocument.Save() メソッド ドキュメントを PDF ファイルに保存します。

C# と VB.NET で PDF ドキュメントを作成する

Spire.PDF for .NET では、PDF ドキュメントにさまざまな要素を追加できます。この記事では、プレーンテキストの PDF ドキュメントを作成する方法について説明します。詳細な手順は次のとおりです。

  • PdfDocument オブジェクトを作成します。
  • PdfDocument.Pages.Add() メソッドを使用してページを追加します。
  • ブラシとフォントのオブジェクトを作成します。
  • PdfPageBase.Canvas.DrawString() メソッドを使用して、ページの指定された座標で文字列を描画します。
  • テキストを保存する PdfTextWidget オブジェクトを作成します。
  • PdfTextWidget.Draw() メソッドを使用して、ページの指定された位置にテキストのウィジェットを描画します
  • PdfDocument.Save() メソッドを使用してドキュメントを PDF ファイルに保存します。
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace CreatePdfDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentオブジェクトを作成する
            PdfDocument doc = new PdfDocument();

            //ページを追加する
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(35f));

            //タイトルのテキストを指定する
            string titleText = "ライセンス契約";

            //Solid Brusheを作成する
            PdfSolidBrush titleBrush = new PdfSolidBrush(new PdfRGBColor(Color.Blue));
            PdfSolidBrush paraBrush = new PdfSolidBrush(new PdfRGBColor(Color.Black));

            //True Typeフォントを作成する
            PdfTrueTypeFont titleFont = new PdfTrueTypeFont(new Font("Yu Mincho", 18f, FontStyle.Bold),true); 
            PdfTrueTypeFont paraFont = new PdfTrueTypeFont(new Font("Yu Mincho", 12f, FontStyle.Regular), true);

            //PdfStringFormatクラスによるテキストの配置を設定する
            PdfStringFormat format = new PdfStringFormat();
            format.Alignment = PdfTextAlignment.Center;

            //ページにタイトルを描画する
            page.Canvas.DrawString(titleText, titleFont, titleBrush, page.Canvas.ClientSize.Width / 2, 20, format);

            //.txtファイルから段落テキストを取得する
            string paraText = File.ReadAllText("content.txt");

            //段落内容を保存するPdfTextWidgetオブジェクトを作成する
            PdfTextWidget widget = new PdfTextWidget(paraText, paraFont, paraBrush);

            //段落の内容を配置する長方形を作成する
            RectangleF rect = new RectangleF(0, 50, page.Canvas.ClientSize.Width, page.Canvas.ClientSize.Height);

            //PdfLayoutTypeをPaginateに設定して内容を自動的にページング
            PdfTextLayout layout = new PdfTextLayout();
            layout.Layout = PdfLayoutType.Paginate;

            //ページに段落テキストを描画する
            widget.Draw(page, rect, layout);

            //ファイルに保存する
            doc.SaveToFile("CreatePdfDocument.pdf");
            doc.Dispose();
        }
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
 
Namespace CreatePdfDocument
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'PdfDocumentオブジェクトを作成する
            Dim doc As PdfDocument =  New PdfDocument() 
 
            'ページを追加する
            Dim page As PdfPageBase =  doc.Pages.Add(PdfPageSize.A4,New PdfMargins(35f)) 
 
            'タイトルのテキストを指定する
            Dim titleText As String =  "ライセンス契約" 
 
            'Solid Brusheを作成する
            Dim titleBrush As PdfSolidBrush =  New PdfSolidBrush(New PdfRGBColor(Color.Blue)) 
            Dim paraBrush As PdfSolidBrush =  New PdfSolidBrush(New PdfRGBColor(Color.Black)) 
 
            'True Typeフォントを作成する
            Dim titleFont As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Yu Mincho ",18f,FontStyle.Bold),True) 
            Dim paraFont As PdfTrueTypeFont =  New PdfTrueTypeFont(New Font("Yu Mincho ",12f,FontStyle.Regular),True) 
 
            'PdfStringFormatクラスによるテキストの配置を設定する
            Dim format As PdfStringFormat =  New PdfStringFormat() 
            format.Alignment = PdfTextAlignment.Center
 
            'ページにタイトルを描画する
            page.Canvas.DrawString(titleText, titleFont, titleBrush, page.Canvas.ClientSize.Width / 2, 20, format)
 
            '.txtファイルから段落テキストを取得する
            Dim paraText As String =  File.ReadAllText("content.txt") 
 
            '段落内容を保存するPdfTextWidgetオブジェクトを作成する
            Dim widget As PdfTextWidget =  New PdfTextWidget(paraText,paraFont,paraBrush) 
 
            '段落の内容を配置する長方形を作成する
            Dim rect As RectangleF =  New RectangleF(0,50,page.Canvas.ClientSize.Width,page.Canvas.ClientSize.Height) 
 
            'PdfLayoutTypeをPaginateに設定して内容を自動的にページング
            Dim layout As PdfTextLayout =  New PdfTextLayout() 
            lay.Layout = PdfLayoutType.Paginate
 
            'ページに段落テキストを描画する
            widget.Draw(page, rect, layout)
 
            'ファイルに保存する
            doc.SaveToFile("CreatePdfDocument.pdf")
            doc.Dispose()
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF ドキュメントを作成する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in 文書操作

PDF レイヤー機能は、PDF ファイルのコンテンツをレイヤーに配置することをサポートします。 ユーザーは、同じ PDF ファイル内で一部のコンテンツを表示するように設定し、一部のコンテンツを非表示にするように選択的に設定できます。PDF レイヤーは、レイヤー化されたアートワーク、地図、および CAD 図面で使用される一般的な要素です。この記事では、Spire.PDF for .NET を使用してPDF のレイヤーを追加、非表示、または削除する方法を紹介します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

C# と VB.NET で PDF のレイヤーを追加する

Spire.PDF for.NET が提供する PdfDocument.Layers.AddLayer() メソッドでは、PDF にレイヤーの追加をサポートします。PDF レイヤー上にテキスト、線、画像、または形状を描画できます。以下に詳細な操作手順を示します。

  • PdfDocument インスタンスを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF ドキュメントをロードします。
  • PdfDocument.Layers.AddLayer(string) メソッドを使用して、指定した名前のレイヤーを PDF に追加します。
  • PdfDocument.Layers.AddLayer(string, PdfVisibility) メソッドを使用して、レイヤーを追加するときにレイヤーの可視性を設定します。
  • PdfLayer.CreateGraphics() メソッドを使用してレイヤーのキャンバスを作成します。
  • キャンバスにテキスト、画像、またはその他の要素を描画します。
  • PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Layer;
using System.Drawing;

namespace AddLayersToPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentインスタンスを作成し、サンプルPDFをロードする
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile(@"Sample.pdf");

            //AddLayerWatermark メソッドを使用して透かしのレイヤーを追加する
            AddLayerWatermark(pdf);

            //AddLayerHeaderメソッドを使用してヘッドーのレイヤーを追加する
            AddLayerHeader(pdf);

            //結果ドキュメントを保存する
            pdf.SaveToFile("AddLayers.pdf");
            pdf.Close();
        }

        private static void AddLayerWatermark(PdfDocument doc)
        {
            //「透かし」という名前のレイヤーを作成する
            PdfLayer layer = doc.Layers.AddLayer("透かし");

            //フォントを作成する
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Mincho", 48), true);

            //透かしのテキストを指定する
            string watermarkText = "機密";

            //テキストのサイズを取得する
            SizeF fontSize = font.MeasureString(watermarkText);

            //2つのオフセットを計算する
            float offset1 = (float)(fontSize.Width * System.Math.Sqrt(2) / 4);
            float offset2 = (float)(fontSize.Height * System.Math.Sqrt(2) / 4);

            //ページ数を取得する
            int pageCount = doc.Pages.Count;

            //2つの変数を宣言する
            PdfPageBase page;
            PdfCanvas canvas;

            //ページをループする
            for (int i = 0; (i < pageCount); i++)
            {
                page = doc.Pages[i];

                //レイヤーにキャンバスを作成する
                canvas = layer.CreateGraphics(page.Canvas);
                canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
                canvas.SetTransparency(0.4f);
                canvas.RotateTransform(-45);

                //レイヤーのキャンバスに文字列を描画する
                canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0);
            }
        }
        private static void AddLayerHeader(PdfDocument doc)
        {
            //「ヘッダー」という名前のレイヤーを作成する
            PdfLayer layer = doc.Layers.AddLayer("ヘッダー");

            //ページのサイズを取得する
            SizeF size = doc.Pages[0].Size;

            //XとYの初期値を指定する
            float x = 90;
            float y = 40;

            //ページ数を取得する
            int pageCount = doc.Pages.Count;

            //2つの変数を宣言する 
            PdfPageBase page;
            PdfCanvas canvas;

            //ページをループする
            for (int i = 0; (i < pageCount); i++)
            {
                //レイヤーに画像を描画する
                PdfImage pdfImage = PdfImage.FromFile(@"image.jpg");
                float width = pdfImage.Width;
                float height = pdfImage.Height;
                page = doc.Pages[i];
                canvas = layer.CreateGraphics(page.Canvas);
                canvas.DrawImage(pdfImage, x, y, width, height);

                //レイヤーに線を描画する
                PdfPen pen = new PdfPen(PdfBrushes.DarkGray, 2);
                canvas.DrawLine(pen, x, (y + (height + 5)), (size.Width - x), (y + (height + 2)));
            }
        }
    }
} 
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Graphics.Layer
Imports System.Drawing

Namespace AddLayersToPdf
    Class Program
        Private Shared Sub Main(ByVal args As String())
            'PdfDocumentインスタンスを作成し、PDFをロードする
            Dim pdf As PdfDocument = New PdfDocument()
            pdf.LoadFromFile("Sample.pdf")

            'AddLayerWatermark メソッドを使用して透かしのレイヤーを追加する
            Program.AddLayerWatermark(pdf)

            'AddLayerHeaderメソッドを使用してヘッドのレイヤーを追加する
            Program.AddLayerHeader(pdf)

            '結果ドキュメントを保存する
            pdf.SaveToFile("AddLayers.pdf")
            pdf.Close()
        End Sub

        Private Shared Sub AddLayerWatermark(ByVal doc As PdfDocument)
            '「透かし」という名前のレイヤーを作成する
            Dim layer As PdfLayer = doc.Layers.AddLayer("透かし")

            'フォントを作成する
            Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("Yu Mincho", 48), True)

            '透かしのテキストを指定する
            Dim watermarkText = "機密"

            'テキストのサイズを取得する
            Dim fontSize As SizeF = font.MeasureString(watermarkText)

            '2つのオフセットを計算する
            Dim offset1 As Single = fontSize.Width * Math.Sqrt(2) / 4
            Dim offset2 As Single = fontSize.Height * Math.Sqrt(2) / 4

            'ページ数を取得する
            Dim pageCount As Integer = doc.Pages.Count

            '2つの変数を宣言する
            Dim page As PdfPageBase
            Dim canvas As PdfCanvas

            'ページをループする
            Dim i = 0

            While i < pageCount
                page = doc.Pages(i)

                'レイヤーにキャンバスを作成する
                canvas = layer.CreateGraphics(page.Canvas)
                canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
                canvas.SetTransparency(0.4F)
                canvas.RotateTransform(-45)

                'レイヤーのキャンバスに文字列を描画する
                canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0)
                i += 1
            End While
        End Sub
        Private Shared Sub AddLayerHeader(ByVal doc As PdfDocument)
            '「ヘッダー」という名前のレイヤーを作成する
            Dim layer As PdfLayer = doc.Layers.AddLayer("ヘッダー")

            'ページのサイズを取得する
            Dim size As SizeF = doc.Pages(0).Size

            'XとYの初期値を指定する
            Dim x As Single = 90
            Dim y As Single = 40

            'ページ数を取得する
            Dim pageCount As Integer = doc.Pages.Count

            '2つの変数を宣言する 
            Dim page As PdfPageBase
            Dim canvas As PdfCanvas

            'ページをループする
            Dim i = 0

            While i < pageCount
                'レイヤーに画像を描画する
                Dim pdfImage As PdfImage = PdfImage.FromFile("image.jpg")
                Dim width As Single = pdfImage.Width
                Dim height As Single = pdfImage.Height
                page = doc.Pages(i)
                canvas = layer.CreateGraphics(page.Canvas)
                canvas.DrawImage(pdfImage, x, y, width, height)

                'レイヤーに線を描画する
                Dim pen As PdfPen = New PdfPen(PdfBrushes.DarkGray, 2)
                canvas.DrawLine(pen, x, y + (height + 5), size.Width - x, y + (height + 2))
                i += 1
            End While
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF のレイヤーを追加、非表示、または削除する方法

C# と VB.NET で PDF のレイヤーの可視性を設定する

既存のレイヤーの可視性を設定するには、PdfDocument.Layers プロパティを使用して、インデックスまたは名前で指定したレイヤーを取得します。次に、PdfLayer.Visibility プロパティを使用してレイヤーを表示または非表示にします。以下に詳細な操作手順を示します。

  • PdfDocument インスタンスを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用してサンプル PDF をロードします。
  • PdfDocument.Layers.Visibility プロパティを使用して、指定したレイヤーの可視性を設定します。
  • PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics.Layer;

namespace HideLayer
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentインスタンスを作成する
            PdfDocument pdf = new PdfDocument();

            //サンプルPDFドキュメントをロードする
            pdf.LoadFromFile("AddLayers.pdf");

            //指定したレイヤーをインデックスで非表示にする
            pdf.Layers[0].Visibility = PdfVisibility.Off;

            //指定したレイヤーを名前で非表示にする
            //pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;

            //結果ドキュメントを保存する
            pdf.SaveToFile("HideLayer.pdf");
        }
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics.Layer

Namespace HideLayer
    Class Program
        Private Shared Sub Main(ByVal args() As String)

            'PdfDocumentインスタンスを作成する
            Dim pdf As PdfDocument = New PdfDocument

            'サンプルPDFドキュメントをロードする
            pdf.LoadFromFile("AddLayers.pdf")

            '指定したレイヤーをインデックスで非表示にする
            pdf.Layers(0).Visibility = PdfVisibility.Off

            '指定したレイヤーを名前で非表示にする
            'pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;

            '結果ドキュメントを保存する
            pdf.SaveToFile("HideLayer.pdf")
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF のレイヤーを追加、非表示、または削除する方法

C# とVB.NET で PDF のレイヤーを削除する

Spire.PDF for .NET では、PdfDocument.Layers.RemoveLayer(string) メソッドを使用して、既存のレイヤーを名前で削除することがサポートします。ただし、同名の PDF レイヤーが存在する場合があります。このメソッドは、同じ名前のすべての PDF レイヤーを削除します。詳細な手順は次のとおりです。

  • PdfDocument インスタンスを作成します。
  • PdfDocument.LoadFromFile() メソッドを使用して、PDF ドキュメントをロードします。
  • PdfDocument.Layers.RemoveLayer(string) メソッドを使用して、指定したレイヤーを名前で削除します。
  • PdfDocument.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
  • C#
  • VB.NET
using Spire.Pdf;

namespace DeleteLayer
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentインスタンスを作成する
            PdfDocument pdf = new PdfDocument();

            //PDFドキュメントをロードする
            pdf.LoadFromFile("AddLayers.pdf");

            //名前でレイヤーを削除する
            pdf.Layers.RemoveLayer(("透かし"));

            //結果ドキュメントを保存する
            pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF);
        }
    }
}
Imports Spire.Pdf

Namespace DeleteLayer
    Class Program
        Private Shared Sub Main(ByVal args() As String)
            'PdfDocumentインスタンスを作成する
            Dim pdf As PdfDocument = New PdfDocument

            'PDFドキュメントをロードする
            pdf.LoadFromFile("AddLayers.pdf")

            '名前でレイヤーを削除する
            pdf.Layers.RemoveLayer("透かし")

            '結果ドキュメントを保存する
            pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF)
        End Sub
    End Class
End Namespace

C#/VB.NET:PDF のレイヤーを追加、非表示、または削除する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in 文書操作

大きな PDF ドキュメントは、電子メールで PDF ファイルを転送したい場合や、限られたストレージ容量のデバイスに PDF ファイルを保存したい場合など、すべての場合に適用されません。その時、PDF ファイルのサイズを圧縮することは、この問題を解決するための完璧な方法かもしれません。この記事では、Spire.PDF for .NET を使用して、C# および VB.NET でプログラムによって PDF ファイルを圧縮する方法を示します。

ここでは、画像、フィールド、コメント、ブックマーク、添付ファイル、埋め込みフォントを削除することによって PDF サイズを小さくすることには触れません。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

PDF ファイルのコンテンツと画像を圧縮する

次の手順は、Spire.PDF for .NET を使用して PDFファイルを圧縮する方法を示しています

  • PdfDocument クラスのオブジェクトを作成する
  • PdfDocumentLoadFromFile() メソッドを使用して、PDF ドキュメントをロードする。 
  • PdfDocumentFileInfo.IncrementalUpdate の属性を false に設定して incremental update を無効にします。
  • 圧縮レベルを「最適」に設定して、ドキュメントのコンテンツを圧縮します。PdfCompressionLevel の例から他のいくつかのレベルを選択できます。
  • ドキュメント内のページをトラバースし、PdfImageHelper.GetImagesInfo() メソッドを使用して、各ページの画像情報セットを取得します。
  • コレクション内のすべてのアイテムをトラバースし、PdfImageHelperReplaceImage() メソッドを使用して、各ピクチャを圧縮ピクチャに置き換えます。
  • PdfDocumentSaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C#
  • VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using Spire.Pdf.Utilities;

namespace CompressPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentクラスのオブジェクトを作成する
            PdfDocument doc = new PdfDocument();

            // PDFファイルのロードする
            doc.LoadFromFile(@"sample.pdf");

            // incremental updateを無効にする
            doc.FileInfo.IncrementalUpdate = false;

            //圧縮レベルを最適に設定する
            doc.CompressionLevel = PdfCompressionLevel.Best;

            //ドキュメント内のページをループブラウズする
            foreach (PdfPageBase page in doc.Pages)
            {
                //PdfImageHelperのオブジェクトを作成する
                PdfImageHelper helper = new PdfImageHelper();

                //特定のページの画像情報セットを取得する
                PdfImageInfo[] imagesInfo = helper.GetImagesInfo(page);

                //コレクション内のすべてのアイテムをループブラウズする
                foreach (PdfImageInfo imageInfo in imagesInfo)
                {
                    //特定の画像を圧縮画像と一緒に配置する           
                    helper.ReplaceImage(imageInfo, CompressImage(imageInfo.Image));
                }

            }

            //ドキュメントを別のPDFファイルに保存する
            doc.SaveToFile("output.pdf");
            doc.Close();
        }

        //画質を低下させることで画像を圧縮する
        private static PdfBitmap CompressImage(Image img)
        {
            PdfBitmap newImage = new PdfBitmap(img);
            newImage.Quality = 10;
            return newImage;
        }
    }
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Imports Spire.Pdf.Utilities
 
Namespace CompressPdf
    Class Program
        Shared  Sub Main(ByVal args() As String)
            ' PdfDocumentクラスのオブジェクトを作成する
            Dim doc As PdfDocument =  New PdfDocument() 
 
            ' PDFファイルのロードする
            doc.LoadFromFile("sample.pdf")
 
            ' incremental updateを無効にする
            doc.FileInfo.IncrementalUpdate = False
 
            '圧縮レベルを最適に設定する
            doc.CompressionLevel = PdfCompressionLevel.Best
 
            'ドキュメント内のページをループブラウズする
            Dim page As PdfPageBase
            For Each page In doc.Pages
                ' PdfImageHelperのオブジェクトを作成する
                Dim helper As PdfImageHelper =  New PdfImageHelper() 
 
                '特定のページの画像情報セットを取得する
                Dim imagesInfo() As PdfImageInfo =  helper.GetImagesInfo(page) 
 
                'コレクション内のすべてのアイテムをループブラウズする
                Dim imageInfo As PdfImageInfo
                For Each imageInfo In imagesInfo
                    '特定の画像を圧縮画像と一緒に配置する   
                    helper.ReplaceImage(imageInfo, CompressImage(imageInfo.Image))
                Next
 
            Next
 
            'ドキュメントを別のPDFファイルに保存する
            doc.SaveToFile("output.pdf")
            doc.Close()
            System.Diagnostics.Process.Start("output.pdf")
 
        End Sub
 
        '画質を低下させることで画像を圧縮する
        Private Shared Function CompressImage(ByVal img As Image) As PdfBitmap
            Dim NewImage As PdfBitmap =  New PdfBitmap(img) 
            NewImage.Quality = 10
            Return NewImage
        End Function
    End Class
End Namespace

C#/VB.NET:PDF ファイルを圧縮する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Published in 文書操作
1 / 2