我通常用它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"