【PowerShell & WORD】QRコードを差し込み印刷してみる 1/2

このBLOGの趣旨からすると完全に「閑話」なのですが、せっかくなのでBLOGに残しておきたいと思います。

以下のような要件があったとしましょう。

  • お客様にWORDで作成した案内状を印刷して送付したい。
  • 案内状には、宛先ごとに異なる URL(会員番号等が含めたような) を張り付けたい。
  • さらに、URL の QRコード も一緒に貼り付けたい

なんとなくありがちな要件ですよね。この要件をお金をかけずに実現しようとしてパッと思いつくのは、

  • QRコードを生成するフリーのライブラリを使って、バッチファイルでQRコードイメージ(jpgファイルとか)を生成
  • 作成したQRコードのイメージを WORD で差し込み印刷(または差し込みメール)

ってかんじじゃないかと思います。きっと Office の MVP の方あたりだと、もっとエレガントな方法が思いつくと思いますし、こうした案件に対応する専用の製品もあるはずなのですが、今回は小手先でなんとかしてみようかなと思います。ってことで、せっかくの休日なので遊んでみました。

■QRコードのイメージファイルを生成する

① まずはQRコードのイメージファイルを作成してみる

QRコードのイメージファイルとは、ご想像通り、こんなものです。こいつを会員数分、事前に生成しておくわけですね。
100001

とはいえ、QRコードの仕様なんて私は把握していませんし、たとえ仕様を読んだところで私のような人間には手に負えません。そこで、フリーのライブラリを探すことになるのですが、とても素晴らしいライブラリがありました。ご存知の方にとっては超有名なライブラリだと思うのですが..。その名も DotNetBarcode です。

【フリーソフト】高機能でカラフルなQRコード(二次元バーコード)がデザインできる ColorfulQRCodeMaker/高性能バーコード・ライブラリー DotNetBarcode公式ホームページ

他に、Open Source QRCode Livrary などの選択肢はありますし、商用のライブラリももちろん販売されていますが、今回は DotNetBarcode にお世話になろうと思います。いかんせん、私のような非DEVにもとてもやさしい仕様で、サンプルプログラムや仕様書もきっちり用意されていました。作者様、本当にありがとうございます。

さて、早速上記サイトの「ダウンロード」から、DotNetBarcode V2.4.0 をダウンロードしてください。

ZIPファイルを解凍すると、中に以下のファイルが含まれています。

    • CsharpSample [DIR]
    • VBSample [DIR]
    • 【始めにお読みください】.txt ← ライセンスに関する情報等、必ず読んでから使用してください!
    • 【DotNetBarcodeV2.4.0での機能強化点】.txt
    • DotNetBarcode.dll ← ライブラリ本体
    • DotNetBarcodeクラスライブラリ(DotNetBarcode.dll)の仕様書.doc
    • DotNetBarcodeクラスライブラリ(DotNetBarcode.dll)の仕様書.pdf
    • DotNetBarcodeクラスライブラリを使ったQRコードアプリの作り方.doc
    • DotNetBarcodeクラスライブラリを使ったQRコードアプリの作り方.pdf
    • サンプルアプリケーション画面.doc
    • サンプルアプリケーション画面.pdf

【始めにお読みください】.txt を必ず一読しライセンス等に関する情報を理解してください。また、あくまでもフリーソフトとして公開されていますので、その点をご理解した上でご使用ください。

理解できたら、DotNetBarcode.dll ファイルを適当な場所にコピーしましょう。

当然のことながら DLL は C# や VB.NET などからアクセスできるのですが、今回は IT Pro らしく PowerShell から使用してみましょう。

以下のようなスクリプトファイルを作成し、拡張子 ps1 で保存しましょう。今回は qrcodegen.ps1 という名前で保存しました。

[System.Reflection.Assembly]::LoadFile("c:\tmp\qrcodegen\DotNetBarcode.dll") $bc = New-Object DotNetBarcode $bc.Type = "QRCode" $bc.PrintCheckDigitChar = $true $bc.Save("https://blogs.technet.com/junichia/" , "c:\tmp\junichia.jpg", 150, 150)

