- Add pdftk installation check for multiple Linux distributions and macOS - Implement comprehensive file validation checks - Improve error handling during PDF processing - Add informative error messages and exit codes - Enhance script reliability and user experience
98 lines
2.7 KiB
Bash
98 lines
2.7 KiB
Bash
#!/bin/bash
|
||
|
||
# 检查并安装 pdftk
|
||
check_install_pdftk() {
|
||
if ! command -v pdftk &> /dev/null; then
|
||
echo "未检测到 pdftk,正在尝试安装..."
|
||
|
||
# 检测操作系统类型
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
case "$ID" in
|
||
ubuntu|debian)
|
||
sudo apt-get update && sudo apt-get install -y pdftk
|
||
;;
|
||
fedora)
|
||
sudo dnf install -y pdftk
|
||
;;
|
||
centos|rhel)
|
||
sudo yum install -y pdftk
|
||
;;
|
||
*)
|
||
echo "无法确定操作系统类型,请手动安装 pdftk"
|
||
exit 1
|
||
;;
|
||
esac
|
||
elif [ "$(uname)" == "Darwin" ]; then
|
||
# macOS
|
||
if command -v brew &> /dev/null; then
|
||
brew install pdftk-java
|
||
else
|
||
echo "请先安装 Homebrew,然后再安装 pdftk"
|
||
echo "安装 Homebrew: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
|
||
exit 1
|
||
fi
|
||
else
|
||
echo "不支持的操作系统,请手动安装 pdftk"
|
||
exit 1
|
||
fi
|
||
|
||
# 再次检查安装是否成功
|
||
if ! command -v pdftk &> /dev/null; then
|
||
echo "pdftk 安装失败,请手动安装"
|
||
exit 1
|
||
fi
|
||
echo "pdftk 安装成功!"
|
||
fi
|
||
}
|
||
|
||
# 在开始处理之前检查并安装 pdftk
|
||
check_install_pdftk
|
||
|
||
# 检查是否提供了文件名
|
||
if [ "$#" -ne 1 ]; then
|
||
echo "使用方法: $0 [PDF文件名]"
|
||
exit 1
|
||
fi
|
||
|
||
# 输入的 PDF 文件名
|
||
PDF_FILE="$1"
|
||
|
||
# 添加文件存在性检查
|
||
if [ ! -f "$PDF_FILE" ]; then
|
||
echo "错误:文件 '$PDF_FILE' 不存在"
|
||
exit 1
|
||
fi
|
||
|
||
# 添加文件扩展名检查
|
||
if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then
|
||
echo "错误:文件必须是 PDF 格式"
|
||
exit 1
|
||
fi
|
||
|
||
# 设置临时文件和输出文件名
|
||
TEMP_FILE="uncompressed_$PDF_FILE"
|
||
OUTPUT_FILE="recombined_$PDF_FILE"
|
||
|
||
# 使用 pdftk 解压 PDF 到文本
|
||
if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then
|
||
echo "错误:PDF 解压失败"
|
||
exit 1
|
||
fi
|
||
|
||
# 使用 Perl 去除特殊字符
|
||
# 注意: 这里假设特殊字符已经正确插入
|
||
perl -pi -e 's/\x00\x32\x00\x37\x00\x30\x00\x35\x00\x35\x00\x38\x00\x20\x52\x18f%i`\)Tj//g' "$TEMP_FILE"
|
||
|
||
# 使用 pdftk 重新组合 PDF
|
||
if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then
|
||
echo "错误:PDF 压缩失败"
|
||
rm -f "$TEMP_FILE" # 清理临时文件
|
||
exit 1
|
||
fi
|
||
|
||
# 清理临时文件
|
||
rm -f "$TEMP_FILE"
|
||
|
||
echo "处理完成!输出文件:$OUTPUT_FILE"
|