@@ -48,50 +48,75 @@ check_install_pdftk() {
|
|||||||
|
|
||||||
# 在开始处理之前检查并安装 pdftk
|
# 在开始处理之前检查并安装 pdftk
|
||||||
check_install_pdftk
|
check_install_pdftk
|
||||||
|
# 检查是否使用 --keep-temp 参数
|
||||||
|
KEEP_TEMP=false
|
||||||
|
args=()
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [ "$arg" == "--keep-temp" ]; then
|
||||||
|
KEEP_TEMP=true
|
||||||
|
else
|
||||||
|
args+=("$arg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# 检查是否提供了文件名
|
# 参数校验
|
||||||
if [ "$#" -ne 1 ]; then
|
if [ "${#args[@]}" -eq 0 ]; then
|
||||||
echo "使用方法: $0 [PDF文件名]"
|
echo "使用方法: $0 [PDF文件1] [PDF文件2] ... [--keep-temp]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 输入的 PDF 文件名
|
# 开始处理多个文件
|
||||||
PDF_FILE="$1"
|
for PDF_FILE in "${args[@]}"; do
|
||||||
|
if [ ! -f "$PDF_FILE" ]; then
|
||||||
|
echo "文件不存在: $PDF_FILE"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
# 添加文件存在性检查
|
if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then
|
||||||
if [ ! -f "$PDF_FILE" ]; then
|
echo "不是 PDF 文件,跳过: $PDF_FILE"
|
||||||
echo "错误:文件 '$PDF_FILE' 不存在"
|
continue
|
||||||
exit 1
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# 添加文件扩展名检查
|
TEMP_FILE="temp_$PDF_FILE"
|
||||||
if [[ ! "$PDF_FILE" =~ \.pdf$ ]]; then
|
OUTPUT_FILE="clean_$PDF_FILE"
|
||||||
echo "错误:文件必须是 PDF 格式"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 设置临时文件和输出文件名
|
if [ -f "$OUTPUT_FILE" ]; then
|
||||||
TEMP_FILE="uncompressed_$PDF_FILE"
|
echo "文件 $OUTPUT_FILE 已存在,跳过处理。"
|
||||||
OUTPUT_FILE="recombined_$PDF_FILE"
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
# 使用 pdftk 解压 PDF 到文本
|
echo "解压 PDF: $PDF_FILE"
|
||||||
if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then
|
if ! pdftk "$PDF_FILE" output "$TEMP_FILE" uncompress; then
|
||||||
echo "错误:PDF 解压失败"
|
echo "PDF 解压失败: $PDF_FILE"
|
||||||
exit 1
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 使用 Perl 去除特殊字符
|
echo "清除水印中: '$PDF_FILE'"
|
||||||
# 注意: 这里假设特殊字符已经正确插入
|
perl -pe '
|
||||||
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"
|
s/\(\x00\x32\x00\x37\x00\x30\x00\x35\x00\x35\x00\x38\x00\x20\x52\x18f%i`\)Tj//g;
|
||||||
|
s/\(\x00\x15\x00\x1a\x00\x13\x00\x18\x00\x18\x00\x1b\x00\x03\\bN\x1C\[\x1F\x96\)Tj//g;
|
||||||
|
' "$TEMP_FILE" > "${TEMP_FILE}.tmp"
|
||||||
|
|
||||||
# 使用 pdftk 重新组合 PDF
|
if [ ! -f "${TEMP_FILE}.tmp" ]; then
|
||||||
if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then
|
echo "未生成中间文件,跳过: $PDF_FILE"
|
||||||
echo "错误:PDF 压缩失败"
|
rm -f "$TEMP_FILE"
|
||||||
rm -f "$TEMP_FILE" # 清理临时文件
|
continue
|
||||||
exit 1
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# 清理临时文件
|
mv "${TEMP_FILE}.tmp" "$TEMP_FILE"
|
||||||
rm -f "$TEMP_FILE"
|
|
||||||
|
|
||||||
echo "处理完成!输出文件:$OUTPUT_FILE"
|
echo "重新压缩生成: $OUTPUT_FILE"
|
||||||
|
if ! pdftk "$TEMP_FILE" output "$OUTPUT_FILE" compress; then
|
||||||
|
echo "PDF 压缩失败: $PDF_FILE"
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$KEEP_TEMP" = false ]; then
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
else
|
||||||
|
echo "保留临时文件: $TEMP_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "处理完成: $OUTPUT_FILE"
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user