Skip to content

MS_ReportOutput

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

帳票出力

概要

.NET Core 対応モジュールを探す序(ついで)にまとめてみた。

補足(読む際の前提): 本ページは 2018 年頃の調査であり、
[.NET Core](MS_DotNetCore) 対応か否か」という当時の関心軸で
書かれている。

現在は前提が変わっている

【当時(2018 年頃)】
   .NET Framework が本流。.NET Core 対応が「特別な」条件
     → 「.NET Core で動くか」が選定の第一関門

【現在】
   .NET(Core 系)が本流。.NET Framework は保守対象
     → 「.NET Core 対応か」はほぼ全製品が Yes
     → 選定軸は【ライセンス】【描画方式】【運用形態】へ移った

したがって、以下の各項目の「.NET Core 非対応(2018/8 現在)」は
現在は解消しているものが多い
各項目に現況を追記する。

詳細

OSS

  • NuGet ライブラリの .NET Core 対応は、
    この方法で確認できる。

  • 古い OSS は .NET 対応されていないものが多いが、
    新しい OSS は、.NET Core 対応されているものが多い。

iTextSharp

補足(現況:iText 7 / 8 へ): iTextSharp5.x 系で開発終了し、
後継の itext7 / itext8 に移行している。

iTextSharp (5.x) iText 7 / 8
パッケージ iTextSharp itext(旧 itext7
.NET 対応 .NET Framework のみ .NET Standard 2.0 / .NET 6+
状態 開発終了 現役

ライセンスは依然 AGPL である(原文の警告は今も有効)。

【AGPL の意味】
   ・ソースを公開すれば無償で使える
   ・"Affero" なので、【ネットワーク越しに提供する場合も】
     利用者にソースを開示する義務が生じる
     → Web アプリで使うと、アプリ全体の公開義務が及び得る
   ・回避したければ【商用ライセンスを購入する】

業務システムで安易に採用してはならない類のライブラリである。
原文が赤字で警告しているのは正しい。

HtmlRenderer.PdfSharp

CommonMark.NET + HtmlRenderer.PdfSharp

補足(現況:PDFsharp 6 系): PDFsharp 本体は .NET 6+ に対応した
(6.x 系、MIT ライセンス)。

ただし HtmlRenderer.PdfSharpSystem.Drawing に依存しており、
ここが問題になる。

【System.Drawing.Common の制約(.NET 6 以降)】
   ・.NET 6  … Windows 以外では既定で無効(設定で回避可)
   ・.NET 7+ … 【Windows 専用】。Linux では PlatformNotSupportedException

Linux コンテナで動かす前提なら、この系統は避けるのが無難である。
代替は SkiaSharp / ImageSharp ベースのもの。

なお CommonMark.NET も開発停止しており、
Markdown 変換は Markdig が現在の定番である。

DinkToPdf

補足(現況:wkhtmltopdf 系は退潮): DinkToPdf
wkhtmltopdf(ネイティブ DLL)のラッパーである。

【構造】
   C# コード
     └─ P/Invoke → libwkhtmltox.dll / .so(ネイティブ)
           └─ 内部は【古い WebKit】で HTML を描画

問題点:

問題 内容
wkhtmltopdf 本体がアーカイブ済み 2023 年に開発終了が宣言された
描画エンジンが古い Flexbox / Grid / 最近の CSS が正しく出ない
ネイティブ依存 OS ごとに DLL を配置する必要。コンテナで詰まりやすい
スレッド安全でない 同時実行で落ちる報告が多い(要ロック)

新規採用は推奨しない
HTML → PDF が要るなら、後述の Playwright / Puppeteer(Chromium)か、
QuestPDF(HTML を経由しない)を検討する。

Rotativa.AspNetCore

補足(現況): Rotativawkhtmltopdf のラッパーであり、
DinkToPdf と同じ制約を負う。

特徴は ASP.NET Core MVC の View をそのまま PDF 化
できる点で、「画面をそのまま印刷したい」要件には嵌まる。

public IActionResult PrintInvoice(int id)
    => new ViewAsPdf("Invoice", GetModel(id)) { FileName = "invoice.pdf" };

ただしエンジンが古い問題は同じである。

補足(現在の OSS の選択肢): 2018 年当時にはなかった、
あるいは当時は未成熟だった選択肢を挙げる。現在はこちらが主流である。

ライブラリ 方式 ライセンス 備考
QuestPDF C# の Fluent API で直接記述 MIT(小規模)/ 有償 最有力。速く、Linux で完動
PuppeteerSharp Chromium で HTML → PDF MIT 最新の CSS が使える。要ブラウザ
Playwright for .NET 同上(Microsoft 製) MIT CI との相性が良い
PDFsharp / MigraDoc 低レベル API / 文書モデル MIT 6.x で .NET 6+ 対応
ClosedXML Excel(.xlsx)出力 MIT 帳票を Excel で出すなら定番
NPOI Excel / Word 出力 Apache 2.0 POI の .NET 移植
Syncfusion / Aspose 商用の総合ライブラリ 有償 機能は最も広い

QuestPDF の例:

Document.Create(container =>
{
    container.Page(page =>
    {
        page.Size(PageSizes.A4);
        page.DefaultTextStyle(x => x.FontFamily("Yu Gothic"));  // 日本語フォント
        page.Header().Text("請求書").FontSize(20).Bold();
        page.Content().Table(table => { /* 明細 */ });
        page.Footer().AlignCenter().Text(x => x.CurrentPageNumber());
    });
}).GeneratePdf("invoice.pdf");

QuestPDF のライセンスに注意する
**年商が一定額未満の組織は無償(MIT)**だが、
それを超えると有償という Community License 方式である
(2024 年に変更された)。導入前に条件を確認すること。

日本語フォントの埋め込みは、どの方式でも共通の課題である。

・Linux コンテナには日本語フォントが入っていない
   → Dockerfile で fonts-noto-cjk 等を入れる
・フォントを PDF に埋め込まないと、環境によって文字化けする
   → 埋め込み設定を必ず有効にする
・フォントのライセンスを確認する(再配布可否)

製品

製品系は、(今の所、)基本的に、.NET Core 対応なし。

移行メモ(現況:ほぼ全て対応済み): この総括は
2018 年時点では正しかったが、現在は逆転している
主要な国産帳票製品は .NET 対応を済ませている(各項目に後述)。

ReportViewer

https://learn.microsoft.com/ja-jp/sql/reporting-services/application-integration/integrating-reporting-services-using-reportviewer-controls-get-started

補足(現況:.NET へは移行していない): ReportViewer は
.NET Framework 専用のまま
で、.NET(Core 系)版は提供されていない
ここは原文の記述が今も当てはまる数少ない例である。

【現在の選択肢】
   ① SSRS / Power BI Report Server 側でレンダリングし、
      アプリは REST API で PDF/Excel を取得する
        → 【ASP.NET と SSRS の連携と認証】が参考になる
   ② Web ページに埋め込む(iframe / URL アクセス)
   ③ サードパーティのビューアに置き換える

② の URL アクセス方式は、認証の引き回しが課題になる
ASP.NETとSSRSの連携と認証)。

