Skip to content

Instantly share code, notes, and snippets.

@k3kaimu
Created August 21, 2024 04:34
Show Gist options
  • Save k3kaimu/5ff6806fc5349e76547ed14285d6425d to your computer and use it in GitHub Desktop.
Save k3kaimu/5ff6806fc5349e76547ed14285d6425d to your computer and use it in GitHub Desktop.
PDFファイルの右上にテキストを追加するスクリプト
#!/bin/bash
logfile="add_number_pdflatex.log"
function usage() {
cat <<EOS
Usage: $0 <input file path> <text> <output file path>
PDFファイルの右上に文字列を入れます
<input file path>: 入力PDFファイル
<text>: 付与するテキスト
<output file path>: 出力PDFファイル
EOS
exit 1
}
# mm単位でPDFファイルのページサイズを取得する
getPDFPageSize() {
pdfinfo "$1" | grep "Page size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=0.3528 '{print $1*x}'
}
# PDFファイルのアノテーションをフラット化します
# makeFlattenPDF <PDFファイル> <出力PDFファイル名>
makeFlattenPDF() {
qpdf --flatten-annotations=all "$1" -- "$2" >& $logfile
# if [ $? -ne 0 ]; then
# echo "コマンドqpdf --flatten-annotations=all \"$1\" -- \"$2\"でエラーが出ました."
# fi
}
# PDFファイルの用紙サイズを強制的にA4にしてしまいます
# makeA4PDF <PDFファイル> <ジョブ名> <用紙設定>
makeA4PDF() {
cat <<EOF > "$2.tex"
\documentclass[a4paper$3]{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{$1}
\end{document}
EOF
pdflatex --interaction=nonstopmode "$2.tex" >& $logfile
# if [ $? -ne 0 ]; then
# echo "コマンドpdflatex --interaction=nonstopmode \"$2.tex\"でエラーが出ました."
# fi
}
# makeRightAlignPDF <表示する文字列> <ジョブ名> <用紙設定>
makeRightAlignPDF() {
tmptex=$(mktemp)
cat <<EOF > $2.tex
\documentclass[a4paper$3]{article}
\usepackage[margin=5truemm]{geometry}
\usepackage{color}
\begin{document}
\hfill \LARGE \colorbox{white}{\textbf{$1}}
\end{document}
EOF
pdflatex --interaction=nonstopmode "$2.tex" >& $logfile
# if [ $? -ne 0 ]; then
# echo "コマンドpdflatex --interaction=nonstopmode \"$2.tex\"でエラーが出ました."
# fi
}
# スクリプトの本体
function main() {
filename="$1"
text="$2"
outputpath="$3"
if [ ! -e "$filename" ]; then
echo "ファイル${filename}が存在しません"
exit 1
fi
echo "Input File path: " "$filename"
echo "Output path: " "$outputpath"
# 出力先ファイル名
outputfilename=$(basename "$outputpath")
# PDFページサイズを取得
pagesize=($(getPDFPageSize "$filename"))
echo "PageSize: " ${pagesize[0]}mm x ${pagesize[1]}mm
# 用紙のサイズから,用紙を横向きにするか縦向きにするかを判定する
if [ `echo "${pagesize[0]} > ${pagesize[1]}" | bc` == 1 ]; then
paper_setting=",landscape"
else
paper_setting=""
fi
# echo $paper_setting
makeFlattenPDF "$filename" "__tmp.pdf"
makeA4PDF "__tmp.pdf" "__tmpA4" "$paper_setting"
# $textを記入したPDFファイルを作る
makeRightAlignPDF "$text" "__tmpIndexPDF" "$paper_setting"
# もともとのPDFファイルの注釈をflattenして,2つのPDFファイルを結合する
qpdf --flatten-annotations=all "__tmpA4.pdf" --overlay "__tmpIndexPDF.pdf" --repeat=1-z -- "$outputpath"
# 不要なファイルを消す
rm __tmp.* __tmpA4.* __tmpIndexPDF.*
}
if [[ $# != 3 ]]; then
usage
else
main "$1" "$2" "$3"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment