@Kibastus
Начинающий веб-разработчик

Как передавать данные на разные страницы пдф файла?

День добрый. Столкнулся с такой проблемой: нужно генерировать пдф файл с разными темплейтами для страниц. Имеется данный код:
self.line(self.data['sendr'], 10, 250,
              250, {'min_font': 7, 'max_string': 70})
    self.line(self.data['list_num'], 10, 450,
              25, {'min_font': 7, 'max_string': 70})
    self.line(self.data['send_date'], 10, 250,
              45, {'min_font': 7, 'max_string': 70})
    self.line(self.data['delivery_rate_sum_end'], 10, 450,
              450, {'min_font': 7, 'max_string': 70})

    self.can.save()
    self.packet.seek(0)

    new_pdf = PdfFileReader(self.packet)
    current_folder = os.path.dirname(os.path.abspath(__file__))
    existing_pdf = PdfFileReader(
        file("{0}/original/blank_103_1.pdf".format(current_folder), "rb"))
    output = PdfFileWriter()

    page = existing_pdf.getPage(0)
    page.mergePage(new_pdf.getPage(0))
    output.addPage(page)
    print "Page 1 complete"

    # four row page mail part
    for item in range(3, int(self.data['email_count']) - 2, 4):
        self.line(self.data['sends'][item]['rcpn'], 10, 350,
                  250, {'min_font': 7, 'max_string': 70})
        self.line(self.data['sends'][item]['mail_count'], 10, 450,
                  250)

        new_pdf2 = PdfFileReader(self.packet)
        existing_pdf2 = PdfFileReader(
            file("{0}/original/blank_103_2.pdf".format(current_folder), "rb"))

        page2 = existing_pdf2.getPage(0)
        page2.mergePage(new_pdf2.getPage(0))
        output.addPage(page2)
        print "Page ", item, " complete"

    # last page part
    self.line(self.data['sendr'], 10, 100,
              25, {'min_font': 7, 'max_string': 70})
    self.line(self.data['list_num'], 10, 70,
              45, {'min_font': 7, 'max_string': 70})
    self.line(self.data['send_date'], 10, 150,
              45, {'min_font': 7, 'max_string': 70})
    self.line(self.data['delivery_rate_sum_end'], 10, 450,
              450, {'min_font': 7, 'max_string': 70})

    new_pdf1 = PdfFileReader(self.packet)
    existing_pdf1 = PdfFileReader(
        file("{0}/original/blank_103_4.pdf".format(current_folder), "rb"))

    page1 = existing_pdf1.getPage(0)
    page1.mergePage(new_pdf1.getPage(0))
    output.addPage(page1)
    print "Last page complete"

    filename = int(time.time())
    outputStream = file(
        "{0}/pdf/f103/{1}.pdf".format(current_folder, filename), "wb")
    output.write(outputStream)
    outputStream.close()

Генерирует как надо темплейты, вот только данные почему то идут те, что на первой странице. Если же попытаться добавить
self.can.save()
    self.packet.seek(0)

Перед каждой частью, полчаю ошибку ValueError: redefining named object: u'toUnicodeCMap:AAAAAA+ArialMT'. Если же поставить после каждой части self.packet.seek(0), и перед концом self.canvas.save()-все просто виснет. Кто-нибудь сталкивался с похожей проблемой? Использую pypdf и reportlab.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
@Kibastus Автор вопроса
Начинающий веб-разработчик
Вопрос решился, для каждого блока нужно создавать свой canvas и packet, и тогда все нормально передается на нужные листы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы