FastReport .NET – Raspberry Pi 上に PDF レポートを作成
FastReport .NET は、ロイヤリティフリーのランタイムデザイナーを搭載した、多機能なレポート / 帳票作成ツールです。.NET 6 または 7、.NET Core、.NET Framework 4.x 以上、ASP.NET、MVC、Windows Forms に対応しており、Visual Studio 2010 ~ 2022 の開発環境で使用可能です。
当ブログでは、.NET 7 環境で FastReport .NET を使用し、Raspberry Pi 4B 上に PDF レポートを作成する手順を説明します。今回のデモでは、NuGet サーバー(nuget.org)で提供されている評価版の FastReport.Web パッケージを使用していますが、.NET Framework での評価をご希望の場合は、こちらから評価版をお申込みください。
なお、Raspberry Pi とは、ARM プロセッサを搭載した小型のシングルボードコンピューターのことです。このマイクロコンピューターは、教育用プラットフォームや組み込みソリューションの開発を行う際に、よく利用されています。
Raspberry Pi 4 Model B
今回の実例では、8GB の RAM を搭載した Raspberry Pi 4 Model B に、デスクトップ OS として Raspberry Pi OS の Bullseye リリースをインストールしました。OS は 32 ビット版と 64 ビット版のどちらでも使用可能です。なお、ここでは、システムのインストール手順と機器構成に関する説明を省略します。
まず、SSH 経由か、もしくはデスクトップ上のターミナルアプリ(Windows Terminal)経由で、Raspberry Pi に接続します。ターミナルアプリを利用するには、ボードがモニターとキーボードに接続している必要があります。
Raspberry Pi をインターネットに接続し、マイクロソフト社のサイトから .NET 7 SDK のダウンロードを行い、アーカイブを解凍します。(お使いの Raspberry Pi OS が 64 ビット版、32 ビット版によって、コマンドが異なります。)
1)64 ビット版の場合
sudo wget https://download.visualstudio.microsoft.com/download/pr/2fefd13b-24e6-4c0c-b3ad-a7285c6b9480/00d9e656a4263e002dab53d9ef901b75/dotnet-sdk-7.0.200-linux-arm64.tar.gz mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-7.0.200-linux-arm64.tar.gz -C $HOME/dotnet
2)32 ビット版の場合
sudo wget https://download.visualstudio.microsoft.com/download/pr/54b057ec-36ef-4808-a436-50ee3fa39a44/87d696a761176b721daaf8ab9761c9c8/dotnet-sdk-7.0.102-linux-arm.tar.gz mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-7.0.102-linux-arm.tar.gz -C $HOME/dotnet
環境変数には .NET 7 フォルダへのパスを追加し、さらに DOTNET_ROOT 変数を作成します。
export DOTNET_ROOT=$HOME/dotnet export PATH=$PATH:$HOME/dotnet
上記の【export】コマンドは 2 行とも、~/.bash_profile、~/.bashrc、~/.kshrc、~/.profile、~/.zshrc、~/.zprofile 等のユーザープロファイルに追加することを推奨します。
【dotnet –info】コマンドを実行すると、.NET 7 SDK が正しくインストールされていることを確認することができます。(お使いの Raspberry Pi OS が 64 ビット版、32 ビット版によって、表示内容が異なります。)
1)64 ビット版の場合
dotnet --info .NET SDK: Version: 7.0.200 Commit: 534117727b Runtime Environment: OS Name: debian OS Version: 11 OS Platform: Linux RID: debian.11-arm64 Base Path: /home/pi/dotnet/sdk/7.0.200/ Host: Version: 7.0.3 Architecture: arm64 Commit: 0a2bda10e8 .NET SDKs installed: 7.0.200 [/home/pi/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 7.0.3 [/home/pi/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 7.0.3 [/home/pi/dotnet/shared/Microsoft.NETCore.App] Other architectures found: None Environment variables: DOTNET_ROOT [/home/pi/dotnet] global.json file: Not found Learn more: https://aka.ms/dotnet/info Download .NET: https://aka.ms/dotnet/download
2)32 ビット版の場合
dotnet --info .NET SDK: Version: 7.0.102 Commit: 4bbdd14480 ランタイム環境: OS Name: raspbian OS Version: 11 OS Platform: Linux RID: linux-arm Base Path: /home/pi/dotnet/sdk/7.0.102/ Host: Version: 7.0.2 Architecture: arm Commit: d037e070eb .NET SDKs installed: 7.0.102 [/home/pi/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 7.0.2 [/home/pi/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 7.0.2 [/home/pi/dotnet/shared/Microsoft.NETCore.App] Other architectures found: None Environment variables: DOTNET_ROOT [/home/pi/dotnet] global.json file: Not found Learn more: https://aka.ms/dotnet/info Download .NET: https://aka.ms/dotnet/download
さらに、以下の 3 つのパッケージを追加インストールする必要があります。日本語文字をサポートするため、IPA フォントをインストールします。
1) | libgdiplus |
2) | fonts-ipafont |
3) | fonts-ipaexfont |
【sudo】コマンドを実行すると、パッケージをインストールすることができます。(設定する引数は、以下の内容をご参照ください。)
sudo apt-get install libgdiplus sudo apt install fonts-ipafont fonts-ipaexfont
【dotnet new console -o testpdf】コマンドを実行すると、.NET 7 アプリケーションを作成することができます。(testpdf フォルダに、testpdf.csproj と Program.cs を含む、コンソールアプリケーションのテンプレートファイルが表示されます。)
dotnet new console -o testpdf
以下の通り、testpdf.csproj に <ItemGroup>(評価版の FastReport.Web パッケージの情報)を追加します。ビルド後、FastReport.Web パッケージは、~/.nuget/packages に配置されます。
<Project Sdk="Microsoft.NET.Sdk"> |
Program.cs を以下の内容に変更します。このコードは、レポートインスタンスを作成して、ページ上にバンドを追加します。
using System; using FastReport; using FastReport.Export.Pdf; using FastReport.Utils; namespace testpdf { class Program { static void Main() { Console.WriteLine("Test FastReport Core"); // create report object using Report report = new Report(); // create page using ReportPage page = new ReportPage(); // add page in report report.Pages.Add(page); // create band page.ReportTitle = new ReportTitleBand() { Height = Units.Centimeters * 10 }; // create text object placed on band using TextObject text = new TextObject() { Left = Units.Centimeters * 7, Top = Units.Centimeters * 5, Font = new System.Drawing.Font("IPA P明朝", 24), CanGrow = true, AutoWidth = true, Text = "こんにちは、Raspberry Pi!", Parent = page.ReportTitle }; // make the document report.Prepare(); // save the document as PDF file using PDFExport pdf = new PDFExport(); report.Export(pdf, "file.pdf"); } } }
設定した座標 Left(幅) と Top(高さ) に、テキストオブジェクトが作成されます。CanGrow(拡張可能)プロパティと AutoWidth(幅を自動調整)プロパティを使用すると、テキストのサイズに応じて、高さと幅を自動的に計算することができます。
なお、プログラムコードでオブジェクトを作成することだけが、ドキュメントを生成する方法ではありません。FastReport .NET にバンドルされているテンプレートエディタ【Designer.exe】を使用することも一つの方法です。
エディタによって作成された *.frx 拡張子を持つファイルは、Report.Load メソッドを使用して読み込むことができます。この .frx の xml テンプレートでは、ユーザーデータや変数へのバインディングを指定したり、組み込み関数やユーザー定義関数を使用したりできます。(FastReport .NET の機能の詳細については、製品情報ページをご参照ください。
ドキュメントは、PDF ファイルとして保存されます。コードで使用されるすべてのオブジェクトには、ドキュメントの動作に影響する多くのプロパティが用意されています。(プロパティの詳細については、FastReport .NET のマニュアルをご参照ください。)
では、testpdf のフォルダーに移動し【dotnet run】コマンドを実行して、プログラムを起動してみましょう。
dotnet run
必要なパッケージがすべてインストールされますと、file.pdf が生成されます。(生成されなかった場合は、エラー内容を読み、エラーを解消する必要があります。)生成された PDF ファイルは標準に完全準拠しており、テキストと埋め込みフォントが含まれています。表示されたテキストを選択して、別のドキュメントにコピーすることができます。
評価版をお使いの場合、ページの左上隅に、評価版を使用したことを示すテキスト【DEMO VERSION】が表示されます。評価版のページ数は、5 ページまでに制限されています。製品版には、このような制限はありません。
このように、ARM32 / ARM64 プラットフォーム上で .NET 7 アプリケーションを実行できることは、非常に満足できる結果と言えるでしょう。サーバーメーカーは、ARM プロセッサを搭載したハードウェアプラットフォームの販売をすでに開始しています。近い将来、ホスティングプロバイダーから ARM ベアメタルが提供されて、人気が高まるかもしれません。今後に注目です。
GIGABYTE 社の ARM サーバー
30日間、無料でお使いいただけます。