Мне нужно создать PDF-документы на 100 страниц. Процесс обрабатывает много данных для обработки, и для генерации "все-в-одном" требуется больше времени и памяти, которые я могу дать.
Я пробовал несколько разных способов взломать мой путь:
- xhtml2pdf с HTML-преобразованием и преобразованием
- rportlab для создания некоторых страниц и
- pyPdf для слияния
С меняющимся результатом я получил его работу, но он медленный и занимает больше памяти, чем должен (иногда ударяя по типу памяти в памяти). В настоящее время я создаю несколько разделов в разных задачах, сохраняя их каждый в blobstore и объединяя их с pyPdf, но он зажимает большие документы.
Документ, который я создаю, не настолько сложный, в основном, таблицы и текст, внутренние ссылки, отсутствие TOC, ничего, что должно было бы знать о остальной части документа. Я могу жить с утконосом для макетирования, и мне не нужен внешний вид документа или преобразование HTML2PDF.
Цель состоит в том, чтобы сгенерировать документ так быстро, как позволяет хранилище данных. Параллельное создание страниц было бы неплохо, но не требовалось.
Я думал о поэтапном создании файлов blobstore api, где каждая задача создавала бы одну страницу, а последняя задача была бы завершена Файл blobstore делает его доступным для чтения. Но я не могу найти, как сделать паузу, хранить частичный PDF-поток, и они возобновляют генерации с помощью этого потока для создания следующей страницы в другой задаче.
Итак, мой вопрос:
Как в GAE создается документ PDF большего размера, разделяющий генерацию между запросами задач, а затем сохраняемый результирующий документ в блочном блоке?
Если расщепление генерации невозможно с помощью reportlab, то как свести к минимуму объем слияния разных PDF-документов, чтобы он соответствовал ограничениям, заданным запросом задачи GAE?
UPDATE: Альтернативы API конверсии очень ценятся.
2nd UPDATE API конверсии списывается, так что теперь не вариант.
3rd UPDATE Может ли помочь Pileline или MapReduce API?