Files
putnamrec/vendor/tecnickcom/tc-lib-pdf/resources/preflight/run_preflight_matrix.sh
T

95 lines
2.7 KiB
Bash
Raw Normal View History

2026-08-20 11:41:17 +00:00
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
OUT_DIR="${1:-${ROOT_DIR}/target/preflight}"
REPORT_DIR="${OUT_DIR}/report"
GENERATOR="${ROOT_DIR}/resources/preflight/generate_mode_samples.php"
PDFX_MODES=(pdfx pdfx1a pdfx3 pdfx4 pdfx5)
PDFUA_MODES=(pdfua pdfua1 pdfua2)
ALL_MODES=("${PDFX_MODES[@]}" "${PDFUA_MODES[@]}")
VERAPDF_BIN="${VERAPDF_BIN:-$(command -v verapdf || true)}"
QPDF_BIN="${QPDF_BIN:-$(command -v qpdf || true)}"
PDFX_VALIDATOR_CMD="${PDFX_VALIDATOR_CMD:-}"
pdfua_flavour() {
case "$1" in
pdfua|pdfua1)
printf 'ua1'
;;
pdfua2)
printf 'ua2'
;;
*)
return 1
;;
esac
}
mkdir -p "${OUT_DIR}" "${REPORT_DIR}"
echo "[preflight] generating conformance samples in ${OUT_DIR}"
php "${GENERATOR}" "${OUT_DIR}" >/dev/null
failures=0
checks=0
if [[ -n "${QPDF_BIN}" ]]; then
echo "[preflight] running qpdf structural checks"
for mode in "${ALL_MODES[@]}"; do
file="${OUT_DIR}/mode-${mode}.pdf"
report="${REPORT_DIR}/qpdf-${mode}.txt"
if "${QPDF_BIN}" --check "${file}" >"${report}" 2>&1; then
echo "[ok] qpdf ${mode}"
checks=$((checks + 1))
else
echo "[fail] qpdf ${mode} (see ${report})"
failures=$((failures + 1))
fi
done
else
echo "[skip] qpdf not found; install qpdf to enable structural validation"
fi
if [[ -n "${PDFX_VALIDATOR_CMD}" ]]; then
echo "[preflight] running configured PDF/X validator"
for mode in "${PDFX_MODES[@]}"; do
file="${OUT_DIR}/mode-${mode}.pdf"
report="${REPORT_DIR}/pdfx-validator-${mode}.txt"
if MODE="${mode}" FILE="${file}" REPORT="${report}" bash -lc "${PDFX_VALIDATOR_CMD}" >"${report}" 2>&1; then
echo "[ok] pdfx-validator ${mode}"
checks=$((checks + 1))
else
echo "[fail] pdfx-validator ${mode} (see ${report})"
failures=$((failures + 1))
fi
done
else
echo "[skip] no PDF/X profile validator configured; set PDFX_VALIDATOR_CMD to enable PDF/X authority checks"
fi
if [[ -n "${VERAPDF_BIN}" ]]; then
echo "[preflight] running veraPDF PDF/UA profile checks"
for mode in "${PDFUA_MODES[@]}"; do
file="${OUT_DIR}/mode-${mode}.pdf"
report="${REPORT_DIR}/verapdf-${mode}.txt"
flavour="$(pdfua_flavour "${mode}")"
if "${VERAPDF_BIN}" --format text --flavour "${flavour}" "${file}" >"${report}" 2>&1; then
echo "[ok] veraPDF ${mode} (${flavour})"
checks=$((checks + 1))
else
echo "[fail] veraPDF ${mode} (${flavour}) (see ${report})"
failures=$((failures + 1))
fi
done
else
echo "[skip] veraPDF not found; install verapdf to enable explicit PDF/UA profile validation"
fi
echo "[preflight] completed checks=${checks} failures=${failures}"
if [[ ${failures} -gt 0 ]]; then
exit 1
fi