Как добавить текст на вторую страницу в pdf с помощью Python, Reportlab и pdfrw? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь автоматически заполнить двухстраничный pdf-файл личными данными из CSV-файла для моих клиентов.Я использую Python, Reportlab и пакет pdfrw.

Мне уже удалось успешно заполнить первую страницу PDF, но я не могу заполнить вторую страницу.Ниже мой код (взят из https://medium.com/@zwinny/filling-pdf-forms-in-python-the-right-way-eb9592e03dba, спасибо) и немного изменен.Я должен признать, что я не понимаю код полностью, но я думаю, что проблема заключается в функции слияния.И, вероятно, также в функции get_overlay_canvas.Просто угадай.

def get_overlay_canvas(name) -> io.BytesIO:
    data = io.BytesIO()
    pdf = canvas.Canvas(data, pagesize=A4)
    pdf.setFont('arial', 12)
    pdf.drawString(x=484, y=690, text='2018')
    pdf.drawString(x=70, y=504, text=name)
    pdf.line(193, 413, 205, 432) # izrišemo linijo 1
    pdf.line(205, 413, 193, 432) # izrišemo linijo 2
    pdf.save()
    data.seek(0)
    return data


def merge(overlay_canvas: io.BytesIO, template_path: str) -> io.BytesIO:
    template_pdf = pdfrw.PdfReader(template_path)
    overlay_pdf = pdfrw.PdfReader(overlay_canvas)
    for page, data in zip(template_pdf.pages, overlay_pdf.pages):
        overlay = pdfrw.PageMerge().add(data)[0]
        pdfrw.PageMerge(page).add(overlay).render()
    form = io.BytesIO()
    pdfrw.PdfWriter().write(form, template_pdf)
    form.seek(0)
    return form


def save(form: io.BytesIO, filename: str):
    with open(filename, 'wb') as f:
        f.write(form.read())


import_data(data_file)

Итак, мой вопрос прост: как мне заполнить вторую страницу другими данными?Я перепробовал почти все, что приходит мне в голову, но безуспешно.Заранее спасибо, Дэвид

...