使用 pdfcrop 仅删除顶部和底部边距

使用 pdfcrop 仅删除顶部和底部边距

我通常用它pdfcrop来去除LaTeX文档中 pdf 插图的白边。通过命令行使用它:

pdfcrop myfigure.pdf

它会删除所有边距,但为了避免我调整图形大小(如果它有左右白色边距),我需要一种方法来仅删除顶部和底部边距。我的意思是

pdfcrop --margins '- 0 - 0' input.pdf

(其中-应该是一种方法,使 pdf 裁剪保留原始边距)设置顶部和底部边距以0保留原始的左边距和右边距。

也许,如果有一个工具可以测量(单页).pdf文件的白边距,我可以编写一个脚本来实现我的目的。

答案1

pdfcrop--verbose如果给出了选项,则报告边界框,例如:

pdfcrop --verbose test.pdf

报告称:

PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
[...]
* Running ghostscript for BoundingBox calculation ...
[...]
Page 1
%%BoundingBox: 133 89 308 668
* Page 1: 133 89 308 668
%%HiResBoundingBox: 133.767980 89.369997 307.295991 667.205980
[...]

在这种情况下,左边距为 133。右边距可以通过宽度计算。PDF 文件的大小通过以下方式报告pdfinfo(假设所有页面的大小相同),例如:

pdfinfo test.pdf

报告称:

[...]
Page size:      595.276 x 841.89 pts (A4) (rotated 0 degrees)
[...]

--margins然后可以计算并添加缺失值:

pdfcrop --margins '133 0 288.276 0' test.pdf

或者也可以使用边界框选项:

pdfcrop --bbox '0 89 595.276 668' test.pdf

答案2

这是我创建的脚本版本。我想这可能会对其他人有用。

#!/bin/bash
fname="$1"
pagesize=( $(pdfinfo "$fname" | grep "Page size" | cut -d ":" -f2 | \
    awk '{ print $1,$3 }') )
bounding=( $(pdfcrop --verbose "$fname" | grep "%%HiResBoundingBox" | \
    cut -d":" -f2 ) )
rm "${fname//.pdf/-crop.pdf}"
lmarg="${bounding[0]}"
rmarg="$(python -c "print(${pagesize[0]} - ${bounding[2]})")"
pdfcrop --margins "$lmarg 0 $rmarg 0" "$fname" "$fname"

相关内容