Използване на pdftk на Fedora 25+

Публикувано на

От няколко версии на сам pdftk не може да се намери в хранилищата на Fedora заради различни проблеми свързани с gcj и други. Ако все пак искате да ползвате pdftk под Fedora, може да стане със следния workaround посредством Docker и Python.

#!/usr/bin/env python
import os
import sys
import subprocess

PDFTK_DOCKER_IMAGE = 'agileek/pdftk'


def main(*argv):
    file_args = {'stamp', 'output'}
    files = {}
    last_arg = None
    pdftk_args = argv[1:]
    if (pdftk_args):
        files['input'] = pdftk_args[0]
        for arg in pdftk_args[1:]:
            if last_arg:
                if last_arg in file_args:
                    files[last_arg] = arg
                last_arg = None
            else:
                last_arg = arg

    volumes = set()
    for val in files.values():
        if val not in {'-', 'PROMPT'}:
            volumes.add(os.path.dirname(os.path.abspath(os.path.normpath(val))))

    docker_args = [
        'docker',
        'run',
        '-it',
        '--rm',
        '--user', '{uid}:{gid}'.format(uid=os.getuid(), gid=os.getgid()),
    ]
    for volume in sorted(volumes):
        docker_args.extend(['-v', '{volume}:{volume}:z'.format(volume=volume)])

    docker_args.append(PDFTK_DOCKER_IMAGE)
    docker_args.extend(pdftk_args)
    subprocess.call(docker_args)


if __name__ == '__main__':
    main(*sys.argv)

Необходимо е само да имате инсталиран Docker и да добавите потребителя си в docker групата, за да не се налага да стартирате скрипта със sudo.

С този  workaround може да имате проблеми и със SELinux, така че може да се наложи да го изключите временно, докато ползвате pdftk. Скрипта добавя :z към аргумента за монтиране на необходимите директории, за да се добави необходимия контекст за SELinux, за да позволи достъпа. Повече инфо тук using-volumes-with-docker-can-cause-problems-with-selinux

blog comments powered by Disqus