Как сгенерировать PDF-документ страницы -на -страницы в фоновых задачах на App Engine

Мне нужно сгенерировать более 100 страниц PDF-документов. Процесс требует много данных для обработки, и все -в -один раз генерация занимает больше времени и памяти, чем я могу выделить.

Я испробовал несколько разных методов, чтобы взломать свой путь:

  • xhtml2pdf с генерацией и преобразованием HTML
  • rportlab для создания некоторых страниц и
  • pyPdf для слияния

С переменным результатом у меня это заработало, но оно работает медленно и занимает больше памяти, чем должно (иногда достигает предела программной памяти экземпляра ). В настоящее время я создаю несколько разделов в разных задачах, сохраняя каждый в blobstore, и объединяю их с pyPdf, но он задыхается от больших документов.

Создаваемый мной документ не так уж и сложен, в основном таблицы и текст, без внутренних ссылок, без оглавления,нет ничего, что должно быть известно об остальной части документа. Я могу жить с утконосом для верстки, и мне не нужен причудливый вид документа или преобразование HTML2PDF.

Цель состоит в том, чтобы сгенерировать документ настолько быстро, насколько это позволит хранилище данных. Параллельная генерация страниц была бы хороша, но не обязательна.

Я думал о создании страницы -путем -генерации страниц с помощью blobstore files api , где каждая задача будет генерировать одну страницу, а последняя задача будет завершать файл blobstore, делая его читабельным. Но я не могу найти, как приостановить создание, сохранить частичный PDF-файл в поток и возобновить создание с этим потоком для создания следующей страницы в другой задаче.

Итак, мой вопрос::

Как в GAE создать PDF-документ объемом более нескольких страниц, разделив генерацию между запросами задач, а затем сохранить полученный документ в blobstore?

Если разделение поколений невозможно с помощью reportlab, то как минимизировать объем объединения различных PDF-документов, чтобы оно соответствовало ограничениям, установленным запросом задачи GAE?

ОБНОВЛЕНИЕ: Приветствуются альтернативы Conversion API.

2-е ОБНОВЛЕНИЕ Conversion API выводится из эксплуатации, поэтому сейчас это не вариант.

3-е ОБНОВЛЕНИЕ Могут ли здесь помочь API Pileline или MapReduce?

12
задан Janusz Skonieczny 2 May 2015 в 14:19
поделиться