Files
bash-script/remove_watermark_self.sh
gamesme 89cff30da9 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
2025-02-06 01:54:57 +08:00

98 lines
2.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"