如何使用 img2pdf 在每页中放置多张图片?

如何使用 img2pdf 在每页中放置多张图片?

我有一系列图像(> 100),想要以特定的尺寸打印,该尺寸允许我将 8 张图像放在一页中,但是当运行下一个命令时,我会逐页获取一张图像。

img2pdf *.png --pagesize letter --border 2cm --imgsize 6.3cmx8.8cm --fit shrink --output cards.pdf

我在命令中缺少什么来实现我想要的布局(2 列 4 张图片)?

PD:我读过手册页但我没有找到任何相关信息,不知道是否有可能

答案1

使用ImageMagick的工具montage。如果您的文件命名如下:
0.png 1.png 2.png 3.png 4.png 5.png 6.png 7.png

[0-7].png -tile 2x4 -geometry +0+0 0-7_montage.png && img2pdf 0-7_montage.png --pagesize letter --border 2cm --imgsize 6.3cmx8.8cm --fit shrink --output cards.pdf

更新:这是处理 100 张图像的方法。
将 100 更改for i in {0..100..8}; do为您的具体数字。

顺序文件名迭代:

#!/bin/bash

output_dir="output_pdfs"

# Create the output directory if it doesn't exist
mkdir -p "$output_dir"

# Iterate over sets of 8 images
for i in {0..100..8}; do
    input_images=$(seq -f "%d.png" $i $((i+7)))

    montage $input_images -tile 2x4 -geometry 332x238+5+5 "$output_dir/montage_output_$i.png"
    img2pdf --pagesize letter --imgsize 669 --output "$output_dir/cards_$i.pdf" --fit shrink "$output_dir/montage_output_$i.png"
done

再次更新:事实证明,这对文件名非常挑剔。因此,这是一个基本上文件名无懈可击的版本。将接受png&jpg格式。

按字母顺序迭代所有文件名:

#!/bin/bash

output_dir="output_pdfs"

# Create the output directory if it doesn't exist
mkdir -p "$output_dir"

# Get a sorted list of image filenames (with quotes)
image_files=($(ls -1Q *.{jpg,png} | sort))

# Iterate over sets of 8 images
for ((i = 0; i < ${#image_files[@]}; i += 8)); do
    input_images=("${image_files[@]:i:8}")

    echo "Processing images: ${input_images[@]}"
    montage "${input_images[@]}" -tile 2x4 -geometry 332x238+5+5 "$output_dir/montage_output_$i.jpg"
    img2pdf --pagesize letter --imgsize 669 --output "$output_dir/cards_$i.pdf" --fit shrink "$output_dir/montage_output_$i.png"
done

保存到:montage_to_pdf.sh
将模式更改为可执行:chmod +x montage_to_pdf.sh
用法:montage_to_pdf.sh

在包含图像的目录中运行。

相关内容