0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#コードを使用してPDF内のフォント情報を取得する

0
Posted at

PDFのフォント情報の取得とは、PDFドキュメント内で使用されているフォントに関する詳細情報を抽出するプロセスを指します。これには通常、フォント名、サイズ、種類、色、その他の属性が含まれます。これらの情報を把握することで、ドキュメントの一貫性の維持や著作権への配慮、見た目の品質向上に役立ちます。本記事では、C#を使用してPDFのフォント情報を取得する方法を紹介します。

ライブラリのインストール

はじめに、対象のPDF処理ライブラリを.NETプロジェクトに追加する必要があります。DLLファイルを参照として追加するか、NuGetを利用してインストールすることができます

PM> Install-Package Spire.PDF

C#でPDF内の特定テキストのフォント情報を取得する方法

.NET向けのPDF処理ライブラリを利用すると、指定したテキストを検索し、そのフォント名、サイズ、スタイル、色などの書式情報を取得できます。これらの情報は、PdfTextFragment クラスの対応プロパティから取得可能です。以下に基本的な手順を示します。

  1. PdfDocument のインスタンスを作成します
  2. PdfDocument.LoadFromFile() メソッドでPDFファイルを読み込みます
  3. PdfDocument.Pages[] プロパティを使用して対象ページを取得します
  4. PdfTextFinder のインスタンスを作成します
  5. PdfTextFinder.Find() メソッドで指定テキストを検索し、PdfTextFragment オブジェクトを取得します
  6. 情報を格納するために StringBuilder のインスタンスを作成します
  7. 検索結果のテキストを順に処理します
  8. PdfTextFragment.Text プロパティで該当テキストを取得します
  9. PdfTextFragment.TextStates[0].FontName からフォント名を取得します
  10. PdfTextFragment.TextStates[0].FontSize からフォントサイズを取得します
  11. PdfTextFragment.TextStates[0].FontFamily からフォントファミリーを取得します
  12. PdfTextFragment.TextStates[0].IsSimulateBold および IsItalic プロパティで、太字(または擬似太字)やイタリックかどうかを判定します
  13. PdfTextFragment.TextStates[0].ForegroundColor からフォントカラーを取得します
  14. StringBuilder.AppendLine() を使ってフォント情報を追記します
  15. 最後に、結果をテキストファイル(.txt)として出力します

サンプルコードは以下のとおりです:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;

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

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

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

            // PdfTextFinder のインスタンスを作成
            PdfTextFinder finds = new PdfTextFinder(page);

            // ページ内の指定テキストを検索
            finds.Options.Parameter = TextFindParameter.None;
            List<PdfTextFragment> result = finds.Find(".NET Framework");

            // StringBuilder のインスタンスを作成
            StringBuilder str = new StringBuilder();

            // 検索結果を順に処理
            foreach (PdfTextFragment find in result)
            {
                // 該当テキストを取得
                string text = find.Text;
                // フォント名を取得
                string FontName = find.TextStates[0].FontName;
                // フォントサイズを取得
                float FontSize = find.TextStates[0].FontSize;
                // フォントファミリーを取得
                string FontFamily = find.TextStates[0].FontFamily;
                // 太字・イタリックかどうかを取得
                bool IsBold = find.TextStates[0].IsBold;
                bool IsSimulateBold = find.TextStates[0].IsSimulateBold;
                bool IsItalic = find.TextStates[0].IsItalic;
                // フォントカラーを取得
                Color color = find.TextStates[0].ForegroundColor;

                // フォント情報を StringBuilder に追加
                str.AppendLine(text);
                str.AppendLine("FontName: " + FontName);
                str.AppendLine("FontSize: " + FontSize);
                str.AppendLine("FontFamily: " + FontFamily);
                str.AppendLine("IsBold: " + IsBold);
                str.AppendLine("IsSimulateBold: " + IsSimulateBold);
                str.AppendLine("IsItalic: " + IsItalic);
                str.AppendLine("color: " + color);
                str.AppendLine(" ");
            }

            // テキストファイルに書き出す
            File.WriteAllText("PdfFont.txt", str.ToString());
        }
    }
}

C#でPDF内の使用フォント情報を取得する方法

.NET向けのPDF処理ライブラリでは、PDFドキュメントで使用されているフォントを表す PdfUsedFont クラスが提供されています。これを利用すると、各フォントの名前、サイズ、種類、スタイルなどの情報を取得できます。以下に基本的な手順を示します。

  1. PdfDocument のインスタンスを作成します
  2. PdfDocument.LoadFromFile() メソッドでPDFファイルを読み込みます
  3. PdfDocument.UsedFonts プロパティから、PDF内で使用されているすべてのフォントを取得します
  4. 情報を格納するために StringBuilder のインスタンスを作成します
  5. 使用されているフォントを順に処理します
  6. PdfUsedFont.Name プロパティでフォント名を取得します
  7. PdfUsedFont.Size プロパティでフォントサイズを取得します
  8. PdfUsedFont.Type プロパティでフォントの種類を取得します
  9. PdfUsedFont.Style プロパティでフォントスタイルを取得します
  10. StringBuilder.AppendLine() を使用してフォント情報を追記します
  11. 最後に、結果をテキストファイル(.txt)として書き出します

サンプルコードは以下のとおりです:

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Fonts;
using System.IO;
using System.Text;

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

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

            // PDF内で使用されているフォントを取得
            PdfUsedFont[] fonts = pdf.UsedFonts;

            // StringBuilder のインスタンスを作成
            StringBuilder str = new StringBuilder();

            // 使用フォントを順に処理
            foreach (PdfUsedFont font in fonts)
            {
                // フォント名を取得
                string name = font.Name;

                // フォントサイズを取得
                float size = font.Size;

                // フォントの種類を取得
                PdfFontType type = font.Type;

                // フォントスタイルを取得
                PdfFontStyle style = font.Style;

                // フォント情報を StringBuilder に追加
                str.AppendLine("FontName: " + name + " FontSize: " + size + " FontType: " + type + " FontStyle: " + style);
            }

            // テキストファイルに書き出す
            File.WriteAllText("PdfFontInfo.txt", str.ToString());
        }
    }
}

まとめ

本記事では、C#を用いてPDFドキュメント内で使用されているフォント情報を取得する方法を紹介しました。PDFファイルを読み込み、使用フォントの一覧を取得したうえで、各フォントの名前、サイズ、種類、スタイルといった情報を順に取得し、テキストファイルとして出力する流れを解説しました。

この方法を活用することで、PDF内のフォント使用状況を把握でき、ドキュメントの一貫性の確認や編集・最適化などに役立てることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?