
Ghostscript Docker镜像基于Ghostscript工具构建,专注于PDF文件压缩功能。该镜像提供灵活的命令行配置选项,支持不同质量预设、页面范围处理及并行处理能力,帮助用户高效减小PDF文件大小,平衡文件尺寸与质量需求。
通过以下命令可直接进行PDF压缩:
bashdocker run --rm -v $(pwd):/workspace ghostscript gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -dQUIET -sOutputFile=out.pdf in.pdf
参数说明:
-sDEVICE=pdfwrite:指定输出设备为PDF写入-dPDFSETTINGS:质量预设,可选值:
/screen:屏幕显示优化(文件最小,质量较低)/ebook:电子书优化(平衡大小与质量)/printer:打印优化(较高质量)/prepress:印刷前优化(最高质量,文件最大)-dNOPAUSE:处理过程中不暂停-dBATCH:处理完成后自动退出-dQUIET:减少控制台输出信息-sOutputFile=out.pdf:指定输出文件名in.pdf:输入PDF文件路径(需通过-v挂载到容器内)对于包含大量页面的PDF文件,可使用并行处理脚本提升压缩效率。将以下脚本保存为compress_pdf.sh:
bash#!/usr/bin/env bash set -euo pipefail # 输入/输出参数 sIn="${1:?用法: $0 输入.pdf [输出.pdf] [任务数] [dpi] [预设(screen|ebook|printer|prepress)]}" sOut="${2:-out_parallel.pdf}" nJobs="${3:-4}" nDpi="${4:-120}" sPreset="${5:-screen}" # 自动检测页数(优先使用qpdf;fallback到pdfinfo) nPages="$(qpdf --show-npages "$sIn" 2>/dev/null || true)" if [[ -z "${nPages}" ]]; then nPages="$(pdfinfo "$sIn" | awk '/^Pages:/ {print $2}')" fi if [[ -z "${nPages}" ]]; then echo "错误:无法检测页数(需要qpdf或poppler-utils(pdfinfo))" >&2 exit 1 fi # 计算每个任务处理的页数(向上取整) nChunk=$(( (nPages + nJobs - 1) / nJobs )) # 创建临时工作目录并确保退出时清理 sTmpDir="$(mktemp -d)" trap 'rm -rf "$sTmpDir"' EXIT # Ghostscript压缩/下采样参数 sGsArgs="-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/${sPreset} \ -dDownsampleColorImages=true -dColorImageResolution=${nDpi} \ -dDownsampleGrayImages=true -dGrayImageResolution=${nDpi} \ -dDownsampleMonoImages=true -dMonoImageResolution=300 \ -dNOPAUSE -dBATCH -dQUIET" # 生成并行处理的页面范围 sRanges="${sTmpDir}/ranges.txt" nStart=1 nPart=1 while (( nStart <= nPages )); do nEnd=$(( nStart + nChunk - 1 )) (( nEnd > nPages )) && nEnd="${nPages}" printf "%04d %d %d\n" "${nPart}" "${nStart}" "${nEnd}" >> "${sRanges}" nStart=$(( nEnd + 1 )) nPart=$(( nPart + 1 )) done # 并行运行Ghostscript处理每个页面范围 cat "${sRanges}" | xargs -n3 -P "${nJobs}" bash -c ' sPart="$0"; nFirst="$1"; nLast="$2"; sOutPart="'"${sTmpDir}"'/part_${sPart}.pdf" gs '"${sGsArgs}"' -dFirstPage="${nFirst}" -dLastPage="${nLast}" -sOutputFile="${sOutPart}" "'"${sIn}"'" ' # 合并生成的部分(保持顺序:part_0001.pdf, part_0002.pdf, ...) qpdf --empty --pages "${sTmpDir}"/part_*.pdf -- "${sOut}" # 最终摘要 echo "完成:${sOut} (页数=${nPages}, 任务数=${nJobs}, dpi=${nDpi}, 预设=${sPreset})"
使用步骤:
chmod +x compress_pdf.shbashdocker run --rm -v $(pwd):/workspace ghostscript ./compress_pdf.sh input.pdf output.pdf 4 120 screen
input.pdf:输入PDF文件(必填)output.pdf:输出PDF文件(可选,默认out_parallel.pdf)4:并行任务数(可选,默认4)120:图像分辨率(可选,默认120dpi)screen:质量预设(可选,默认screen)-dColorImageResolution、-dGrayImageResolution和-dMonoImageResolution参数分别设置彩色、灰度和单色图像的分辨率-dCompatibilityLevel=1.4设置输出PDF版本(1.4为兼容性较好的版本)-dDownsampleColorImages=true等参数启用图像下采样,进一步减小文件大小您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务