所望のキーワードに従いデータベースを検索してHTML表を作成するコマンドが有ります。このコマンドにファイルから読み込んだキーワードを与え、作成したHTML文書をPDF変換し、さらに pdftkコマンドを用いて結合して、ひとつのPDF文書とします。
#!/bin/bash
# 外部ファイル keyword.txt の中身を配列変数 ${key} に格納する
declare -a key=( \
`cat keyword.txt |\
sed -n '1,999p'` \
)
left_margin=25 # 左余白の設定
right_margin=15 # 右余白の設定
top_margin=15 # 上余白の設定
bottom_margin=18 # 下余白の設定
# 一時ファイルの作成
temp_html=`mktemp ./XXXX.html`
temp_pdf=`mktemp ./XXXX.pdf`
# 事前に表紙となる original.pdf を作成しておく
# これを ${output_pdf} として使用する
output_pdf="目的のPDF.pdf"
cp original.pdf ${output_pdf}
for (( i=0; i<${#key[*]}; i++ ))
do
echo ${key[$i]}
# データベースよりKEYオプションに応じて検索を実施し、
# HTML文書を作成する自作コマンド
./make_html key=${key[$i]} > ${temp_html}
# wkhtmltopdf にて PDF文書に変換
# ( 余白の設定については https://stackoverrun.com/ja/q/10907299 を参考)
wkhtmltopdf -q -T ${top_margin} -B ${bottom_margin} \
-L ${left_margin} -R ${right_margin} ${temp_html} ${temp_pdf} \
>/dev/null 2>&1
# pdftk で結合の実施
# 一時ファイル ${united_pdf} に出力し、
# ${output_pdf} にファイル名変更することで
# 再帰的な結合を繰り返す
united_pdf=`mktemp ./XXX.pdf`
pdftk ${output_pdf} ${temp_pdf} cat output ${united_pdf}
mv ${united_pdf} ${output_pdf}
done
rm ${temp_html} ${temp_pdf}
HTMLを作成する自作コマンド make_html については以下に示します。今回の主眼ではありませんので、特にコメントは付けてません。
#!/bin/bash
key=`getparstr $# "$*" "key"`
#################################################
host=xxx.xxx.xxx.xxx
temp=`mktemp ./XXXX`
if [ ! -z "${key}" ]
then
mysql -h ${host} -N ${DATABASE} << _SQL_ > $temp
select v.id,ch,py,ja from vocabulary v
right join keyword k on k.id=v.id
where k.word like "%${key}%"
order by k.sub_id,v.id;
_SQL_
else
rm $temp; exit
fi
cat << _HEADER_ > /dev/stdout
<table border="1">
<caption><span style="font-size: 150%;">${key}</span></caption>
<meta http-equiv="content-type" charset="utf-8">
<tr>
<th>番号</th>
<th>中国語</th>
<th> 拼音</th>
<th>日本語</th>
</tr>
_HEADER_
cat $temp |\
awk -F"\t" --assign line="$line" \
'{printf "<tr>\n"} \
{printf "<td>%d</td>\n",$1} \
{printf "<td>%s</td>\n",$2} \
{printf "<td>%s</td>\n",$3} \
{printf "<td style=\"font-size:80%;\">%s</td>\n",$4} \
{printf "</tr>\n"}' >> /dev/stdout
cat << _FOOTER_ >> /dev/stdout
</table>
_FOOTER_
rm $temp; exit