所望のキーワードに従いデータベースを検索して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