Как передать несколько StringIO в python-pdfkit?

Цель: - Использовать язык шаблонов django. - Рендеринг шаблона в памяти (диск не пишет). - Отправьте визуализированный контент в экземпляр StringIO. - Использовать экземпляр в python-pdfkit.

Проблема: я продолжаю получать TypeError: coercing to Unicode: need string or buffer, instance found при попытке передать более одного файла в списке.

Приведенный ниже код работает без [] и только с одним экземпляром StringIO.

из загрузчика импорта django.template, контекст из шаблона импорта django, импорт StringIO

STATIC_URL = "https://d1i1yohwujljp9.cloudfront.net/static/"
t = loader.get_template('pdf_coverpage.html')
c = template.Context( {'STATIC_URL': STATIC_URL })
output = StringIO.StringIO()
output.write(t.render(c))
output1 = StringIO.StringIO()
output1.write(t.render(c))

pdfkit.from_file([ output, output1 ] , 'out.pdf' )

Проследить.

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python27\lib\site-packages\pdfkit\api.py", line 44, in from_file
    configuration=configuration)
  File "C:\Python27\lib\site-packages\pdfkit\pdfkit.py", line 37, in __init__
    self.source = Source(url_or_file, type_)
  File "C:\Python27\lib\site-packages\pdfkit\source.py", line 12, in __init__
    self.checkFiles()
  File "C:\Python27\lib\site-packages\pdfkit\source.py", line 28, in checkFiles
    if not os.path.exists(path):
  File "C:\Python27\lib\genericpath.py", line 18, in exists
    os.stat(path)
TypeError: coercing to Unicode: need string or buffer, instance found

person cph    schedule 12.03.2015    source источник
comment
У вас есть полная трассировка стека   -  person Saikiran Yerram    schedule 12.03.2015
comment
@SaikiranYerram Добавлена ​​трассировка.   -  person cph    schedule 12.03.2015


Ответы (2)


Это не твоя вина. Это происходит из-за того, что набор PDF предполагает, что каждый элемент в списке является путем к файлу, а не дескриптором файла.

вот соответствующий код.

У меня была аналогичная ситуация с распространением HTML по нескольким шаблонам. Я помещаю их все в одну строку и передаю StringIO в pdfkit. Я использовал CSS для управления разрывами страниц и другими параметрами форматирования wkhtmltopdf.

Надеюсь, это поможет.

person Saikiran Yerram    schedule 12.03.2015
comment
Спасибо за ответ! Просто собирался опубликовать это изменение кода. - person cph; 12.03.2015

Использование StringIO не является рекомендуемым подходом в документации.

Я только что попробовал это, и это сработало нормально. Есть ли причина, по которой вы не хотите делать это таким образом?

pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')

https://pypi.python.org/pypi/pdfkit

person Charlie    schedule 12.03.2015
comment
У меня есть рабочие процессы, которые просто проходят через очередь Redis и не хотят накладных расходов на обработку наших LIVE-сервисов дополнительными тысячами запросов. - person cph; 12.03.2015