1行目と2行目は、PowerShell からシステムに登録されていない DLL を使用する場合の常套句です。覚えておくと便利です。LoadFile の引数には、コピーした DotNetBarcode.dll ファイルのパスを指定しています。

DotNetBarcode では、さまざまな種類のバーコードを生成することができるのですが、今回は QRコードを作成したいので、3行目でバーコードタイプを QRCODE としています。また、4行目では、QRCODE のチェックディジットもバーコード上に表示することを指定しています。既定では False です。

そして 5行目の Save() メソッド!これがとても便利です。引数は以下の通りです。

Save(<バーコードに表示する文字列>, <保存するファイル名>, <QRコードの横幅>, <QRコードの高さ>)

今回は、文字列として上記のようにURLを指定し、それを junichia.jpg というJEPGファイルで保存するように指定しました。今回は正方形のQRコードなので、「横幅」と「高さ」については値の小さいほうが一辺の長さとして採用されるようです。詳細は「DotNetBarcodeクラスライブラリ(DotNetBarcode.dll)の仕様書.pdf」をご覧ください。

このスクリプトで作成されたQRコードが以下の通りです。携帯電話などQRコードリーダーをお持ちの方は試してみてください。私のBLOGのURLが読み込めるはずです。

junichia

ここまでできたら、あとは簡単ですよね。

EXCEL か何かでユーザーリストを作成し、その情報を繰り返し読みこんで QRコードをバッチ的に作成すればよいわけです。

② ユーザーリストからQRコードを一括作成する

今回は、ユーザーリストが以下のように EXCEL で用意されているものとします。ここではファイル名を userlist.xlsx とします。

※この EXCEL ファイルは、WORD の差し込み印刷でも使用します。

image

上記の EXCELファイルを読み込み、BLOG サイトの URL を QRコード で生成する PoewrShell スクリプトを作成しましょう。

...ということで作成したのが以下です。冒頭の3行には以下を指定していますので適宜変更してください。

    • $UserList : ユーザーリストが保存されているファイルのフルパス
    • $JpgPath : 作成したQRコードのイメージファイル(JPEGファイル)を保存するパス
    • $DLLPath : DotNetBarcode.dll が保存してあるパス

$UserList ="c:\tmp\userlist.xlsx" $JpgPath = "c:\tmp\img" $DLLPath = "c:\tmp\qrcodegen\DotNetBarcode.dll" $objExcel = New-Object -ComObject Excel.Application $objWB = $objExcel.workbooks.open($UserList) $objWS = $objWB.Worksheets.Item(1) $intRow = 2 [System.Reflection.Assembly]::LoadFile( $DLLPath ) $bc = New-Object DotNetBarcode $bc.Type = "QRCode" $bc.PrintCheckDigitChar = $true

$dirExist = Test-Path $JpgPath If ($dirExist -eq $false) {New-Item -type directory -path $JpgPath} Do { $UserName = $objWS.Cells.Item($intRow, 1).Value() $FirstName = $objWS.Cells.Item($intRow,2).Value() $LastName = $objWS.Cells.Item($intRow,3).Value() $BlogSite = $objWS.Cells.Item($intRow, 4).Value() "https://blogs." + $BlogSite + ".com/" + $UserName $jpgpath + "\" + $UserName + ".jpg" $bc.Save("https://blogs." + $BlogSite + ".com/" + $UserName + "/" ,$jpgpath + "\" + $UserName + ".jpg" , 150, 150)

    $UserName = "" $FirstName = "" $LastName = "" $BlogSite = "" $intRow++ } While ($objWS.Cells.Item($intRow,1).Value() -ne $null) $objExcel.Quit()

このスクリプトを実行すると、以下のようにユーザーごとにQRコードが作成されます。

image

お手元の携帯等で読み取って確認してみてください。

それはそうと、やはり、junichia.jpg にそこはかとない気品が感じられます。そして、kazunorn.jpg からは、あまり更新していない様子がうかがえます。

次回は個々で作成したJPGファイルを使用して、WORDで差し込み印刷してみます。

次へ(【PowerShell & WORD】QRコードを差し込み印刷してみる 2/2)