Большие PDF-файлы занимают значительно больше времени благодаря ReportLab - PullRequest
0 голосов
/ 13 марта 2019

Я использую ReportLab для создания отчетов в формате PDF, и ниже приведен код для того же.Проблема в том, что для количества страниц X это занимает время T, но для страниц 2X это занимает намного больше времени, чем 2T.Поскольку мне нужно создавать PDF-файлы, которые могут занимать до 35000 страниц, это большая проблема.Что я могу сделать, чтобы обойти эту проблему.

from reportlab.platypus import TableStyle, SimpleDocTemplate, LongTable, Table
from reportlab.lib.pagesizes import letter

class JournalPDFGenerator(object):
    """
    Generates Journal PDF with ReportLab
    """

    def __init__(self, pdf_name, profile_report_id):
        self.pdf_name = pdf_name
        self.profile_report_id = profile_report_id
        self.profile_report = ProfileWatchReport.objects.get(id=self.profile_report_id)
        self.document = SimpleDocTemplate(self.pdf_name, pagesize=letter)
        self.story = []

    def get_prepared_rows(self):
        row = [your_mark_details, threat_mark_details]
        yield row

    def generate_pdf(self):
        report_table = LongTable([row for row in self.get_prepared_rows()])
        self.story.append(report_table)
        self.document.build(self.story)

1 Ответ

0 голосов
/ 13 марта 2019

35 тыс. Страниц не совсем обычное использование PDF, поэтому любые сбои не являются совершенно неожиданными. Несколько идей для изучения:

  • Может случиться так, что на машине просто не хватает оперативной памяти, связанной с объемом данных, и поможет обновление аппаратного обеспечения.
  • Вы можете попробовать разбить данные на несколько таблиц, а не на одну большую, чтобы посмотреть, не улучшит ли это производительность.
  • Можно ли было бы временно разделить содержимое (чтобы оно было сшито обратно в один файл с помощью другого инструмента, такого как GhostScript) или окончательно на несколько файлов?
  • Можно ли справиться с нумерацией страниц самостоятельно (например, если длина элементов контента предсказуема)? Может быть (или нет), что нумерация очень больших таблиц выходит из-под контроля.
  • Вы можете попробовать протестировать структуру данных, отличную от LongTable, которая выполняется на той же длине, чтобы проверить, связана ли проблема с этой конкретной структурой; если это; Вы могли бы найти альтернативу.
  • Наконец (или, во-первых, в зависимости от вашего желания), вы можете посмотреть соответствующий код и / или поднять проблему с командой ReportLab.
...