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:
@@ -1,5 +1,54 @@
|
||||
#!/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文件名]"
|
||||
@@ -9,15 +58,40 @@ 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 到文本
|
||||
pdftk "$PDF_FILE" output uncompressed_$PDF_FILE uncompress
|
||||
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' 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 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"
|
||||
|
||||
Reference in New Issue
Block a user