LibreOffice の Calc で住所録を作成して、コマンド1発で年賀はがきの宛名印刷面のPDFデータを作成する方法。
以前の方法(Ubuntuで年賀状の宛名作成 csvで住所録編集 2020年版)ではLibreOffice の Calc で csv データを作成・編集していたので、新規作成・保存の際や編集のためにデータを開き直す際にちょっと煩雑な手順が必要だった。
しかし、今回はLibreOffice Calc のデフォルトのオープンドキュメント形式(.ods)で住所録の作成・編集ができるので、煩雑な手順がなくなり、とても簡単になった。
一度環境を整えたら、次年度からは Calc で住所録編集&スクリプト実行(コマンド1発)だけでOK。
- 更新履歴
- PDFのフォントが意図したものになっていなかった場合の対処を追記。2023年11月4日。
- Tフォントなどの他のフォントを使う方法を追記。2022年10月30日。
- 毛筆フォントへの変更の仕方をcss内に記述。他、若干の修正。2022年10月29日。
- 動作確認環境
- IPAmj明朝フォント・IPAexフォント、perl、chromiumブラウザをインストール
- 他のフォントを使う場合
- フォルダ構成
- スクリプトファイル・設定ファイル
- 宛名データ(宛名.ods)を作成する
- スクリプト実行・PDFファイル生成
- もし、PDF生成が失敗していたら…
- 完成イメージ
- 印刷設定
- 参考リンク
動作確認環境
- Ubuntu 22.04.1 LTS
- Chromium ブラウザ 104.0.5112.79(Official Build)snap (64 ビット)
- LibreOffice 7.3.5.2(snap版)
IPAmj明朝フォント・IPAexフォント、perl、chromiumブラウザをインストール
デフォルトでは、人名の様々な異体字が使えるIPAmj明朝フォントと、郵便番号でIPAexゴシックを使う設定にしている(nenga.css)。 フォントを変更したい場合、後述のnenga.cssの該当箇所を修正する。
「端末」を開き、下記を1行ずつコピペして、エンターキーを押す。一番最初はパスワードを求められるので入力して(セキュリティ上、入力中は何も表示されないけど、ちゃんと入力されている)、エンターキーを押す。
sudo apt install fonts-ipamj-mincho
sudo apt install fonts-ipaexfont
sudo apt install perl
sudo apt install chromium-browser
他のフォントを使う場合
デフォルトのIPAmj明朝フォント以外の、別のフォントを使うこともできる。
Tフォント(T楷書体)
このフォントが結構オススメ。
Tフォントプロジェクト から、Tフォント(for Windows/zipの方)をダウンロード。
ダウンロードしたzipを展開後、フォルダ内にある TKaisho-GT01.ttc
を ホーム/.fonts/ (/home/ユーザー名/.fonts/) にコピーする。
下記のnenga.cssファイルをテキストエディタで開き
font-family:"IPAmj明朝";
の「 IPAmj明朝 」のところを
「TKaisho-GT01」に変える。
毛筆フォント(衡山毛筆フォント、青柳衡山フォントT)
「端末」を開き、以下で衡山毛筆フォント、青柳衡山フォントTをインストール。
sudo apt install fonts-kouzan-mouhitsu
sudo apt install fonts-aoyagi-kouzan-t
下記のnenga.cssファイルをテキストエディタで開き
font-family:"IPAmj明朝";
の「 IPAmj明朝 」のところを
「衡山毛筆フォント」や「衡山毛筆フォント行書」、「青柳衡山フォントT」に変える。
フォルダ構成
年賀宛名from-odsフォルダ(フォルダ名は任意)を作って以下のように設定ファイル等を置いていく。
年賀宛名from-ods (フォルダ名は任意)
├── makenenga.sh
├── nenga.css
└── 宛名.ods (ファイル名は任意)
スクリプトファイル・設定ファイル
スクリプトファイル・設定ファイルをいちいち作成するのが面倒くさい人は、年賀宛名from-ods.zip をダウンロードしてください。
上記zipファイルをダウンロード・展開(解凍)した場合、 宛名データ(宛名.ods)を作成する まで読み飛ばして構いません。
makenenga.sh (スクリプト)
ods → csv → html → pdf というスクリプト。
Ubuntu 22.04.1 LTS上のLibreOffice 7.3.5.2(snap版)を使用している場合、4行目は「libreoffice」にしないとうまくいかなかったが、もしcsvへの変換がうまくいかず、PDFがちゃんと生成されない場合は「soffice」にしてみてください。
参考リンク: odsからcsvへの変換 CSV Filter parameters
テキストエディタを開いて、下記の内容をコピペして、makenenga.sh として保存。
#!/bin/sh
#odsデータからcsvデータへ変換。うまくいかないときは「libreoffice」のところを「soffice」にするといいかも。
libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc):59,59,76" $1.ods
sed -e 's/^[oO○]//g' $1.csv > $1_002.csv
#↓住所の2行目を1字下げしている($14 "<br> " \)。字下げしたくない場合は当該箇所を $14 "<br>" \ にする(全角スペースを削除する)。
sed -e '1d' -e '/^[xX☓]/d' $1_002.csv | \
awk -F ";" \
'{print \
$1 "<section class=\"sheet\">\n<p class=\"郵便番号\">" \
$13 "</p>\n<p class=\"住所\">" \
$14 "<br> " \
$15 "</p>\n<div class=\"宛名\">\n<p class=\"姓\">" \
$3 "</p><p class=\"名\">" \
$4 "<span class=\"敬称\">" \
$5 "</span><br>" \
$7 "<span class=\"敬称\">" \
$8 "</span><br>" \
$9 "<span class=\"敬称\">" \
$10 "</span><br>" \
$11 "<span class=\"敬称\">" \
$12 "</span><br></p>\n</div>\n<div class=\"差出人住所氏名\">\n<p class=\"差出人住所\">" \
$20 "<br>" \
$21 "</p>\n<p class=\"差出人姓\">" \
$16 "</p><p class=\"差出人名\">" \
$17 "<br>" \
$18 "</p>\n</div>\n<p class=\"差出人郵便番号\">" \
$19 "</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' \
-e 's/class=”yoko”/class=\"yoko\"/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出力
chromium-browser --headless --print-to-pdf=`date +%Y%m%d_$1年賀状`.pdf `date +%Y%m%d_$1年賀状`.html
#中間ファイル削除
rm -f $1.csv
rm -f $1_002.csv
rm -f filein01.txt
#rm -f `date +%Y%m%d_$1年賀状`.html
nenga.css (宛名面の版面調整)
ハガキの版面調整(郵便番号や宛名、住所等の位置など)やフォント変更をする場合は、テキストエディタでnenga.cssを開いて修正する。
テキストエディタを開いて、下記の内容をコピペして、nenga.css として保存。
@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; /*上部および右からの位置*/
}
.yoko {
text-orientation: mixed !important;
-webkit-text-orientation: mixed !important;
}
.宛名 {
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;
}
/* 毛筆フォントにしたいときは、端末で以下を実行して、衡山毛筆フォントや青柳衡山フォントTをインストール。
sudo apt install fonts-kouzan-mouhitsu
sudo apt install fonts-aoyagi-kouzan-t
その後、このnenga.cssファイルの font-family:"IPAmj明朝"; の「IPAmj明朝」のところを
「衡山毛筆フォント」や「衡山毛筆フォント行書」、「青柳衡山フォントT」に変える。
* Tフォント(T楷書体)もオススメ。[Tフォントプロジェクト](http://charcenter.tron.org/tfont/index.html)
Tフォントのインストール方法はブログ記事「adbird(広告鳥) 備忘録:Ubuntuで年賀状の宛名作成 2022年版」を参照のこと。 */
.姓 {
display : inline-block;
font-family:"IPAmj明朝"; /*フォント*/
font-size:23pt; /*フォントサイズ*/
line-height:1.3em; /*.名のline-heightの値と同じにする*/
letter-spacing: 0.4em; /*文字間隔*/
}
.名 {
display : inline-block;
/* vertical-align: -webkit-baseline-middle; /*連名時、姓を中央寄せにするときはこちら。*/
vertical-align: top; /*連名時、姓を右寄せにするときはこちら。*/
font-family:"IPAmj明朝"; /*フォント*/
font-size:23pt; /*フォントサイズ*/
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;
}
.差出人姓{
display : inline-block;
font-family:"IPAmj明朝"; /*フォント*/
font-size:14pt;
line-height:1.2em; /*.差出人名のline-heightの値と同じにする*/
letter-spacing: 0.4em; /*文字間隔*/
padding-top:0.5em; /*字下げ*/
}
.差出人名{
display : inline-block;
/* vertical-align: -webkit-baseline-middle; /*連名時、姓を中央寄せにするときはこちら。*/
vertical-align: top; /*連名時、姓を右寄せにするときはこちら。*/
font-family:"IPAmj明朝"; /*フォント*/
font-size:14pt;
margin-top:0.6em; /*姓と名のスペース*/
letter-spacing: 0.4em; /*文字間隔*/
line-height:1.2em; /*連名時の行間*/
}
.差出人郵便番号{
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 */
}
}
宛名データ(宛名.ods)を作成する
※ 雛形のデータは 年賀宛名from-ods.zip の中に入ってます。それを編集するのが手っ取り早いです。
LibreOfficeのCalcで、表計算ドキュメントを新規作成。
1行目を
| 送付 | No. | 姓 | 名 | 敬称 | ふりがな | 連名 | 敬称 | 連名 | 敬称 | 連名 | 敬称 | 郵便番号 | 住所 | 住所2 | 差出人(姓) | 差出人(名) | 差出人連名 | 差出人郵便番号 | 差出人住所 | 住所2 |
にする。
書き方は ods書き方01〜03.png を参考に。
- 郵便番号は -(ハイフン)があってもなくてもどちらもでいい。
- A列(送付):○または空白の場合は宛名面が作成される。☓の場合は宛名面が作成されない。
- 夫婦別姓の場合、2人目をG列(連名)に「別姓=○○」と姓を書き、I列(連名)に名(下の名前)を書く。
- マンション名が英語の場合に、アルファベットを横倒しにしたいときは、
<span class="yoko">〜</span>
とする。
既存の住所録がエクセル等で手元にある人はデータをそれぞれの列にコピペしていくといい。
保存は「宛名.ods」(ファイル名は任意)と拡張子を「.ods」にする(デフォルトで.odsになるはず)。
スクリプト実行・PDFファイル生成
年賀宛名from-odsフォルダ内の構成が次の通りになっていることを確認。
年賀宛名from-ods(フォルダ名は任意)
├── makenenga.sh
├── nenga.css
└── 宛名.ods
年賀宛名from-odsフォルダ内で、 右クリック>端末で開く で、端末を開いて、以下を実行。
sh makenenga.sh 宛名
宛名データのファイル名(ここでは 宛名.ods)を入力するときは、拡張子(.ods)はいらないので注意。
ヘッドレスchromiumの処理で最初だけchromiumのキーリングのロック解除パスワードが求められることがある。
適宜パスワードを入力すれば大丈夫なはず。
また、同様にヘッドレスchromiumの処理でエラーが表示されることもあるけど、ちゃんとPDFは生成されているはず。
ハガキの版面調整(郵便番号や宛名、住所等の位置、フォント変更など)をする場合は、nenga.cssをテキストエディタで開いて修正する。
もし、PDF生成が失敗していたら…
- makenenga.shをテキストエディタで開いて、4行目の「libreoffice」を「soffice」に変えてみてください。
- PDFのフォントが意図したフォントになっていない場合、もしかしたら、htmlのほうではちゃんと表示されているかもしれませんので、htmlを開いて手動で印刷>PDFに変換してみてください。
完成イメージ
印刷設定
プリンタ等、環境によるので、ご注意を。
参考リンク
- odsからcsvへの変換 CSV Filter parameters