美文网首页
MacOS PDF分割和合并

MacOS PDF分割和合并

作者: 千羽之城88 | 来源:发表于2020-08-10 17:01 被阅读0次

    工具(brew search xpdf):

    1. pdfinfo
    2. pdfseparate
    3. pdfunite
    4. shell
    5. gsed
    6. gawk

    手里有一些PDF,需要批量合并,文件名有一定的规律比如:

    xxxx xxxx xxxx 1-20.pdf
    xxxx xxxx xxxx 21-40.pdf
    ...
    xxxx xxxx xxxx 500-525.pdf
    

    先用一条命令把文件全部分到不同的文件夹,文件夹命名为:1-20

    文件夹
    for i in *.pdf; \
    do;\
    folder=$(echo $i | gawk -F "[ .]" '{print $4}'); \
    mkdir $folder; \
    mv "$i" $folder ; \
    done
    
    命令 描述
    for i in *.pdf; do...done for 循环
    -F "[ .]" 定义gawk的分割符
    mkdir $folder 创建文件夹
    mv "$i" $folder 将对应的pdf移到到文件夹内

    接着通过pdfinfo 得到PDF的页数,然后用 pdfseparate 把每个文件夹内的pdf全部拆散。

    #/bin/bash
    
    # 获取pdf的页数,调用pdfseparate工具分割pdf
    # Created by: buddy.qin@gmail.com
    # Date: 2020-08-01
    # 文件夹类型:1-20/21-40/41-60
    
    for d in */
    do
        # 进入目标文件夹
        pushd "./$d" > /dev/null 2>&1
        for f in *.pdf
        do
            last=$(pdfinfo "$f" | gsed -n "/Pages/{s/Pages:\s\+//gp}")
            echo "$f"
            pdfseparate -f 1 -l $last "$f" %d.pdf
        done
        # 退出目标目录,回到根目录
        popd > /dev/null 2>&1
    done
    
    文件夹结构
    
    ├── 1-20
    │   ├── xxxx xxxx xxxx 1-20.pdf
    │   ├── 1.pdf
    │   ├── 2.pdf
    │   ├── ...pdf
    │   ├── N.pdf
    ├── 21-40
    │   ├── xxxx xxxx xxxx 21-40.pdf
    │   ├── 1.pdf
    │   ├── 2.pdf
    │   ├── ...pdf
    │   ├── N.pdf
    ├── 41-60
    │   ├── xxxx xxxx xxxx 41-60.pdf
    │   ├──1.pdf
    │   ├──2.pdf
    │   ├──...pdf
    │   ├──N.pdf
    ├── 61-80
    │   ├── xxxx xxxx xxxx 61-80.pdf
    

    得到如下图的拆散后的文件,然后通过肉眼可见的方式,选中拆散的文件,然后使用 pdfunite 工具来合并选中的pdf。

    拆散后得到的文件

    合并pdf的动图:

    合并拆散后的pdf

    添加到MacOS右键(服务)

    打开 Mac 上的 automator,新建一个quick action,然后保存,就可以得到一个服务, 右键电脑鼠标的时候就可以看到。

    automator automator界面

    代码如下:

    #!/bin/bash
    
    # created by: buddy.qin@gmail.com
    # date: 2020-08-01
    # 在形如:1-20 的文件夹,对序号为1.pdf/2.pdf/3.pdf...n.pdf的文件进行合并
    # 以文件夹的第一个数字为起点,比如21-40的文件夹,则以Dealer_Contract_21.pdf合并选中的pdf
    # 接着每选中文件进行合并的时候,判断已有的合并得到的pdf,以最大的那个数为基础,递归+1
    # 比如目前已有的合并得到的PDF,Dealer_Contract_25.pdf,则选中零散的pdf,合并后得到:Dealer_Contract_26.pdf
    
    pdfunite=/usr/local/bin/pdfunite
    
    for f in "$@"
    do
        idx=$(dirname "$f"|sed "s/.*\///; s/-.*//")
    #   echo $idx
        folder=$(dirname "$f")
        break
    done
    
    if [ -e "$folder/Dealer_Contract_$idx.pdf" ]
    then
        #idx=$((idx+1))
        pushd "$folder" 2>1 &> /dev/null
        for pdf in `ls -rtc Dealer_*.pdf` # bug: 1.pdf 10.pdf 2.pdf ... 9.pdf
        do
            #echo "$pdf" 
            # get last file name num
            idx=$(echo $pdf|sed "s/Dealer_Contract_//g; s/.pdf//")
        done
        echo "Last is: $idx"
        idx=$((idx+1))
        echo "Now is: $idx"
        $pdfunite "$@" \
        "$folder/Dealer_Contract_$idx.pdf"
    else
        echo "Start from: $idx"
        $pdfunite "$@" \
        "$folder/Dealer_Contract_$idx.pdf"
    fi
    

    在形如 61-80 的文件夹内选中拆散的pdf,再根据文件夹的前缀数字命令,

    提示 提示已有的文件名 自动递增文件名

    xpdf工具集

    命令 描述
    pdfunite 合并pdf
    pdftotext pdf转text
    pdftops pdf转ops
    pdftoppm pdf转ppm
    pdftohtml pdf转html
    pdftocairo pdf转cairo
    pdfsig pdf签名
    pdfseparate 拆分pdf
    pdfinfo pdf元数据
    pdfimages pdf转图片
    pdffonts 提取pdf字体
    pdfdetach 删除pdf内置附件
    pdfattach 给pdf添加附件
    pdf2ps pdf转ps
    pdf2dsc pdf转dsc

    相关文章

      网友评论

          本文标题:MacOS PDF分割和合并

          本文链接:https://www.haomeiwen.com/subject/kkiurktx.html