【问题标题】:PDF template not merging data properly with pdftkPDF 模板无法将数据与 pdftk 正确合并
【发布时间】:2020-06-19 20:40:36
【问题描述】:

我正在使用 pdftk 编辑 PDF 模板

        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 被写入。

使用一些基本的条件逻辑获取模板,如下所示:

        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

一个音符。 predavanjaradioniceizlet 是列表。 我已尝试打印 tpl,它显示所有数据都已正确添加到方案中。

【问题讨论】:

  • 这个错误有几个可能的原因,可能是 xfdf 生成不正确,pdf 格式错误,或者 pdftk 有错误。发布实际的 xfdf 和 pdf 将有助于找出问题所在。
  • 我打开了xfdf 文件,将扩展名替换为.xml 和xfdf(如果生成正确的话)。我猜问题出在pdf中数据写入的某个地方。这是在这个hastebin链接hastebin.com/cijafubapu.xml上转换为.xml.xfdf
  • xfdf 对我来说看起来不错,所以我倾向于 pdftk 的问题。如果您在gitlab.com/pdftk-java/pdftk/issues 报告并附上 pdf,我将很乐意提供帮助。

标签: python pdf pdftk xfdf


【解决方案1】:

原来问题在于变量的命名,因为它们与 acroform PDF 中的字段名称不匹配。所以解决方法是重命名代码中的变量以匹配字段名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2015-08-30
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多