从按 Date/Name 分组的单独目录中的 JPEG 生成 PDF
Generate PDF from JPEGs in Separate Directories Grouped by Date/Name
我希望从服务器上的 JPEG 生成 PDF 报告。 JPEG 位于以拍摄位置命名的文件夹中,JPEG 根据拍摄日期命名 (...\Location 1 08 03 description.jpg)。基本上我需要抓取上个月在每个站点拍摄的所有照片,将它们均匀地分组在一个页面上 (4 max/page),用位置和日期标记页面,导出 PDF。
我用 Powershell 和 Python 编写过项目,所以使用这些语言对我来说会容易得多,但我会考虑所有建议。
到目前为止,我的想法是使用 switch/case 到 select 各种文件夹名称,循环到 select 所有情况,以及 select 所有文件一个月范围内的 .jpg 扩展名(可能是用户提示的?)。我失败的地方是按照我的描述将 JPEG 排列成 PDF。
编辑:因此,如果您遵循以下 Mark Setchell 的建议,请创建他建议的图像并将它们放在 C:\New 文件夹中。因此,假设您在此子目录中有 3 个文件夹(新文件夹、新文件夹 (2) 等),其中 2 个包含九种颜色的 JPEGS,第三个是空的:
clear
$path="C:\New folder\"
$array=@()
$name="file*.jpg"
foreach ($i in Get-ChildItem -path $path -Filter "New*")
{$i0=$path+$i; Get-ChildItem -path $i0 -Filter $name | ForEach-Object {$array+= $i0+"\"+$_.name}
montage $array -tile 2x2 -geometry +5+5 -title $i -page letter montage.pdf}`
我的代码用第三个空文件夹的标题覆盖了所有页面上的标题。此外,它开始将下一个文件夹中的 JPEGS 添加到上一页,该页面的标题应与上一个文件夹相同,并且仅包含那些 JPEGS。
要将 jpg 文件转换为 pdf 文件,您可以使用 ImageMagick。
imagemagick 也有不同类型的 python APIs,但是你的情况最好是编写一个简单的 powershell 脚本并直接执行 imagemagick。
只需使用以下 imagemagick 命令:
convert <yourfile.jpg> <newfile.pdf>
注意:您必须在命令中使用文件扩展名。不然imagemagick不知道怎么办。
您可以使用 glob
获取文件(然后根据需要对它们进行排序)。我认为开关可能会变得太复杂。
至于转换部分:答案。
假设您在一个名为 file1.jpg
...file9.jpg
的目录中有 9 个 JPEG 文件,它们是这样创建的,由红色、绿色、蓝色、青色、品红色、黄色块组成,黑色和灰色。
convert -size 300x400 xc:red file1.jpg
convert -size 300x400 xc:lime file2.jpg
convert -size 300x400 xc:blue file3.jpg
convert -size 300x400 xc:cyan file4.jpg
convert -size 300x400 xc:magenta file5.jpg
convert -size 300x400 xc:yellow file6.jpg
convert -size 300x400 xc:black file7.jpg
convert -size 300x400 xc:gray40 file8.jpg
convert -size 300x400 xc:gray80 file9.jpg
如果您现在进入该目录并 运行 下面的 bash
脚本,它会将文件拼接成 A4 纸页,每页 4 张图像。
#!/bin/bash
for f in file*jpg; do
convert -label "$f" "$f" -depth 8 miff:-
done | montage -tile 2x2 -geometry +5+5 miff:- -page A4 montage.pdf
问题的关键是首先根据文件名给每张图片添加一个标签,然后将标签和图片发送到一个能够容纳很多图片的MIFF文件中。然后将组合的图像组输入 montage
,由于 -tile 2x2
,将它们排列成四个页面。几何设置图片之间的间距 - 更大的数字意味着更大的空间。最后我们告诉 montage
纸张尺寸为 A4,我们想要所有输入图像的 PDF - 请!
当然,您可以随意调整背景、大小、间距和标签,直到您满意为止 - 但这应该会给您基本的想法。
您将得到一个名为 montage.pdf
的 PDF,其中包含以下三页:
第1页
第 2 页
第 3 页
将循环转换为丑陋的 Windows-y FOR
循环应该相当简单 - for loop help。
我希望从服务器上的 JPEG 生成 PDF 报告。 JPEG 位于以拍摄位置命名的文件夹中,JPEG 根据拍摄日期命名 (...\Location 1 08 03 description.jpg)。基本上我需要抓取上个月在每个站点拍摄的所有照片,将它们均匀地分组在一个页面上 (4 max/page),用位置和日期标记页面,导出 PDF。
我用 Powershell 和 Python 编写过项目,所以使用这些语言对我来说会容易得多,但我会考虑所有建议。
到目前为止,我的想法是使用 switch/case 到 select 各种文件夹名称,循环到 select 所有情况,以及 select 所有文件一个月范围内的 .jpg 扩展名(可能是用户提示的?)。我失败的地方是按照我的描述将 JPEG 排列成 PDF。
编辑:因此,如果您遵循以下 Mark Setchell 的建议,请创建他建议的图像并将它们放在 C:\New 文件夹中。因此,假设您在此子目录中有 3 个文件夹(新文件夹、新文件夹 (2) 等),其中 2 个包含九种颜色的 JPEGS,第三个是空的:
clear
$path="C:\New folder\"
$array=@()
$name="file*.jpg"
foreach ($i in Get-ChildItem -path $path -Filter "New*")
{$i0=$path+$i; Get-ChildItem -path $i0 -Filter $name | ForEach-Object {$array+= $i0+"\"+$_.name}
montage $array -tile 2x2 -geometry +5+5 -title $i -page letter montage.pdf}`
我的代码用第三个空文件夹的标题覆盖了所有页面上的标题。此外,它开始将下一个文件夹中的 JPEGS 添加到上一页,该页面的标题应与上一个文件夹相同,并且仅包含那些 JPEGS。
要将 jpg 文件转换为 pdf 文件,您可以使用 ImageMagick。 imagemagick 也有不同类型的 python APIs,但是你的情况最好是编写一个简单的 powershell 脚本并直接执行 imagemagick。
只需使用以下 imagemagick 命令:
convert <yourfile.jpg> <newfile.pdf>
注意:您必须在命令中使用文件扩展名。不然imagemagick不知道怎么办。
您可以使用 glob
获取文件(然后根据需要对它们进行排序)。我认为开关可能会变得太复杂。
至于转换部分:
假设您在一个名为 file1.jpg
...file9.jpg
的目录中有 9 个 JPEG 文件,它们是这样创建的,由红色、绿色、蓝色、青色、品红色、黄色块组成,黑色和灰色。
convert -size 300x400 xc:red file1.jpg
convert -size 300x400 xc:lime file2.jpg
convert -size 300x400 xc:blue file3.jpg
convert -size 300x400 xc:cyan file4.jpg
convert -size 300x400 xc:magenta file5.jpg
convert -size 300x400 xc:yellow file6.jpg
convert -size 300x400 xc:black file7.jpg
convert -size 300x400 xc:gray40 file8.jpg
convert -size 300x400 xc:gray80 file9.jpg
如果您现在进入该目录并 运行 下面的 bash
脚本,它会将文件拼接成 A4 纸页,每页 4 张图像。
#!/bin/bash
for f in file*jpg; do
convert -label "$f" "$f" -depth 8 miff:-
done | montage -tile 2x2 -geometry +5+5 miff:- -page A4 montage.pdf
问题的关键是首先根据文件名给每张图片添加一个标签,然后将标签和图片发送到一个能够容纳很多图片的MIFF文件中。然后将组合的图像组输入 montage
,由于 -tile 2x2
,将它们排列成四个页面。几何设置图片之间的间距 - 更大的数字意味着更大的空间。最后我们告诉 montage
纸张尺寸为 A4,我们想要所有输入图像的 PDF - 请!
当然,您可以随意调整背景、大小、间距和标签,直到您满意为止 - 但这应该会给您基本的想法。
您将得到一个名为 montage.pdf
的 PDF,其中包含以下三页:
第1页
第 2 页
第 3 页
将循环转换为丑陋的 Windows-y FOR
循环应该相当简单 - for loop help。