💬

PdfSharpCore の紹介

2022/11/03に公開

.NETのPDF生成ライブラリ PDFSharp の紹介

https://github.com/ststeiger/PdfSharpCore

PDFSharp について

PDFSharpCore は、PdfSharp というオープンソースのPDF生成エンジン(C#)があります。
それ自体は更新が止まっています。

  • .NET Framework にしか対応していない。
  • GDI+ を使っているため、サーバーでのPDF生成には不向き

という問題がありました。

PDFSharpCore

PDFSharpCore では、

  • .NET 対応
  • GDI+ 除去

を行っています。
また、NuGet パッケージも公開しています。

https://www.nuget.org/packages/PdfSharpCore/

PDF出力サンプル

Program.cs
using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;

// Create a new PDF document
var document = new PdfDocument();
document.Info.Title = "Created with PdfSharpCore";

// Create an empty page
PdfPage page = document.AddPage();

// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);

// Create a font
var font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

// Draw the text
gfx.DrawString(
    "Hello, World!", font, XBrushes.Black,
    new XRect(0, 0, page.Width, page.Height),
    XStringFormats.Center);

// Save the document...
const string filename = "HelloWorld.pdf";
document.Save(filename);

出力結果

日本語出力

C#で日本語をPDFに出力する(PDFSharpを利用) を参考に日本語出力を行った。
PDFSharpCore でも JapaneseFontResolver を実装することで日本語出力可能である。

using PdfSharpCore;
using PdfSharpCore.Drawing;
using PdfSharpCore.Fonts;
using PdfSharpCore.Pdf;
using System.Reflection;

internal class Program
{
    private static void Main(string[] args)
    {
        // フォントリゾルバーのグローバル登録
        GlobalFontSettings.FontResolver = new JapaneseFontResolver();

        // 新規ドキュメントを作成
        PdfDocument document = new PdfDocument();
        document.Info.Title = "Created with PDFsharp";

        // 白紙をつくる(A4縦)
        PdfPage page = document.AddPage();
        page.Size = PageSize.A4;
        page.Orientation = PageOrientation.Portrait;

        // XGraphicsオブジェクトを取得
        XGraphics gfx = XGraphics.FromPdfPage(page);

        // フォント
        XFont font = new XFont("Gen Shin Gothic", 20, XFontStyle.Regular);

        // 文字列描画
        gfx.DrawString(
            "こんにちは、世界!",
            font,
            XBrushes.Black,
            new XRect(0, 0, page.Width, page.Height),
            XStringFormats.Center // 真ん中に描画
            );

        // PDF保存(カレントディレクトリ)
        const string filename = "HelloWorld.pdf";
        document.Save(filename);
    }
}

PDFSharp との違い

  • ライブラリの違いによる GlobalFontSettings.FontResolver のパスの違い
  • IFontResolverDefaultFontName の実装が必要である。

フォント

デフォルトのフォントリゾルバーは次のパスを検索する。

Windows

  1. %SystemRoot%\Fonts
  2. %LOCALAPPDATA%\Microsoft\Windows\Fonts

Linux

  1. /usr/share/fonts
  2. /usr/local/share/fonts
  3. ~/.fonts

iOS

  1. /Library/Fonts/

TrueType Fonts (拡張子 .ttf) を読み込む。Font Collections (拡張子 .ttc) には対応していない。

Font Resolver 詳細 公式

こちらの方法での日本語出力はできていない。

MigraDocCore

PDFSharp を元にしたドキュメント作成ツール MigraDoc の .NET 対応を行ったツールである。
英文でのパラグラフやテーブルなどを作成できる。

次にサンプルコードが記載されているが、PDFSharp のコードが残っており動かないコードも記載されている。

https://github.com/ststeiger/PdfSharpCore/blob/master/docs/MigraDocCore/index.md

Discussion