このページには自動翻訳されたテキストを含めることができます。

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

.NET 開発者として、PDF レポート、請求書、領収書、またはその他の文書を生成する必要がありますか? Docotic.Pdf ライブラリ を使用して、.NET Core、.NET Standard、または .NET Framework プロジェクトで PDF ドキュメントを生成します。 PDF 形式についてまったく知らなくても、これ を簡単に行うことができます。

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

PDF 生成用の .NET API

Docotic.Pdf は、外部依存関係のない 100% マネージド コード ライブラリです。 これを使用し て、Windows、Linux、Amazon、Azure クラウド環境で PDF ドキュメントを作成できます。 macOS、iOS、Androidなどのクラウド環境でも大丈夫です。

ライブラリには、PDF ドキュメントを生成するためのさまざまな方法が用意されています。 まず、高レベルの レイアウト API を使用して、ページ ヘッダーとフッター、表、段落を追加し、コンテンツをページに自動的 に分割できます。 レイアウト API は 無料の Docotic.Pdf.Layout アドオン で利用できます。

または、HTML to PDF アドオン (こちらも無料) を使用して、HTML テンプ レートに基づいて PDF ドキュメントを作成できます。 詳細については、HTML を PDF に変換す る の記事を参照してください。

また、コア ライブラリ API を使用して PDF ドキュメントを作成できます。 あらゆる PDF コンテンツ - テ キスト画像ベクター グラフィック ス をサポートします。)、フォー ム注釈ブックマー クレイヤー、および その他。 ただし、コア API は、ヘッ ダー、テーブル、セクションなどの高レベルのレイアウト コンポーネントをサポートしません。 コア ライブ ラリを使用する場合は、コンテンツを測定し、PDF ページ間で自分で分割する必要があります。

Docotic.Pdf ライブラリ 9.3.17014-dev レイアウトアドオン 9.3.17014-dev HTMLからPDFへのアドオン 9.3.17014-dev
回帰テスト 14,645人が合格 NuGet の合計ダウンロード数 4,172,488

コアライブラリとアドオンを併用することもできます。 たとえば、レイアウト API を使用して PDF ドキュメ ントを生成し、コア ライブラリを使用してさらにコンテンツを追加します。 レイアウト アドオンは、.NET Standard 2.1、.NET Core、.NET 5 以降のフレームワークをサポートしていることに注意してください。 コア ライブラリと HTML to PDF アドオンは、.NET Standard 2.0、.NET 4.7.2+、.NET Core、.NET 5 以降をサポー トします。

Docotic.Pdf アドオンは NuGet で入手でき、ライブラリの バイナリ付き zip に含まれ ています。 評価モードの制限なしでライブラリを試すには、ここ で無料の期 間限定ライセンス キーを入手できます。

レイアウト API を使用して PDF ドキュメントを作成する

この C# サンプルでは、レイアウト API を使用して C# で PDF ドキュメントを生成する方法を示します:

PdfDocumentBuilder
    .Create()
    .Generate("long-text.pdf", doc => doc.Pages(page =>
    {
        string text = File.ReadAllText(@"C# in Depth, Fourth Edition.txt");
        page.Content().Text(text);

        page.Footer().AlignCenter().Text(t => t.CurrentPageNumber());
    }));

このコードはテキスト ファイルを PDF に変換します。 長いテキストをページに分割し、フッター領域にペー ジ番号も描画します。 テキストの高さを計算したり、ページ数を数えたりする必要はありません。これらの日 常的なタスクはライブラリが処理します。

レイアウト API は流暢な API です。 ほとんどの呼び出しは連鎖できるため、「宣言型」フレームワークより もコンパクトなコードを作成できます。 API をさらに詳しく見てみましょう。

PDF ドキュメントのプロパティを設定する

PDF の生成は PdfDocumentBuilder クラス から始まりま す。 生成された PDF ドキュメントのプロパティを指定できます。 たとえば、メタデータ、暗号化、PDF バー ジョンを設定したり、高速 Web ビューを有効にしたりできます。 基本的な C# サンプルは次のとおりです:

