我有一组图像存储为单独的 PDF 文件。每个文件一张图片。每张图片占据一页 PDF 页面。
我需要重新缩放所有这些图像,最好是在命令行中,以便 PDF 的图像内容和页面尺寸都相对于其原始大小/尺寸进行缩放。例如:将所有图像缩放 50% 应该会缩小图像的大小和页面的尺寸。
已经尝试过:
- pdfpages + latex:将重新缩放图像但页面尺寸保持不变。
- pdfjam:同样的问题;可以重新缩放但页面尺寸需要是信纸或 A4。
- 转换(imagemagick):转换为光栅,这是我不想要的。
- ghostscript:似乎是根据绝对的新页面大小进行缩放,而我需要相对的页面大小。
我知道其中有一个肯定有效。我不知道我哪里出错了。我用的是 Mac,但 Linux 解决方案也同样有效。
答案1
pdfjam
为此而工作。
pdfjam --outfile out.pdf --paper a5paper in.pdf
答案2
我想我找到了一个:http://community.coherentpdf.com/
cpdf -scale-page "0.5 0.5" in.pdf -o out.pdf
答案3
下面的操作可以实现你想要的效果:
https://github.com/tavinus/pdfScale
注意:截至 2021-07-14,无法指定算术比例因子,但 pdfScale做接受自定义页面大小,以下 posix shell 脚本克服了这一限制:
#!/bin/sh
inFile=yourFilenameHere.pdf
scalePercent=50
# NB: 50% linear scaling takes A4 to A6
# For 50% area scaling (A4 to A5), use scalePercent=70
oldSize=$(pdfinfo $inFile | grep '^Page size')
oldWidth=$(echo "$oldSize" | awk '{print $3}')
oldHeight=$(echo "$oldSize" | awk '{print $5}')
newWidth=$(($oldWidth * scalePercent / 100))
newHeight=$(($oldHeight * scalePercent / 100))
pdfScale.sh -r "custom pts $newWidth $newHeight" $inFile
# default output filename is yourFilenameHere.CUSTOM.pdf
有一个页面位于https://ma.juii.net/blog/scale-page-content-of-pdf-files这解释了该项目背后的历史 - 很有趣的东西!HTH。
答案4
谢谢,我试过了pdfScale.sh
和cpdf
,并且cpdf
对我有用。
cpdf
将拉伸封面和内容以填满整个页面,而不会留下多余的空白。
cpdf
这是命令,与选项一起使用时需要计算缩放比例-scale-page
cpdf -scale-page "x_ratio_not_size y_ratio_not_size" input.pdf -o output.pdf
cpdfscale
我使用依赖于和的pdfinfo
fish函数cpdf
来为我的苹果设备转换 pdf 文件。
以下是cpdfscale.fish
源代码:
function cpdfscale
# Get pdf file origin size
set -l dim_x (pdfinfo $argv[3] | grep -a "Page size" | cut -d\: -f2 | cut -dx -f1 | sed 's/^[ \t]*//')
set -l dim_y (pdfinfo $argv[3] | grep -a "Page size" | cut -d\: -f2 | cut -dx -f2 | cut -d' ' -f2 | sed 's/^[ \t]*//')
echo Origin Page Size\t :\t $dim_x x $dim_y pts
echo Scaled Page Size\t :\t $argv[1] x $argv[2] pts
# Calc scale ratio
set -l sx (math $argv[1] / $dim_x)
set -l sy (math $argv[2] / $dim_y)
echo Scaled Page Ratio\t :\t $sx x $sy
# Set output file and convert
if test (count $argv) -gt 3
echo Scaled Output File\t :\t $argv[4]
cpdf -scale-page "$sx $sy" $argv[3] -o $argv[4] &> /dev/null
else
set -l outfile (echo $argv[1]x$argv[2] - (basename $argv[3] .pdf).pdf)
echo Scaled Output File\t :\t $outfile
cpdf -scale-page "$sx $sy" $argv[3] -o $outfile &> /dev/null
end
echo "Scale finished"
end
用法:
cpdfscale x_size_in_pts y_size_in_pts input.pdf [output.pdf]
。
${x_size_in_pts}x${y_size_in_pts} - ${origin_name}.pdf
如果未指定输出文件,则将使用具有原始名称和新文件页面尺寸的新文件名。
以下命令可将任何 pdf 文件转换为适合我的 iPad Air4 的格式,其屏幕尺寸为 1640 x 2360 pts。
cpdfscale 1640 2360 origin.pdf scaled.pdf
完成我的工作的核心命令是:
cpdf -scale-page "3.253968 4.173453" origin.pdf -o scaled.pdf
输出如下:
>=> cpdfscale 1640 2360 origin.pdf
Origin Page Size : 504 x 565.479 pts
Scaled Page Size : 1640 x 2360 pts
Scaled Page Ratio : 3.253968 x 4.173453
Scaled Output File : 1640x2360 - origin.pdf
Scale finished
>=> cpdfscale 1640 2360 origin.pdf scaled.pdf
Origin Page Size : 504 x 565.479 pts
Scaled Page Size : 1640 x 2360 pts
Scaled Page Ratio : 3.253968 x 4.173453
Scaled Output File : scaled.pdf
Scale finished