GeminiやChatGPT、Microsoft CopilotなどAIアシスタントでは、PDFファイルを直接AIアシスタントに読み込ませてPDFドキュメントの内容を要約して返すことが可能です。
しかし、AIアシスタントではオプトアウト設定をしておかなければ入力したデータが学習データとして利用されてしまいます。企業内でAIアシスタントを利用する場合は、あらかじめオプトアウト設定を実施しておくか機密情報や個人情報などを入力しないように注意する必要があります。一方で、Azure OpenAI ServiceなどのパブリッククラウドのサービスではAIモデルの学習データとして入力データを利用しないようになっており、企業内での利用に適しているといえます。
本記事では、DioDocs for PDF(ディオドック)とAzure OpenAI Serviceを組み合わせて利用して、AIアシスタントの処理と同じようにPDFドキュメントの内容を要約するアプリケーションを作成します。
Azure OpenAIの利用準備
Azureポータルから「リソースの作成」を選択します。さらにAzure OpenAIを選択して[作成]をクリックします。

リソースの作成に必要な情報を入力します。ネットワークとタグはデフォルトのままで作成します。

作成が完了すると以下のように作成したAzure OpenAIのリソースが表示されます。

デプロイしたリソースをクリックします。左のメニューから「リソース管理」-「Keys and Endpoint」を選択します。表示されたキーとエンドポイントをメモ帳などに控えておきます。

左のメニューから「概要」をクリックします。さらに「Go to Azure AI Foundry portal」か[Explore Azure AI Foundry portal]をクリックします。

左のメニューから「チャット」をクリックします。さらに「新しいデプロイの作成」-「基本モデルから」をクリックします。

モデルは「gpt-5-mini」を選択して[確認]をクリックします。

デプロイ名は「mescius-gpt-5-mini-test」として[デプロイ]をクリックします。

デプロイが完了した後に、こちらのデプロイ名をメモ帳などに控えておきます。
アプリケーションの作成
Visual Studioでコンソールアプリケーションを作成します。

NuGetパッケージマネージャーから以下のパッケージをインストールします。
- Azure.AI.OpenAI
- DioDocs.Pdf.ja
- Microsoft.Extensions.AI
- Microsoft.Extensions.AI.OpenAI
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.UserSecrets

シークレットマネージャーを使用してAzure OpenAIのエンドポイントとデプロイ名を格納します。ソリューションエクスプローラーでプロジェクト名を右クリックして「ユーザーシークレットの管理」を選択します。

secret.jsonが表示されるので以下のような構成にします。Azure OpenAIのリソース情報を記載しておきます。
{
"AZURE_OPENAI_ENDPOINT": "エンドポイントのURL",
"AZURE_OPENAI_KEY": "キー",
"AZURE_OPENAI_GPT_NAME": "デプロイ名"
}
Program.csでは以下のような実装を行います。
- PDFファイルを読み込んで各ページのテキストを
GetText
で抽出(1~8行目) - プロンプトと共に抽出したテキストをAzure OpenAIへ送信して要約を実施(10~30行目)
- 新規のPDFファイルに
DrawTextLayout
で要約した結果を書き込んで保存(32~45行目)
Azure OpenAIへの要約の送信には、Microsoft.Extensions.AI
のIChatClient
インターフェイスを使用してAzure OpenAIのクライアントAzureOpenAIClient
を作成しています。
// PDFドキュメントを読み込む
using FileStream fs = File.OpenRead("wetlands.pdf");
GcPdfDocument doc = new();
doc.Load(fs);
// 読み込んだドキュメントのページのテキストを取得
List<string> texts = [];
doc.Pages.ToList().ForEach(p_ => texts.Add(p_.GetText()));
// プロンプト作成
StringBuilder textPrompt = new();
textPrompt.AppendLine("以下の英文を日本語で簡潔に説明してください。");
foreach (var text in texts)
{
textPrompt.Append(text);
}
// Azure OpenAIの設定
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
// Azure OpenAIクライアントの作成
var client =
new AzureOpenAIClient(
new Uri(config["AZURE_OPENAI_ENDPOINT"]),
new AzureKeyCredential(config["AZURE_OPENAI_KEY"]))
.GetChatClient(config["AZURE_OPENAI_GPT_NAME"])
.AsIChatClient();
// GPT5-miniモデルを使用して要約を生成
var response = await client.GetResponseAsync(textPrompt.ToString());
// 要約出力用
GcPdfDocument summary = new();
Page page = summary.NewPage();
GcGraphics g = page.Graphics;
var tl = g.CreateTextLayout();
tl.MaxWidth = page.Size.Width - 72 * 2;
// レスポンスの内容をPDFに書き込む
tl.AppendLine($"Azure OpenAI(gpt5-mini)の応答:");
tl.AppendLine(response.Text);
g.DrawTextLayout(tl, new PointF(72, 72));
// PDFに保存
summary.Save("wetlands_overview.pdf");
アプリケーションを実行した後に保存されたPDFファイルwetlands_overview.pdfを表示すると、要約が出力されていることが確認できます。


以上です。DioDocs for PDFとAzure OpenAIを連携して使用することで、PDFファイルのテキスト抽出・要約・保存といった一連の処理を、1つの .NETアプリケーション内で完結することが可能です。
動作を確認できるサンプルはこちらです。
さいごに
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。