从命令行缩放 PDF 内容和页面尺寸

从命令行缩放 PDF 内容和页面尺寸

我有一组图像存储为单独的 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.shcpdf,并且cpdf对我有用。 cpdf将拉伸封面和内容以填满整个页面,而不会留下多余的空白。

cpdf这是命令,与选项一起使用时需要计算缩放比例-scale-page

cpdf -scale-page "x_ratio_not_size y_ratio_not_size" input.pdf -o output.pdf

cpdfscale我使用依赖于和的pdfinfofish函数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

相关内容