C# で PDF を最初から作成する方法

## はじめに
プログラミング言語を使用して PDF を作成すると、手動で作成する場合に比べて多くの利点があります。 まず、ドキュメント生成プロセスを自動化でき、時間を大幅に節約できます。 次に、これにより文書の一貫性と正確性も確保され、手動入力エラーが回避されます。 さらに、ドキュメントをバッチで簡単に生成できるため、生産性が向上します。 以下は、C# プログラムを使用して PDF を最初から作成する方法の紹介です。
## ツール
* Visual Studio 2022 
* [Free Spire.PDF for .NET](https://www.e-iceblue.com/Introduce/free-pdf-component.html)

このライブラリは、無料でPDFファイルを作成、編集、変換することができますが、ページ数の制限があります。または、有料版の製品の[無料トライアル](https://www.e-iceblue.com/TemLicense.html)を申し込むこともできます。
[Spire.PDF for .NET](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html)
## インストール方法
1.[Free Spire.PDF for .NET](https://www.e-iceblue.com/Download/download-pdf-for-net-free.html)をダウンロードします。
2.Visual Studioで新しいプロジェクトを作成します。
3.「Solution Explorer」>「References」を右クリックし、「Add Reference」>「Browse」を選択します。
4.BINフォルダ内のdllファイルを見つけて、「OK」をクリックします。
## 主なクラス
* PdfDocumentクラス---PDF文書のモデル
* PdfPageBaseクラス---PDFのページ
* PdfSolidBrushクラス	---ブラシ
* PdfTrueTypeFontクラス---TrueTypeフォント
* PdfStringFormatクラス---テキストのフォーマット
* PdfTextWidgetクラス---複数のページにまたがる機能を持つテキスト領域
* PdfTextLayoutクラス---テキストのレイアウト

## 主なメソッド
* PdfDocument.Pages.Add()メソッド---PDFにページを追加します。
* PdfPageBase.Canvas.DrawString()メソッド---指定されたフォントとブラシオブジェクトを使用して、ページの指定された位置に文字列を描画します。
* PdfTextWidget.Draw()メソッド---指定された位置にテキストウィジェットを描画します。
* PdfDocument.Save()メソッド---ドキュメントをPDFとして保存します。
## コードの説明
まず、PDFドキュメントを作成し、新しいページを追加します。次に、テキストを描画するためのブラシとフォントを作成します。タイトルのテキストを定義し、ページの中央に描画します。txtファイルからテキストを抽出して段落として保持します。そして、段落の内容を保持するための矩形領域を作成し、テキストの自動ページレイアウトを設定します。最後に、段落をページに描画し、生成されたPDFファイルを指定されたパスに保存します。
## コード
```c#
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

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

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

            //ソリッドブラシを作成する
            PdfSolidBrush titleBrush = new PdfSolidBrush(new PdfRGBColor(Color.Black));
            PdfSolidBrush paraBrush = new PdfSolidBrush(new PdfRGBColor(Color.Black));

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

            //見出しのテキストを指定して、ページの中央に描画する
            string titleText = "PDF";
            PdfStringFormat format = new PdfStringFormat();
            format.Alignment = PdfTextAlignment.Center;
            page.Canvas.DrawString(titleText, titleFont, titleBrush, page.Canvas.ClientSize.Width / 2, 20, format);

            //ロードされたファイルから抽出されたテキストを保持するRectangleを作成する
            string paraText = File.ReadAllText("C:\\Users\\Administrator\\Desktop\\text.txt");
            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("C:\\Users\\Administrator\\Desktop\\CreatePDF.pdf");
            doc.Dispose();
        }
    }
}
```
## 結果文書
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/7183693e-f561-7942-e97e-08aadc3040a9.png)