使用 Ghostscript 9.01 裁剪 PDF

问题描述 投票:0回答:2

我不是程序员,但想学习如何使用 Ghostscript 裁剪 PDF。

我的机器上安装了 Ghostscript 9.01。

请指导我一步一步(从调用 Ghostscript 开始)使用特定坐标裁剪 PDF。

我对 Ghostscript 还很陌生。

pdf crop ghostscript
2个回答
80
投票

首先,请注意 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 渲染器不再考虑它。

    


0
投票

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,但我认为它可以工作。

此脚本需要以下内容:

    幽灵脚本
  • bc
  • pdfinfo
  • (xpdf 包含 pdfinfo 命令)
© www.soinside.com 2019 - 2024. All rights reserved.