如何使用qpdf按大小将PDF拆分为200MB的文件块?
按文件大小拆分大型PDF(以200MB为例)
由于Linux下多数PDF工具(如qpdf)仅支持按页码拆分,要实现按文件大小拆分,需要结合脚本动态估算页码范围。以下是基于qpdf和bash的解决方案:
前置准备
确保已安装qpdf(多数发行版可通过包管理器安装,比如apt install qpdf或dnf install qpdf),du为系统自带工具无需额外安装。
自动拆分脚本
创建一个bash脚本,自动批量提取页码范围并控制文件大小:
#!/bin/bash # 配置参数 INPUT_PDF="your_large_file.pdf" # 替换为你的大型PDF路径 TARGET_SIZE=$((200 * 1024 * 1024)) # 目标拆分大小(200MB,单位字节) START_PAGE=1 OUTPUT_PREFIX="pdf_part_" # 拆分后文件的前缀 PART_NUM=1 # 获取总页数 TOTAL_PAGES=$(qpdf --show-npages "$INPUT_PDF") while [ $START_PAGE -le $TOTAL_PAGES ]; do END_PAGE=$START_PAGE CURRENT_SIZE=0 # 动态扩展页码范围,直到接近目标大小或到达最后一页 while true; do # 临时生成当前页码范围的PDF qpdf --pages "$INPUT_PDF" "$START_PAGE-$END_PAGE" -- "$INPUT_PDF" "temp_split.pdf" CURRENT_SIZE=$(du -b "temp_split.pdf" | cut -f1) # 判断是否需要停止扩展页码 if [ $CURRENT_SIZE -gt $TARGET_SIZE ] || [ $END_PAGE -ge $TOTAL_PAGES ]; then # 若超出目标大小,回退一页重新生成 if [ $CURRENT_SIZE -gt $TARGET_SIZE ]; then END_PAGE=$((END_PAGE - 1)) qpdf --pages "$INPUT_PDF" "$START_PAGE-$END_PAGE" -- "$INPUT_PDF" "${OUTPUT_PREFIX}${PART_NUM}.pdf" else # 已到最后一页,直接保留临时文件 mv "temp_split.pdf" "${OUTPUT_PREFIX}${PART_NUM}.pdf" fi break fi END_PAGE=$((END_PAGE + 1)) done echo "已生成:${OUTPUT_PREFIX}${PART_NUM}.pdf,页码范围:$START_PAGE-$END_PAGE" START_PAGE=$((END_PAGE + 1)) PART_NUM=$((PART_NUM + 1)) rm -f "temp_split.pdf" done
使用步骤
- 将上述脚本保存为
split_pdf.sh - 修改脚本中的
INPUT_PDF为你的PDF文件路径 - 赋予脚本执行权限:
chmod +x split_pdf.sh - 运行脚本:
./split_pdf.sh
注意事项
- 拆分后的文件大小会接近200MB,但因每页内容差异(如图片页比文字页大很多),实际大小会略有浮动
- 若某单页本身大小超过200MB,脚本会单独保存该页,此时该文件会大于目标大小,这种情况无法避免,需单独对该页进行压缩处理
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

