Created
August 21, 2024 04:34
-
-
Save k3kaimu/5ff6806fc5349e76547ed14285d6425d to your computer and use it in GitHub Desktop.
PDFファイルの右上にテキストを追加するスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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