PdfDocumentBuilder
    .Create()
    .Encryption(new PdfStandardEncryptionHandler("owner", "user"))
    .Info(info =>
    {
        info.Author = "Docotic.Pdf library";
        info.Title = "How to create PDF in .NET";
        info.Keywords = "C#, VB.NET";
    })
    .Version(PdfVersion.Pdf16)
    .Generate("result.pdf", doc => doc.Pages(_ => {}));

このサンプルでは、カスタム メタデータを含む空のパスワードで保護された PDF ドキュメントを作成し、 ファイルに保存します。 PdfDocumentBuilder.Generate(Stream, ..) オーバーロー ド を使用して、ドキュメントをストリームに保存することもできます。

PdfDocumentBuilder をセットアップしたら、PDF ドキュメントにコンテンツを入力します。 レイアウト API は、共通リソース (タイポグラフィ、画像) を登録し、PDF ページ コンテンツを定義するための Document オブジェクトを提供します。 PdfDocumentBuilder.Generate メソッドの 2 番目の引数で Document を設定できます。 PDF ページを設 定する方法を学びましょう。

PDF ページレイアウトを定義する

この C# サンプルでは、A3 ページを横向きにした PDF ドキュメントを作成する方法を示します:

PdfDocumentBuilder.Create().Generate("pages.pdf", doc =>
{
    doc.Pages((PageLayout page) =>
    {
        page.Size(PdfPaperSize.A3, PdfPaperOrientation.Landscape)
            .MarginVertical(50)
            .MarginHorizontal(40);

        page.Header().PaddingBottom(30).AlignRight().Text("Hello PDF");

        page.Content().Column(c =>
        {
            c.Item().Text("Page 1");
            c.Item().PageBreak();
            c.Item().Text("Page 2");
        });

        page.Footer().Text(t => t.CurrentPageNumber());
    });
});

Document.Pages() メソッド は、1 つ以上のページのレイアウ トを定義します。 まず、サンプル コードでは、すべてのページに共通の設定 (サイズ、方向、余白) を設定 します。 コンテンツの方向、デフォルトのテキスト スタイル、または背景色を指定することもできます。

次に、サンプルはページ レイアウトとコンテンツを生成します。 PageLayout クラ ス は、ページ コンテンツを次のスロットに配置するためのメソッド を提供します。

  • Background() - 他のコンテンツで覆われた背景レイヤー
  • Header() - すべてのページに共通のヘッダー
  • Content() - メインページのコンテンツ
  • Footer() - すべてのページに共通のフッター
  • Foreground() - 他のコンテンツを覆う前景レイヤー

レイアウト エンジンは、PageLayout.Content() スロットに追加されたコンテンツに応じてページを生成し ます。 他のスロットはページごとに繰り返されます。 LayoutContainer クラ ス を使用して、スロットにコンテンツを追加できます。 これ はレイアウト API の重要な構成要素であり、任意のレイアウト、テーブル、テキスト、または画像を生成でき るようになります。

前のサンプルでは、コンテンツを垂直に積み重ねる LayoutContainer.Column メソッドを使用しています。 この列には、最初のページのテキスト チャンク、明示的な改ページ、2 番目のページのテキスト チャンクの 3 つの項目が含まれています。

LayoutContainer.Row メソッドもあります。 行と列を一緒に使用して 複数列の PDF ドキュメントを作成 する方法 を参照してください。

PDF ドキュメント内でさまざまなページ レイアウトを混在させることができます。 Document.Pages メソッ ドを複数回呼び出すだけです。 例については、GitHub の PDF ページ レイアウト設定 サンプルを参照してください。

PDF ドキュメントにテキストを追加する

テキストは PDF ドキュメントの重要な部分です。 LayoutContainer.Text メソッ ド を使用してテキストを追加できます。 前 に、LayoutContainer.Text(string) オーバーロードの使用例を見てきました。 このメソッドの別のオー バーロードを見てみましょう:

PdfDocumentBuilder.Create().Generate("text.pdf", doc =>
{
    doc.Pages(p => p.Content().Text(text =>
    {
        text.Span("VB.NET").Style(t => t.Strong);
        text.Span(" is a multi-paradigm, object-oriented programming language, implemented on.NET, Mono, and the ");
        text.Hyperlink(".NET Framework", new Uri("https://dotnet.microsoft.com/en-us/download/dotnet-framework"));
        text.Line(".");

        text.Line("Microsoft launched VB.NET in 2002 as the successor to its original Visual Basic language.");
    }));
});

TextContainer クラス は、テキスト、リンク、ページ番号を描 画するメソッドを提供します。 現在の行にテキストを追加するには、Span メソッドと Line メソッドを 使用します。 Line メソッドはさらに現在の行を完成させます。 このサンプルでは、外部リソース リンク を追加する Hyperlink メソッドも使用します。

これは、ページ フッターで動的なページ番号を使用する方法を示す別のサンプルです:

PdfDocumentBuilder.Create().Generate("footer.pdf", doc =>
{
    doc.Pages(p => p.Footer().AlignRight().Text(text =>
    {
        text.Style(t => t.Parent.FontColor(new PdfRgbColor(255, 0, 0)));

        text.CurrentPageNumber();
        text.Span(" / ");
        text.PageCount();
    }));
});

レイアウト API は、ページ番号をフォーマットする方法を提供します。 たとえば、次のように 16 進数の ページ番号を描画できます:

text.CurrentPageNumber().Format(p => "0x" + p?.ToString("x2"));

C# および VB.NET サンプルで PDF ドキュメントにヘッダーとフッターを追加する は、ページ番号をローマ数字としてフォーマットする方法を示しています。

上記のサンプルでは Style メソッドが使用されていることがわかります。 テキストスタイルの概念をさら に詳しく調べてみましょう。

タイポグラフィ

テキスト スタイルを使用すると、テキストの外観をカスタマイズできます。 TextStyle クラ ス は、フォント サイズ、文字間隔、色、その他のテキスト プロパ ティを変更するメソッドを提供します。 TextStyle オブジェクトは不変であるため、メソッド呼び出しごと に新しいテキスト スタイルが生成されます。 さまざまなレイアウトレベルでテキストスタイルを適用できま す:

PdfDocumentBuilder.Create().Generate("text-styles.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.TextStyle(TextStyle.Parent.FontSize(30));

        page.Content()
            .TextStyle(TextStyle.Parent.FontColor(new PdfRgbColor(0, 0, 255)))
            .Text(t =>
            {
                t.Style(TextStyle.Parent.Underline());

                t.Span("Hello PDF").Style(TextStyle.Parent.DirectionRightToLeft());
            });
    });
});

TextStyle.Parent プロパティは、すべてのテキスト プロパティが未定義の特別なスタイルを返します。 前 のサンプルでは、"Hello PDF" を青色の下線付きの 30 ポイントのフォント サイズで逆順 (右から左) に描画 します。 別のテキスト スタイル継承の例については、PDF ドキュメントのテキストの外観をカスタマイズす る サンプルを参照してください。

TextStyle クラスは、関連付けられたフォントを除くすべてのカスタマイズをサポートします。 テキスト スタイルのカスタム フォントを指定する必要がある場合は、Document.TextStyleWithFont メソッドを使用 します。 この C# サンプルは、システム フォントの使用方法を示しています:

PdfDocumentBuilder.Create().Generate("fonts.pdf", doc =>
{
    doc.Pages(page =>
    {
        TextStyle style = doc.TextStyleWithFont(SystemFont.Family("Arial").Bold());
        page.Content().Text("Bold text").Style(style);
    });
});

レイアウト エンジンは、デフォルトで未使用のフォント グリフを削除します。 このため、大きなフォントで も生成されるドキュメントのサイズが小さくなる場合があります。 カスタム フォント ローダー、フォール バック フォント、不足しているグリフのハンドラーを指定することもできます。 詳細については、PDF ド キュメントで異なるフォントを使用する サンプルを参照してください。

