1. arachan@github

    Posted

    arachan@github
Changes in title
+PowerShellとLibreOffice DrawでChristmascard
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,127 @@
+![Kyoto Central Post Office.png](https://qiita-image-store.s3.amazonaws.com/0/24550/9f868b97-625c-a4f8-c9e0-0ba83c4c1f9a.png)
+
+日本では年賀状ですが、欧米ではクリスマスカードを贈るそうです。
+今回は
+
+- PowerShell
+- LibreOffice Draw
+- csvファイル
+
+
+これらを使ってクリスマスカードの宛名を量産します。
+できたcodeはGitHubに挙げてあります。
+
+[christmascard - github](https://github.com/arachan/christmascard)
+
+## 環境
+
+- Windows10 Pro
+ - PowerShell v5.1
+- LibreOffice Draw
+ - Flat Open Document Graphic(.fodg)
+- csvファイル
+ - utf8
+
+## 作り方
+
+### Template
+Flat Open Documentsを使う。
+LibreOfficeのOpen Documents Fomatで使える方法です。
+ODFはxmlとcss等を集めてzipで固めたものです。
+Flat ODFにするとXMLやcssの構造が1つになりsed等のText操作ができるようになります。
+
+今回はLibreOffice Drawではがきサイズのクリスマスカードを作りました。
+そこに {postcode} {address} {name}等のTextを配置してあります。
+
+LibreOfficeでは下図のように見えています。
+
+![card.png](https://qiita-image-store.s3.amazonaws.com/0/24550/61b68bdb-f8fb-f78e-26c7-06b80c9c3c12.png)
+
+下記がこのテンプレートの中身です。
+{address1} {postcode} {name}等が見えます。![card.png](https://qiita-image-store.s3.amazonaws.com/0/24550/ff6e26fe-8e50-ce95-cef9-d3a0986955c4.png)
+
+
+```xml:TextEditorでFlat_OpenDocumentを表示
+<draw:frame draw:style-name="gr1" draw:text-style-name="P1" draw:layer="layout" svg:width="2.8cm" svg:height="0.763cm" svg:x="1cm" svg:y="1.037cm">
+ <draw:text-box>
+ <text:p><text:span text:style-name="T1">From</text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr2" draw:text-style-name="P2" draw:layer="layout" svg:width="5.1cm" svg:height="0.7cm" svg:x="5.2cm" svg:y="7.5cm">
+ <draw:text-box>
+ <text:p><text:span text:style-name="T2">{address1}</text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr2" draw:text-style-name="P4" draw:layer="layout" svg:width="8.8cm" svg:height="0.7cm" svg:x="5.2cm" svg:y="8.3cm">
+ <draw:text-box>
+ <text:p text:style-name="P3"><text:span text:style-name="T2">{address2} <text:s/>{postcode}</text:span></text:p>
+ </draw:text-box>
+ </draw:frame>
+ <draw:frame draw:style-name="gr3" draw:text-style-name="P5" draw:layer="layout" svg:width="7.8cm" svg:height="0.962cm" svg:x="5.1cm" svg:y="6.5cm">
+ <draw:text-box>
+ <text:p>{name} </text:p>
+ </draw:text-box>
+ </draw:frame>
+```
+
+## csvファイル
+下記のようなデータになっている。
+uft8でコンマ区切りで保存されています。
+
+|postcode|address1|address2|name|
+|:--|:--|:--|:--|
+|6040925|488 Honojimae-cho Nakagyo-Ward|Kyoto City Kyoto Pref.|Kyoto City Hall|
+|6008799|849-12 Higashiumekoji-cho shimogyo-Ward|Kyoto City Kyoto Pref.|Kyoto Central Post Office|
+
+
+### PowerShell
+templateにcsvファイルのデータを差し込むのに使う。
+この場合は住所録のデータを差し込む。
+
+```posh:データ差込
+# load data
+$data=Import-Csv -Path .\addresslist.csv -Encoding UTF8
+
+foreach($d in $data){
+ # load template
+ $temp=Get-Content .\card.fodg -Encoding UTF8
+
+ # merge template
+ $temp=$temp -replace '{postcode}',$d.postcode
+ $temp=$temp -replace '{address1}',$d.address1
+ $temp=$temp -replace '{address2}',$d.address2
+ $temp=$temp -replace '{name}',$d.name
+
+ $file="cards\"+$d.name
+
+ # output newfile
+ $temp | out-file -FilePath $file'.fodg' -Encoding utf8
+}
+```
+
+さらに大量にできたクリスマスカードを一括で印刷できるようにprint.ps1も作った。
+
+```posh:一括印刷
+$cards=(Get-ChildItem cards\*.fodg)
+
+foreach($card in $cards){
+
+ Start-Process $card -Verb Print | Stop-Process
+
+}
+```
+
+このコマンドは既存のプリンター(標準で使うプリンター)に「標準の設定」で印刷する。
+
+上手く印刷するには、
+標準のプリンターに「はがき」を入れて標準の設定の用紙設定を「はがき」「横」にしましょう。
+
+## 謝辞
+
+Flat ODTを教えてくれた @nogajunさん
+Powershellを使えばFlat ODTにデータ差し込めるのでは?と言い出した @Anubis_369 さん
+
+
+
+
+