PDF編集DLL「PdfUtility」をOSSとしてGitHubで公開しました【日本語フォント・縦書き対応】

GitHubへの公開・達成感をイメージさせる。GitHubのロゴ・PDFアイコン・縦書き文字・MITバッジが周囲にふわりと浮かんでいるイメージ

前回の記事では、PDFSharpで日本語フォント(MS明朝・MSゴシック)が使えない問題に直面し、メモリ上でTTCフォントをTTFとして展開するという方法で解決した話をしました。

その後、あの小さな気づきは大きなプロジェクトへと発展しました。

「せっかくなら、日本人開発者が本当に使いやすいPDF編集ライブラリを作ろう。」

そしてついに、PDF編集DLL「PdfUtility」として完成し、GitHubで公開するに至りました。

今回はその全貌をご紹介します。

目次

PdfUtilityとは

PdfUtility は、既存の PDF ファイルにテキスト・画像・図形・枠を追記できる .NET 向け PDF 編集ライブラリです。

ライセンスは MIT License。商用利用・改変・再配布、全て自由です。

🔗 GitHub: Kunitaroo/PdfUtilitySolution

開発にかけた思い

このDLLを作るにあたって、一番こだわったのは「日本人開発者が迷わず使える」ことです。

既存のPDF編集ライブラリには、こんな不満がありました。

英語のドキュメントしかない
    ↓
日本語フォントの説明がどこにも書いていない
    ↓
TTC形式に対応していない
    ↓
仕方なく代替フォントを使う
    ↓
エンドユーザーから「MS明朝で出力してほしい」と言われる
    ↓
また振り出しに戻る…

この負のループを断ち切りたかった。

プログラマーとして20年以上、業務システムの開発に携わってきました。その経験の中で感じてきた「日本語環境での地味な不便さ」を、このライブラリで解消したかったのです。

主な機能

テキスト出力

MS明朝・MSゴシックをはじめとする日本語フォントでテキストを追記できます。

new TextDrawCommand
{
    PageNumber = 1,
    X = 100, Y = 700,
    Text = "承認済み",
    FontName = "MS明朝",
    FontSize = 12,
    FontColor = PdfColor.Black
}

図形・枠の描画

業務帳票でよく使われる矩形・線の描画に対応しています。

new RectangleDrawCommand
{
    PageNumber = 1,
    X = 50, Y = 650,
    Width = 200, Height = 30,
    BorderColor = PdfColor.Black,
    BorderWidth = 1.0,
    IsFilled = false
}

画像の埋め込み

JPEG・PNGをPDF上の指定位置に埋め込めます。印鑑画像の貼り付けにも活用できます。

new ImageDrawCommand
{
    PageNumber = 1,
    X = 400, Y = 600,
    Width = 80, Height = 80,
    ImageBytes = File.ReadAllBytes("hanko.png"),
    KeepAspectRatio = true
}

開発中に生まれた追加機能

最初に想定していた機能を作り終えた後も、「あれもあると便利だ」という気づきが次々と生まれました。

縦書き

日本の帳票では縦書きが必要な場面があります。

new TextDrawCommand
{
    Text = "山路を登りながら考えた。",
    WritingMode = WritingMode.Vertical  // 縦書き
}

実装してみると、縦書きは想像以上に奥が深かったです。

漢字・ひらがなは正立表示、英数字は90°回転、句読点は右上にオフセット、と文字の種類によって描画ロジックが異なります。

PDFの仕様と日本語組版のルールを組み合わせながら実装しました。

縦中横(半角文字を縦書きに)

縦横中表示のサンプル画像

縦書きの中に英数字が入ると、自動的に正立表示できる機能を追加しました。

new TextDrawCommand
{
    Text = "令和5年12月25日",
    WritingMode = WritingMode.Vertical,
    TateChuYoko = true  // 縦中横を有効化
}

縦書きの設定にプロパティを1つ追加するだけで「令和51225日」の数字が正立表示されます。日本語特有の組版をシンプルに実現できます。

暗号化・パーミッションPDF対応

業務システムでは、編集禁止のPDFが渡されてくることもあります。そういったPDFをそっと検出して、安全に処理を止める機能を追加しました。

var options = new PdfUtilityOptions
{
    RejectEncryptedPdf = true,
    RejectPermissionLockedPdf = true
};

フォント埋め込みとライセンスの話

開発中に一番頭を悩ませたのが、フォントのライセンス問題でした。

MS明朝のようなWindowsフォントは、PDFへの埋め込み可否を示すfsTypeというフラグを内部に持っています。

古いバージョンのMS明朝は fsType=0x0002(埋め込み禁止)でした。しかし調査してみると、Windows 11に同梱されているMS明朝は fsType=0x0008(埋め込み許可)に更新されていたのです。

このDLLはフォント読み込み時にfsTypeを自動チェックして、埋め込み可否を判断します。

// OS/2テーブルからfsTypeを自動読み取り
var fsType = FontHelper.GetFsType(ttfData);
// 0x0002なら参照のみ、0x0008なら埋め込みあり

PDF座標確認ツール(PreviewApp)

PreviewAppのプレビュー画面のイメージ

DLLと一緒に開発したWPFアプリが、このPDF座標確認ツールです。

PDFのどこに何を配置するかを決めるとき、これまでは「コードを書いて実行して確認して修正して…」という繰り返しが必要でした。

このツールを使えば

PDFを開く
    ↓
マウスで場所を確認
    ↓
クリックするとC#/VB.NETのコードが自動生成
    ↓
Visual Studioにコピペするだけ

で完了します。

さらにテキスト・枠・画像をPDF上に重ねてプレビュー表示し、ドラッグで位置を調整する機能も搭載しました。出力前に仕上がりイメージを確認できます。

Claude Codeとの共同開発

正直に言うと、このDLLはAIとの共同開発で生まれました。

設計・実装・デバッグ・テスト生成——多くの部分でClaude Codeに助けてもらいました。しかし「何を作るか」「どんな機能が必要か」「ライセンス的に問題はないか」という判断は、全て自分自身が行いました。

AIはあくまで強力な実装パートナーです。プログラマーとしての経験と判断がなければ、このDLLは生まれませんでした。

AIを使った開発が当たり前になっていく時代に、人間とAIがそれぞれの強みを活かして作ったプロダクトとして、このDLLを世に送り出せたことを誇りに思っています。

GitHubで公開しています

MITライセンスで公開していますので、ぜひ使ってみてください。

🔗 https://github.com/Kunitaroo/PdfUtilitySolution

  • 日本語のREADMEとサンプルコードを用意しています
  • C# / VB.NET 両対応です
  • 業務システム・社内ツール・個人開発、どんな場面でもご活用ください

バグ報告・機能要望・プルリクエスト、どんなフィードバックも歓迎します。

まとめ

「PDFSharpで日本語フォントが使えない」という小さな不満から始まったこのプロジェクト。

気がつけば、縦書き・縦中横・暗号化検出・座標確認ツールまで備えた、本格的なPDF編集ライブラリになっていました。

日本語環境でPDF編集にお困りの開発者の方に、少しでも役立てれば幸いです。

「日本人開発者が日本語フォントで困らないDLLを、日本人が作る」

その思いは、これからも変わりません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次