Enhance PDF watermark removal script with robust error handling and cross-platform support

- 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
This commit is contained in:
2025-02-06 01:54:57 +08:00
parent 6bc04ed138
commit 89cff30da9

View File

@@ -1,5 +1,54 @@
#!/bin/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 if [ "$#" -ne 1 ]; then
echo "使用方法: $0 [PDF文件名]" echo "使用方法: $0 [PDF文件名]"
@@ -9,15 +58,40 @@ fi
# 输入的 PDF 文件名 # 输入的 PDF 文件名
PDF_FILE="$1" 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 到文本 # 使用 pdftk 解压 PDF 到文本
pdftk "$PDF_FILE" output uncompressed_$PDF_FILE uncompress if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then
echo "错误PDF 解压失败"
exit 1
fi
# 使用 Perl 去除特殊字符 # 使用 Perl 去除特殊字符
# 注意: 这里假设特殊字符已经正确插入 # 注意: 这里假设特殊字符已经正确插入
perl -pi -e 's/\x00\x32\x00\x37\x00\x30\x00\x35\x00\x35\x00\x38\x00\x20\x52\x18f%i`\)Tj//g' uncompressed_$PDF_FILE 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 # 使用 pdftk 重新组合 PDF
pdftk uncompressed_$PDF_FILE output recombined_$PDF_FILE compress if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then
echo "错误PDF 压缩失败"
rm -f "$TEMP_FILE" # 清理临时文件
exit 1
fi
# 清理临时文件 # 清理临时文件
rm uncompressed_$PDF_FILE rm -f "$TEMP_FILE"
echo "处理完成!输出文件:$OUTPUT_FILE"