【问题标题】:Merge pdf by file name using Mac automator使用 Mac automator 按文件名合并 pdf
【发布时间】:2020-12-16 17:38:51
【问题描述】:

我正在尝试让 automator 合并两个名称相似的文件中的 PDF 页面。

现在我已经在 automator 中有一个服务工作流,它能够合并两个选定的文件:

虽然这个工作流程确实很有用,但我仍然必须手动选择要一个一个合并的文件。此外,生成的文件名正在被重命名,并在设置的单词之后使用明显随机的字母字符串。

我将主要使用此脚本来获取编号文件(例如:10989.pdf)与包含这些编号的文件合并,名称如“lst009010989.pdf”。这些文件都在一个文件夹中,其他各种文件的名称遵循同一系统,所以我需要的是工作流获取编号文件并将它们加入到各自的 lst 文件中,将其复制到另一个文件夹,同时维护编号文件名称(在本例中为 10989),然后对文件夹中的其他文件执行相同操作。

我怎么能做到这一点?

附加信息: 合并文件的第一页应始终是编号文件中的一个(示例中为 10989)。第二个应该是 LST 文件之一。生成的文件应命名为 NF_LST xxxxx.pdf(xxxx 是编号文件的名称,在本例中为 10989)。

第一个文件名总是以 lst 开头,有 14 个字符,最后一个总是与编号的文件名相同。编号的文件名从 3 个字符变为 6 个字符。

下图显示了典型文件夹包含的内容:

【问题讨论】:

  • 您遗漏了一些非常重要的信息! 1. 合并页面时,在合并的文档中哪个文件的页面在前,哪个文件的页面在后? 2. 重命名时使用哪个文件名,例如: FN_LST 10989.pdfFN_LST lst009010989.pdf 3. lst….pdf的位数是否总是 9 > 文件和 5 具有相应的数字文件名文件? 4. 非数字文件名是否都以 lst 开头?坦率地说,您应该包含一个适当的部分目录列表,以便我们知道您在处理什么。
  • 5. 同一目录下是否有其他文件要合并,还是只合并对应的文件?
  • 对不起,我会更新问题。因此,第一页应该是文件 10989.pdf 的那个,第二页应该是 lst 文件的那个。编辑后的文件名应为 FN_LST 10989.pdf。所有非数字文件名都以 LST 开头。 LST 后面的数字可能会改变,但最后的数字始终与编号的文件名相同(在本例中为 10989)。
  • LST 文件名总是 14 个字符,但编号的文件从 3 个字符到 6 个字符不等。我添加了包含文件的文件夹的打印屏幕。提前感谢您的耐心等待! @user3439894
  • 您运行的是哪个版本的 macOS?例如。 macOS Catalina 10.15.4

标签: macos pdf merge applescript automator


【解决方案1】:

以下内容已在 ma​​cOS Catalina 10.15.4 和 10.15.5 下进行了测试,但在 10.15.5 下作为快速操作不适用于我。使用 find command 时,运行 Shell 脚本 操作 中似乎有一个错误。它还可以在 ma​​cOS High Sierra 下运行,也可以在三个测试环境中作为 shell 脚本。这进一步支持了 10.15.5 中的 错误 假设。

这需要使用第三方的cpdf,免费,Coherent PDF Command Line Tools Community Release -- 直接下载链接:Download pre-built cpdf tool

示例 bash脚本 代码

for i in "$@"; do
    [[ ${i} =~ .*/[0-9]{3,6}.*\.[pP][dD][fF] ]] || continue
    j="$(find "${i%/*}" -type f -iname "lst*${i##*/}")"
    [[ ${j} =~ .*/lst.*[0-9]{3,6}\.[pP][dD][fF] ]] || continue
    l=${j##*/}
    [[ ${#l} -eq 18  ]] || continue
    /usr/local/bin/cpdf -merge "${i}" "${j}" -o "${i%/*}/FN_LST ${i##*/}"
done

按照编码,它执行以下操作:

  • 检查传递的文件是一个名为PDF 文件的3到6位数字。
  • 在相同的文件夹中查找对应的PDF文件,以lst开头并以相同结尾3 到 6 位数字,名为 PDF 文件
  • 如果未找到对应的 PDF 文件,则会移至下一个文件
  • 验证找到的相应 PDF 文件 的长度为 18 个字符,包括扩展名。
  • 将匹配集与名为 PDF file 的 3 到 6 位数字组合在新的组合 file 中。
  • 创建组合的文件,例如FN_LST [0-9]{3,6}.pdf,(FN_LST 10989.pdf),在同一个文件夹中,可以更改。
  • 不覆盖现有的文件

更改创建新组合文件的位置,例如/usr/local/bin/cpdf ... 行,将${i%/*} 更改为:

-o "${i%/*}/FN_LST ${i##*/}"

收件人:

-o "/path/to/FN_LST ${i##*/}"

其中/path/to完全限定的目录路径名,例如:

-o "$HOME/Documents/Combined PDF Files/FN_LST ${i##*/}"

注意:/path/to目录必须已经存在,因为没有错误处理,虽然也可以添加,例如:

d="HOME/Documents/Combined PDF Files"
[[ -d ${d} ]] || mkdir -p "${d}"

for i in "$@"; do
    [[ ${i} =~ .*/[0-9]{3,6}.*\.[pP][dD][fF] ]] || continue
    j="$(find "${i%/*}" -type f -iname "lst*${i##*/}")"
    [[ ${j} =~ .*/lst.*[0-9]{3,6}\.[pP][dD][fF] ]] || continue
    l=${j##*/}
    [[ ${#l} -eq 18  ]] || continue
    /usr/local/bin/cpdf -merge "${i}" "${j}" -o "${d}/FN_LST ${i##*/}"
done

【讨论】:

  • 顺便说一句...我正在阅读该工具的 GitHub,显然,Apple 正在停止使用未经公证的可执行文件。这难道不是这个错误的原因吗?
猜你喜欢
  • 2014-07-28
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2018-10-08
  • 1970-01-01
  • 2014-06-17
  • 2018-02-07
相关资源
最近更新 更多