レイアウト API は、事前定義されたスタイルのコレクションを提供します。 Typography クラ ス を介して使用またはカスタマイズできます:

PdfDocumentBuilder.Create().Generate("typography.pdf", doc =>
{
    doc.Typography(t =>
    {
        var baseFont = new FileInfo("arial.ttf");
        t.Document = doc.TextStyleWithFont(baseFont);
        t.Header = t.Parent.FontSize(20).FontColor(new PdfGrayColor(20));
        t.Footer = t.Footnote;
    });

    doc.Pages(page =>
    {
        page.Header().AlignCenter().Text("Header");

        page.Content().Text(t =>
        {
            t.Line("Title").Style(t => t.Title);
            t.Line("Heading 1").Style(t => t.Heading1);
            t.Line("Regular");
        });

        page.Footer().Height(20).AlignCenter().Text(t => t.CurrentPageNumber());
    });
});

Typography クラスを使用すると、テキスト スタイルの参照を保持するために変数を使用する必要はありま せん。 Document.Typography メソッド を使用して必要な スタイルを登録し、後でそれらを Typography オブジェクトから読み込みます。 Typography サンプルで定義済みスタイルとカスタム スタイルの使用方法を確認し てください。

画像

テキストやフォントと同様に、画像も PDF ドキュメントの基本的な部分です。 レイアウト API を使用する と、そのような画像を追加できます:

PdfDocumentBuilder.Create().Generate("image.pdf", doc =>
{
    var imageFile = new FileInfo("image.jpg");
    Image image = doc.Image(imageFile);
    doc.Pages(page => page.Content().MaxWidth(200).Image(image));
});

テーブル

レイアウト API を使用すると、テーブルを生成できます。 この C# サンプルは、PDF ドキュメントに表を追 加する方法を示しています:

PdfDocumentBuilder.Create().Generate("table.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.Content().Table(t =>
        {
            t.Columns(c =>
            {
                c.ConstantColumn(200);
                c.RelativeColumn(1);
            });

            t.Header(h =>
            {
                h.Cell().Text("Product");
                h.Cell().Text("Features");
            });

            t.Cell().Text("Docotic.Pdf");
            t.Cell().Text("Extract text, PDF to images, compress PDF");
            t.Cell().Text("Docotic.Pdf.Layout");
            t.Cell().Text("Create PDF");
        });
    });
});

任意の複雑さのテーブルを作成できます。 このサンプル は、セルの境界線、背景、お よびスパンの使用方法を示しています。

PDF ドキュメントは、ブックマークや目次を生成できる内部リンクをサポートしています。 この基本的な C# サンプルは、レイアウト API を使用してドキュメント セクションにリンクを追加する方法を示しています:

PdfDocumentBuilder.Create().Generate("link.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.Content().Column(c =>
        {
            const string SectionName = "Chapter 1";
            c.Item().SectionLink(SectionName).Text("Link");

            c.Item().PageBreak();

            c.Item().Section(SectionName).Text("Target");
        });
    });
});

GitHub から PDF ドキュメントに目次を追加 サンプルをダウンロードして試すこと もできます。

複雑なレイアウト

さまざまなレイアウト コンポーネントを組み合わせて、複雑な PDF ドキュメントを生成できます。 GitHub から 複雑なレイアウトで PDF ドキュメントを生成する サンプルをダウンロードして 試してください。

レイアウトAPIを拡張することが可能です。 LayoutContainer.Component メソッドと LayoutContainer.Container メソッドを使用すると、カスタム コンポーネントを再利用できます。 レイア ウト コンポーネント サンプルは、ILayoutComponent インターフェイスを使用し てカスタム コンポーネントを実装する方法を示しています。

結論

Docotic.Pdf ライブラリ は、C# および VB.NET で PDF ドキュメントを作成するための さまざまな手段を提供します。 レイアウト アドオン を使用しても、使用し なくても、PDF ドキュメントを最初から生成できます。 または、HTML to PDF アドオ ン を使用して HTML から PDF を作成することもできます。

PDF の生成についてご質問がある場合は、お問い合わせ までお問い合わせください。