Шаблон PDF не объединяет данные должным образом с pdftk - PullRequest
1 голос
/ 19 июня 2020

Я редактирую шаблон PDF с помощью pdftk

        command = ("pdftk " + '"' +
               template + '"' +
               " fill_form " + '"' +
               pathUser + user['mail'] + ".xfdf" + '"' +
               " output " + '"' +
               pathUser + user['mail'] + ".pdf" + '"' +
               " need_appearances")
        command = command.replace('/', '\\')
        os.system(command)

Сначала я записываю свои данные в файл .xfdf

    for key, value in user.items():
        print(key, value)
        fields.append(u"""<field name="%s"><value>%s</value></field>""" % (key, value))
    tpl = u"""<?xml version="1.0" encoding="UTF-8"?>
            <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
                <fields>
                    %s
                </fields>
            </xfdf>""" % "\n".join(fields)


    f = open(pathUser + user['mail'] + '.xfdf', 'wb')
    f.write(tpl.encode("utf-8"))
    f.close()

Я получаю шаблон и как показано выше, запишите данные из xfdf в pdf, но по какой-то причине записывается только ime.

Шаблоны извлекаются с использованием некоторого базового c условного logi c, как показано ниже:

        for item in user['predavanja']:
            user[acthead + str(actn)] = item
            actn += 1
        for item in user['radionice']:
            user[acthead + str(actn)] = item
            actn += 1
        for item in user['izlet']:
            user[acthead + str(actn)] = item
            actn += 1
        print(actn)

        templates = {}
        templates['0'] = "Template/2019/certificate_2019.pdf"
        templates['5'] = "Template/2019/certificate_2019_5.pdf"
        templates['10'] = "Template/2019/certificate_2019_10.pdf"
        templates['15'] = "Template/2019/certificate_2019_15.pdf"
        templates['20'] = "Template/2019/certificate_2019_20.pdf"
        templates['25'] = "Template/2019/certificate_2019_25.pdf"
        templates['30'] = "Template/2019/certificate_2019_30.pdf"
        templates['35'] = "Template/2019/certificate_2019_35.pdf"
        templates['40'] = "Template/2019/certificate_2019_40.pdf"
        templates['45'] = "Template/2019/certificate_2019_45.pdf"
        templates['50'] = "Template/2019/certificate_2019_50.pdf"

Пишу эти данные

    user['id'] = data['recommendations'][0]['role_in_team']['user']['id']
    user['ime'] = data['recommendations'][0]['role_in_team']['user']['first_name']
    user['prezime'] = data['recommendations'][0]['role_in_team']['user']['last_name']
    user['tim'] = data['recommendations'][0]['role_in_team']['team']['short_name']
    user['mail'] = data['recommendations'][0]['role_in_team']['user']['estudent_email']
    user['puno_ime'] = (data['recommendations'][0]['role_in_team']['user']['first_name'] + ' ' +
                        data['recommendations'][0]['role_in_team']['user']['last_name'])
                user['predavanja'] = predavanja
    user['radionice'] = radionice
    user['izlet'] = izlet

Одно примечание. predavanja, radionice и izlet - списки. Я пробовал напечатать tpl, который показывает, что все данные правильно добавлены в схему.

1 Ответ

1 голос
/ 22 июня 2020

Оказывается, проблема заключалась в именовании переменных, поскольку они не соответствовали именам полей в PDF-формате акроформы. Поэтому решение заключалось в переименовании переменных в коде в соответствии с именами полей.

...