
Ubuntu日本語フォーラム

ログインしていません。
Ubuntuで年賀状の宛名作成というと、WineにAdobe AIRを入れてはがきデザインキットをインストールする方法や、LibreOfficeで差し込み印刷などがあるかと思いますが、どちらもその導入・作成には多くの手間がかかり、非常にハードルが高いものになっていると感じました。そこで、もう少し簡単に作成できないかと考え、以下の方法を構築しました。
↓私のブログでは画像付きで説明していますので、ご参考に。
Ubuntuで年賀状の宛名作成 csvで住所録編集 2020年版
動作確認はUbuntu18.04です。
必要なものをインストール
端末を開いて以下のコマンドを1行ずつ入力(1行ずつコピペ)して、エンターキーを押す。
(行頭の「$」は入力する必要はない。以下、同様。)。
パスワード入力中は端末上に何も表示されないけど、ちゃんと入力されているので心配しないように。入力時には半角英数字入力になっていることをちゃんと確認すること。
$ sudo apt install fonts-ipamj-mincho $ sudo apt install fonts-ipaexfont $ sudo apt install perl $ sudo apt install google-chrome-stable
以下のようなフォルダ構成にしていきます。
年賀宛名from-csv (フォルダ名は任意)
├── makenenga.sh
├── nenga.css
└── 宛名.csv (ファイル名は任意)
nenga.css をテキストエディタ(geditなど)で作成
@page {size:100mm 148mm; margin:0; padding:0;}
body {margin: 0; padding:0;}
.sheet {
width:100mm; height:148mm;
margin: 0;
padding:0;
position: relative;
page-break-after: always;
}
#title-block-header{
display:none;
}
p{
margin:0;
padding:0;
font-family:"IPAmj明朝";
}
.郵便番号 {
font-family:"IPAexゴシック";
font-style: normal;
font-weight: normal;
letter-spacing: 4.4mm; /*数字の間隔 IPAexゴシック使用時で調整している。フォントを変えた場合は要調整。*/
font-size:13pt;
margin:0;
padding:0;
position:absolute; top:13mm; left:46mm; /*上部および左からの位置。ズレる場合は要調整。*/
}
.住所 {
font-family: "IPAmj明朝";
font-size:14pt;
margin-left:0px;
padding-top:0px;
line-height:1.5em;
letter-spacing:2pt;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
text-orientation: upright;
-webkit-text-orientation: upright;
position:absolute; top:30mm; right:7mm; /*上部および右からの位置*/
}
.宛名 {
position: absolute;
top: 30%; /*上部から位置*/
left: 52%; /*左からの位置*/
-webkit-transform: translateY(-10%) translateX(-50%);
transform: translateY(-10%) translateX(-50%);
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
text-orientation: upright;
-webkit-text-orientation: upright;
}
.姓 {
display : inline-block;
font-family:"IPAmj明朝";
font-size:22pt;
line-height:1.3em;
letter-spacing: 0.4em; /*文字間隔*/
}
.名 {
display : inline-block;
/* vertical-align: -webkit-baseline-middle; /*連名時、姓を中央寄せにするときはこちら。*/
vertical-align: top; /*連名時、姓を右寄せにするときはこちら。*/
font-family:"IPAmj明朝";
font-size:22pt;
margin-top:0.6em; /*姓と名のスペース*/
letter-spacing: 0.4em; /*文字間隔*/
line-height:1.3em; /*連名時の行間*/
}
.敬称 {padding: 0.5em;} /*名前と敬称の間の調整*/
.差出人住所氏名 {
position:absolute; top:70mm; left:8.5mm; /*上部および左からの位置。*/
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
text-orientation: upright;
-webkit-text-orientation: upright;
}
.差出人住所 {
font-family:"IPAmj明朝";
font-size:10pt;
margin:0;
padding-left:0.8em; /*差出人との間*/
line-height:1.2;
}
.差出人 {
font-family:"IPAmj明朝";
font-size:14pt;
letter-spacing: 0.1em;
margin:0 0 0 2pt; /*連名時の行間*/
padding-top:0.5em; /*字下げ*/
}
.差出人郵便番号{
font-size:10pt;
font-family:"IPAmj明朝"; /* IPAmj明朝で文字間隔等を調整している */
margin:0;
padding:0;
position:absolute; top:124mm; left:6mm; /*上部および左からの位置。ズレる場合は調整*/
letter-spacing: 2mm; /* 文字の間隔 */
}
/*数字の縦中横はイマイチな感じなので保留*/
.縦中横 {
text-combine-upright: all;
vertical-align: middle;
}
/** For screen preview **/
@media screen {
body { background: #e0e0e0 }
.sheet {
background: white;
box-shadow: 0 .5mm 2mm rgba(0,0,0,.3);
margin: 5mm;
}
}
@media print {
body {
margin: 0;
padding:0;
width:100mm; height:148mm; /* needed for Chrome */
}
}makenenga.sh をテキストエディタで作成。
#!/bin/sh
sed -e '1d' -e '/^[xX]/d' $1.csv | \
awk -F ";" \
'{print \
$1 "<section class=\"sheet\">\n<p class=\"郵便番号\">" \
$11 "</p>\n<p class=\"住所\">" \
$12 "<br />" \
$13 "</p>\n<div class=\"宛名\">\n<p class=\"姓\">" \
$2 "</p><p class=\"名\">" \
$3 "<span class=\"敬称\">" \
$4 "</span><br />" \
$5 "<span class=\"敬称\">" \
$6 "</span><br />" \
$7 "<span class=\"敬称\">" \
$8 "</span><br />" \
$9 "<span class=\"敬称\">" \
$10 "</span><br /></p>\n</div>\n<div class=\"差出人住所氏名\">\n<p class=\"差出人住所\">" \
$17 "<br />" \
$18 "</p>\n<p class=\"差出人\">" \
$14 "</p>\n<p class=\"差出人\">" \
$15 "</p>\n</div>\n<p class=\"差出人郵便番号\">" \
$16 "</p>\n</section>\n"}' | \
sed \
-e 's/<br \/><span class=\"敬称\"><\/span>//g' \
-e 's/<br \/><\/p>/<\/p>/g' \
-e '/<p class=\"名\"><span class=\"敬称\"><\/span><\/p>/d' \
-e '/別姓/s/<span class=\"敬称\"><\/span><br \/>/<\/p><p class=\"名\">/g' \
-e 's/<\/span><br \/>別姓=/<\/span><\/p>\n<br \/>\n<p class=\"姓\">/g' \
-e '/住所/y/-−ー*/―――*/' \
-e '/郵便番号/s/[-−ー]//g' > filein01.txt
#住所の数字を漢数字に変えたい時は以下の行頭の「#」を消して、上書き保存。
#sed -i -e '/住所/y/1234567890*/一二三四五六七八九〇*/' filein01.txt
#sed -i -e '/住所/y/1234567890*/一二三四五六七八九〇*/' filein01.txt
perl -e '
print "<!DOCTYPE html>\n";
print "<html lang=\"ja\">\n";
print "<head>\n";
print "<meta charset=\"UTF-8\">\n";
print "<link rel=\"stylesheet\" href=\"nenga.css\" type=\"text\/css\">\n";
print "<title>年賀状 宛名<\/title>\n";
print "<\/head>\n";
print "<body>\n";
open(RDFILE, "< filein01.txt");
while(<RDFILE>){ print $_; }
close(RDFILE);
print "<\/body>\n";
print "<\/html>\n";
' > `date +%Y%m%d_$1年賀状`.html
#PDF出力
google-chrome --headless --print-to-pdf=`date +%Y%m%d_$1年賀状`.pdf `date +%Y%m%d_$1年賀状`.html
#中間ファイル削除
rm -f filein01.txt宛名データ(宛名.csv)を作成する。
LibreOfficeのCalcで、表計算ドキュメントを新規作成。
1行目を
| 出さない=x | 姓 | 名 | 敬称 | 連名 | 敬称 | 連名 | 敬称 | 連名 | 敬称 | 郵便番号 | 住所 | 住所2 | 差出人 | 差出人連名 | 差出人郵便番号 | 差出人住所 | 住所2 |
にする。
2行目以降に項目に沿った内容を入力していく。
保存は「宛名.csv」(ファイル名は任意)と拡張子を「.csv」にする。
新規保存の時だけ「テキストファイルのエクスポート」のウィンドウがポップアップされるので、
- 文字エンコーディング Unicode(UTF-8)
- フィールドの区切り記号 ; (セミコロン)
- すべてのテキストのセルを引用符で囲む のチェックを外す
にして、保存する。
スクリプト実行・PDFファイル生成
年賀宛名from-csvフォルダ内の構成が次の通りになっていることを確認。
年賀宛名from-csv
├── makenenga.sh
├── nenga.css
└── 宛名.csv
年賀宛名from-csvフォルダ内で、右クリック>端末で開く で、端末を開いて、以下を実行。
$ sh makenenga.sh 宛名
宛名データのファイル名(ここでは 宛名.csv)を入力するときは、拡張子(.csv)はいらないので注意。
htmlとpdfが生成されているはず。
ハガキの版面調整(郵便番号や宛名、住所等の位置など)をする場合は、nenga.cssをテキストエディタで開いて修正する。
次年度からは宛名データ(宛名.csv)を編集して、上記スクリプトを実行するだけ。
PDF生成はヘッドレスChromeで行うので、Chromeの仕様変更で上手く出力されなくなるかもしれないので、あしからず。
オフライン
修正です。
ChromeはUbuntuのレポジトリには入っていませんでした。
「必要なものをインストール」の最後の行の
$ sudo apt install google-chrome-stable
の部分は削除して、手動でGoogleの公式サイトからダウンロードしてインストールしてください。
申し訳ありません。
オフライン
↓ふりがなでソート(並び替え)できるようにするなど、修正を加えました。変更・修正は私のブログでご確認ください。
Ubuntuで年賀状の宛名作成 csvで住所録編集 2020年版
オフライン
↓csvデータで住所録の作成編集をするのではなく、LibreOffice Calc のデフォルトのオープンドキュメント形式(.ods)で住所録の作成・編集ができるようにしました。
Ubuntuで年賀状の宛名作成 2022年版
csvの作成・保存の際の煩雑な手順がなくなり、より一層、簡単に作成・編集が可能になりました。
オフライン