我不是程序员,但想学习如何使用 Ghostscript 裁剪 PDF。
我的机器上安装了 Ghostscript 9.01。
请指导我一步一步(从调用 Ghostscript 开始)使用特定坐标裁剪 PDF。
我对 Ghostscript 还很陌生。
首先,请注意 PDF 的测量单位与 PostScript 相同:称为“点”[pt]。
72 points == 1 inch == 25.4 millimeters
假设您的页面尺寸为A4。那么介质尺寸为:
595 points width == 210 millimeters
842 points height == 297 millimeters
假设你想剪掉:
left edge: 24 points == 1/3 inch ~= 8.5 millimeters
right edge: 36 points == 1/2 inch ~= 12.7 millimeters
top edge: 48 points == 2/3 inch ~= 17.0 millimeters
bottom edge: 72 points == 1 inch ~= 25.4 millimeters
那么你的 Ghostscript 命令行是这样的(在 Windows 上):
gswin32c.exe ^
-o cropped.pdf ^
-sDEVICE=pdfwrite ^
-c "[/CropBox [24 72 559 794]" ^
-c " /PAGES pdfmark" ^
-f uncropped-input.pdf
或者在 Linux 上:
gs \
-o cropped.pdf \
-sDEVICE=pdfwrite \
-c "[/CropBox [24 72 559 794]" \
-c " /PAGES pdfmark" \
-f uncropped-input.pdf
但是,这可能无法可靠地适用于所有类型的 PDF
[1]。在这些情况下,您应该尝试以下命令:
gswin32c.exe ^
-o cropped.pdf ^
-sDEVICE=pdfwrite ^
-dDEVICEWIDTHPOINTS=595 ^
-dDEVICEHEIGHTPOINTS=842 ^
-dFIXEDMEDIA ^
-c "24 72 translate" ^
-c " 0 0 535 722 rectclip" ^
-f uncropped-input.pdf
或
gs \
-o cropped.pdf \
-sDEVICE=pdfwrite \
-dDEVICEWIDTHPOINTS=595 \
-dDEVICEHEIGHTPOINTS=842 \
-dFIXEDMEDIA \
-c "24 72 translate" \
-c " 0 0 535 722 rectclip" \
-f uncropped-input.pdf
[^]:更具体地说:它不适用于已经定义了特定值的 /CropBox
的 PDF。一个肮脏的黑客方法是在运行上述 GS 命令之前,使用文本编辑器更改所有需要
/CropBox
(或类似的大小写更改)的页面的字符串 /cROPBoX
。大小写更改有效地“解除”了裁剪框设置(不更改任何 PDF 对象偏移量,从而使现有 xref
表无效),因此 PDF 渲染器不再考虑它。
function crop_pdf() {
input=$1
output=$6
pdf_info=$(pdfinfo -box input.pdf)
currentWidth=$(echo "$pdf_info" | grep "Page size:" | awk '{print $3}')
currentHeight=$(echo "$pdf_info" | grep "Page size:" | awk '{print $5}')
left=$2
bottom=$3
right=$(echo "$currentWidth - $4" | bc)
top=$(echo "$currentHeight - $5" | bc)
gs -o $output -sDEVICE=pdfwrite -c "[/CropBox [$left $bottom $right $top] /PAGES pdfmark" -f $input
}
使用方法很简单:
crop_pdf input.pdf left bottom right top output.pdf
例如:
crop_pdf mypdf.pdf 20 30 10 33 mypdf-cropped.pdf
在此示例中,该命令将从左侧删除 20 个点,从底部删除 30 个点,从右侧删除 10 个点,从顶部删除 33 个点。
“积分”是上面 Kurt Pfeifle 的回答中解释的衡量标准。
我不是 100% 确定它是否适用于所有 pdf,但我认为它可以工作。
此脚本需要以下内容: