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
|
#!/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"
|
||||||
|
|||||||
Reference in New Issue
Block a user