QR Code を 生成する方法

# QR コードを印刷したいときの対処方法

簡単な順番に・・

１）WEB サービスを使う
２）エクセルを使う
３）プログラミングする (.NET Core)

## WEB サービスを使う方法
http://kamocu.com/en/qrcode/

を開いて 作成した QR コードを入力して `Generate` ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/76c30c5f-bf79-d36f-c32d-4eb9ff1efc1c.png)

## エクセルを使う方法

エクセルで ActiveX コンポーネント
「Microsoft BarCcde Control 16.0」
を追加して その `プロパティー` の `Value` に 生成したい QR コードを設定する。

### 手順
「ファイル」メニューの「オプション」から「リボンのユーザ設定」で「開発」のタブのチェックを入れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/6e42487f-c78a-4bad-8072-7286b58f1a90.png)

次に 「開発」メニューの「挿入」から「ActiveX コントロール」で「コントロールの選択」の中にある「Microsoft BarCcde Control 16.0」を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/efeebbfd-aca8-8234-d2a9-5fb9f7c6cc71.png)

そのバーコードコントロールを右クリックして
「Microsoft BarCard Control 16.0 オブジェクト」の「プロパティー」の「スタイル」から「11-QRコード」を選択。
「プロパティー」の中の「Value」に表示したい値を設定します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134762/ab11f84f-6158-b719-47a1-1880a09f531b.png)

## プログラミングする方法

`.NET Core` が簡単。 Windows でも Linux でもできます。
インストール
[.NET Core](https://dotnet.microsoft.com/download)
[Visual Studio Code](https://code.visualstudio.com/)

コマンドプロンプトから

```
mkdir barcord
cd barcord
dotnet new console
dotnet add package QRCoder
code .
```

Visual Studio Code の画面で 下記コードを入力して 

```
using System;
using QRCoder;
using System.IO;

namespace barcord
{
    class Program
    {
        static void Main(string[] args)
        {
            String msg = "Hello World!";

            SaveToBitmap(msg , "hello.bmp");
            SaveToPng(msg, "hello.png");
#if NET6_0_WINDOWS
            SaveToSVG(msg, "hello.svg");
#endif
        }

        static void SaveToBitmap(string msg,string imgFileName)
        {
            var bytes = BitmapByteQRCodeHelper.GetQRCode(msg, QRCodeGenerator.ECCLevel.M, 10);
            using(FileStream fs = new FileStream(imgFileName, FileMode.Create)) {
                fs.Write(bytes);
                fs.Flush();
                fs.Close();
            }
        }

        static void SaveToPng(String msg,string imgFileName)
        {
            var bytes = PngByteQRCodeHelper.GetQRCode(msg, 10, new byte[]{ 0,0,0}, new byte[]{255,255,255}, QRCodeGenerator.ECCLevel.M);
            using(FileStream fs = new FileStream(imgFileName, FileMode.Create)) {
                fs.Write(bytes);
                fs.Flush();
                fs.Close();
            }
        }
#if NET6_0_WINDOWS
        static void SaveToSVG(String msg,string imgFileName)
        {
            String svgString = SvgQRCodeHelper.GetQRCode(msg,10,"#000000","#FFFFFF", QRCodeGenerator.ECCLevel.M);
            using(StreamWriter sw = new StreamWriter(imgFileName)) {
                sw.WriteLine(svgString);
                sw.Flush();
                sw.Close();
            }
        }
#endif
    }
}

```

プログラムを実行

```
dotnet run
```

Windows でも Linux（WSL Ubunto 18.04 )でも QRコードを作成する事ができました。

※ 2022.04.13 現在 .NET Core 6.0 では Windows でのみ SVG形式の画像が作成されます。
Linux で SVG形式の QR コードを作成できない 詳しい理由は 開発元のページ
https://github.com/codebude/QRCoder/pull/358
で確認できます。
近い将来この問題は解決するかもしれません。

https://github.com/codebude/QRCoder/issues/366
https://github.com/codebude/QRCoder/issues/315