.NET StandardなクラスライブラリでDioDocsを使う

今月、米国シアトルで開催されたMicrosoft Build 2019の内容をご覧になった方も多いかと思いますが、その中で今後の .NETに関するロードマップが発表されました。現在のプレビューの .NET Core 3.0は今年の9月にリリースされ、2020年11月には .NET 5がリリースされる予定で、これだけでデスクトップ、Web、モバイルアプリを作成できる唯一のフレームワークになるようです。

個人的には今後の .NETの展開が楽しみな反面、グレープシティの開発支援ツールを対応させるにあたって色々問題も出てきそうだなぁ…といったところです。お客様も同じような課題を抱えるようになると思うので、当ブログでもしっかり情報発信をしていきたいと思います!

さて、本題に入ります。この参照した記事の図でも「.NET Standard」という表記がありますが、現時点で .NET Framework、.NET Core、Xamarinで共通して使えるライブラリを作成するには、この .NET Standardをベースにしたクラスライブラリを作成する必要があります。

今回はこの .NET Standardクラスライブラリで「DioDocs(ディオドック)」を使用して、ExcelとPDFを生成する処理を実行するようにし、.NET Frameworkと .NET Coreで作成したWPFアプリケーションからクラスライブラリを利用します。

これはそもそもDioDocsが「.NET Standard 2.0」に準拠しているライブラリであるため、可能な実装方法ですね!

必要なモノ

空のソリューションを作成

Visual Studioを起動してプロジェクトテンプレートから「空のソリューション」を選択して作成します。

クラスライブラリを作成

ソリューションエクスプローラーから[追加]-[新しいプロジェクト]をクリックしてプロジェクトテンプレートから「クラス ライブラリ (.NET Standard)」を選択して作成します。

WPFアプリケーション(.NET Framework)を作成

ソリューションエクスプローラーから[追加]-[新しいプロジェクト]をクリックしてプロジェクトテンプレートから「WPF アプリ (.NET Framework)」を選択して作成します。

WPFアプリケーション(.NET Core)を作成

ソリューションエクスプローラーから[追加]-[新しいプロジェクト]をクリックしてプロジェクトテンプレートから「WPF App (.NET Core)」を選択して作成します。

クラスライブラリを参照

ぞれぞれのWPFアプリからクラスライブラリを参照するように設定します。

DioDocsのNuGetパッケージを追加

NuGetパッケージマネージャーでクラスライブラリにDioDocs for ExcelとDioDocs for PDFのNuGetパッケージを追加します。

さらに、NuGetパッケージマネージャーでWPFアプリケーション(.NET Framework)にDioDocs for ExcelとDioDocs for PDFのNuGetパッケージを追加します。

ExcelとPDFを生成するコードを追加

クラスライブラリのClass1.csに以下のコードを追加します。各メソッドは受け取った文字列をExcelとPDFに書き込んで保存する処理を実行します。

public class DDExcel
{
public static void Create(string platformname)
{
// ワークブックの作成
Workbook workbook = new Workbook();
// ワークシートの取得
IWorksheet worksheet = workbook.Worksheets[0];
// セル範囲を指定して文字列を設定
worksheet.Range["B2"].Value = "こんにちは、DioDocs(ディオドック)です!";
worksheet.Range["B3"].Value = "from " + platformname;
// 保存
workbook.Save("Result.xlsx", SaveFileFormat.Xlsx);
}
}
public class DDPdf
{
public static void Create(string platformname)
{
// PDFドキュメントを作成します。
GcPdfDocument doc = new GcPdfDocument();
// ページを追加し、そのグラフィックスを取得します。
GcPdfGraphics g = doc.NewPage().Graphics;
// ページに文字列を描画します。
g.DrawString("こんにちは、DioDocs(ディオドック)です!" + Environment.NewLine + "from " + platformname,
new TextFormat() { Font = StandardFonts.Times, FontSize = 12 },
new PointF(72, 72));
// 保存
doc.Save("Result.pdf", false);
}
}

WPFアプリケーション(.NET Framework)の実装

MainWindow.xamlにラベルとボタンを追加し、コードビハインドMainWindow.xaml.csではボタンのクリックイベントでクラスライブラリのメソッドを呼び出します。

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
<Grid>
<Label Content="WPF (.NET Framework)" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="10,41,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
DDExcel.Create("WPFアプリケーション(.NET Framework)");
DDPdf.Create("WPFアプリケーション(.NET Framework)");
}
}

WPFアプリケーション(.NET Core)の実装

同じようにMainWindow.xamlにラベルとボタンを追加し、コードビハインドMainWindow.xaml.csではボタンのクリックイベントでクラスライブラリのメソッドを呼び出します。

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
<Grid>
<Label Content="WPF (.NET Core)" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="10,41,0,0" Width="75" VerticalAlignment="Top" Click="Button_Click"/>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
DDExcel.Create("WPFアプリケーション(.NET Core)");
DDPdf.Create("WPFアプリケーション(.NET Core)");
}
}

実行してみる

WPFアプリケーション(.NET Framework)、WPFアプリケーション(.NET Core)それぞれを実行してみます。実行したアプリケーションと同じフォルダにResult.xlsxResult.pdfが作成されていれば成功です!

WPFアプリケーション(.NET Framework)

WPFアプリケーション(.NET Core)

まとめ

.NET StandardなクラスライブラリでDioDocsを使用すると .NET Framework、.NET Core、Xamarinの各アプリケーションで利用することができます。ぜひ試してみてください!


グレープシティは5月29日から開催する「de:code 2019」に協賛しています。

DioDocs」の魅力と使い方について、EXPO オープンシアター セッションで紹介します。また、EXPOエリアで .NETコンポーネント製品を中心に展示してお待ちしていますので、是非お気軽にお立ち寄りください!