ActiveReport

https://www.grapecity.co.jp/developer/activereports

補足(現況:正式対応済み): ActiveReports for .NET は
.NET 6 / 8 に正式対応
しており、
ActiveReportsJS(JavaScript 版)も提供されている。
原文が参照する「回避方法」の記事は、過渡期のものである。

CoReports

https://www.hos.co.jp/package/crdotnet2/

補足(現況): CoReports も .NET(Core 系)対応版が提供されている。

帳票.NET

https://opentype.jp/rprtnet.htm

SVF

https://www.wingarc.com/product/svf/

補足(現況): SVF Cloud をはじめ、
クラウド/ .NET 対応の系統が提供されている。
SVF は帳票サーバとして独立しているため、
アプリ側のランタイムに依存しにくい構造である。

jsreport

移行メモ(NodeServices は廃止済み): 原文が挙げる
Node Services
廃止済みである(JavaScript Services)。

現在 jsreport を .NET から使うなら、以下になる。

方式 内容
jsreport サーバを別に立て、HTTP で呼ぶ これが素直jsreport.Client パッケージあり
Docker で jsreport を動かす 公式イメージがある。運用が分離できる
jsreport.Local .NET から Node.js を同梱起動(Windows 前提になりがち

帳票エンジンを別プロセス/別サービスに切り出すという発想自体は
現在の構成として妥当である(スケールも分離できる)。

参考

jsreport

補足(帳票方式の選び方): ライブラリの一覧より、
どの方式を採るかを先に決める方が実務では効く。

方式 向く要件 弱点
コードで組み立てる(QuestPDF、PDFsharp) レイアウトが固定の帳票。速度が要る デザイン変更にコード修正が要る
HTML → PDF(Playwright、Puppeteer) 既存の画面を流用したい。CSS で組める ブラウザが必要(重い)。ページ分割の制御が難しい
テンプレート製品(ActiveReports、SVF) 非開発者が帳票を保守する。日本の帳票要件 有償。製品にロックインされる
Excel 出力(ClosedXML、NPOI) 利用者が加工したい。集計表 印刷レイアウトの厳密な制御は苦手
帳票サーバ(SSRS、jsreport) 大量出力。アプリから分離したい 運用対象が増える

日本の業務帳票に特有の要件(罫線の細かい制御、
帳票フォーマットの厳密な再現、外字
——Windowsの外字——、
JIS2004 の文字)がある場合、
国産の帳票製品が最も確実である。
OSS で無理に押し切ると、細部の詰めに工数が溶ける

大量出力の際の注意:

・1 件ずつ生成すると、起動オーバーヘッドが支配的になる
   → エンジンを使い回す/バッチでまとめて処理する
・メモリに全件を載せない(ストリームで書き出す)
・Web リクエストの中で同期生成しない
   → キューに積んで非同期に生成し、完了後にダウンロードさせる

Microsoft Learn


Tags: 移行, プログラミング, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally