-
Доброе утро
Есть задача сгенерировать pdf отчёт,
в документации Django есть статья:
https://docs.djangoproject.com/en/dev/howto/outputting-pdf/
также есть документация самой reportlab (в довольно неудобном формате):
http://www.reportlab.com/docs/reportlab-userguide.pdf
Есть два варианта генерации документа (конкретно в моём случае есть цикл по пользователям, по каждому пользователю генерирует три страницы отчёта (одна из них альбомная)): через canvas и используя PLATYPUS, описанный в 5 главе (60 страница) гайда. Раньше я использовал canvas и всё работало, но теперь мне потребовалось вставить сложную таблицу с неизвестным заранее числом строчек. Чтобы не усложнять жизнь подсчетом координат блока я решил изучить PLATYPUS и использовать его, но как-то у меня не очень получается разобраться с этим, прошу помочь.
как было
я использовал канвас, что я сделал:from reportlab.lib.pagesizes import letter
...
MyFontObject = ttfonts.TTFont('myfont', 'timcyr.ttf')
pdfmetrics.registerFont(MyFontObject)
buffer = StringIO()
c = canvas.Canvas(buffer)
пока есть пользователи:
пока не напечатели нужное количество копий:
lWidth, lHeight = letter
c.setPageSize((lHeight, lWidth))
textobject = c.beginText()
textobject.setTextOrigin(inch, 7.5*inch)
textobject.setFont("myfont", 12)
textobject.setFillGray(0.4)
template1 = u'''
шаблон %s template %s
'''
textobject.textLines(template1 % (var1, var2, ...))
c.drawText(textobject)
c.showPage()
...
тут аналогично 2 и 3 шаблон используются нужное количество раз
c.save()
- указал шрифт (без него получаются квадратики вместо русских букв)
- указал ориентацию страницы как альбомная (для данной конкретной страницы)
- создал текстовый объект и указал настройки шрифта
- нарисовал его
- завершил страницу (следующая drawText() начнёт рисовать уже с новой страницы)
теперь я пытаюсь переделать всё это с использованием PLATYPUS и у меня возникают такие непонятные вопросы:
1. почему снова квадратики (шрифт не подцепился)
2. как задать ориентацию страницы ( у меня три шаблона, для печати копий документов с использованием одного из них мне необходимо выводить страницу в альбомном формате, для двух других в книжном)
3. как перевернуть страничку
Спасибо! -
Ну или, возможно, кто-то сможет подсказать, как сделать вот такой документ в формате docx или pdf? может быть не через reportlab, а через что-то более простое (можно даже не на python, хотя лучше на нём чтобы проще интегрировать с джангой)
это 1 из трёх шаблонов, первая табличка имеет несколько объединенных ячеек, вторая табличка имеет неопределенное количество строчек
-
А html не подходит почему?
-
igorekk, действительно. Уж html можно открыть хоть вордом, хоть браузером (хотя, первого у кого то может и не быть).
Александр, может проще сначала генерировать html, а уж потом его конвертировать в pdf? -
Несколько раз в жизни приходилось генерировать подобные отчеты и счета, всегда решал это созданием шаблона LaTeX и использованием pdflatex. Это может быть не самое изящное решение (много дополнительных зависимостей), зато здорово экономит время и результат получается красивый.
-
Мне тоже кажется лучше, чтобы вначале был HTML. А то сегодня на выходе нужен PDF, а завтра DOCX...
Вот может пригодится - конвертер репортлабовского RML в PDF (используя его как джанго шаблон): http://code.google.com/p/template2pdf/
На мой взгляд удобнее чем с канвасом работать, хотя синтаксис самого RML тоже не ахти. -
Некоторые отчеты есть в русской версии OpenERP
Там кое что надо будет вырезать и добавить чтобы заработало в джанго. -
Спасибо за ваши ответы!
> А html не подходит почему?
> igorekk, действительно. Уж html можно открыть хоть вордом, хоть браузером (хотя, первого у кого то может и не быть).
Это не очень правильно, конечно, но заказчик хотел вручную (не через систему) редактировать часть отчётов... Желательно через Word/Excel или LibreOffice. (Но не через TinyMCE и другие WYSIWYG-редакторы в браузерах, уж не знаю, почему так..)
PDF можно редактировать через LibreOffice, и вроде это самый распространённый формат для отчётов, поэтому выбрал его... Хотя это не принципиально, можно и html.. А идеальный вариант это, наверное, .docx
html не выбрал потому что нормально Word откроет его только если этот html сохранялся через ворд (с кучей всякого мусора в html), я бы так и сделал, но в моём случае мне надо не просто подставить в шаблон данные и показать, а из трёх шаблонов (повторив их некоторое количество раз) скомбинировать 1 документ, то есть я побоялся проблем, связанных с объединением трёх сохраненных через word html-файлов
а если генерировать обычный html без вордовского мусора то при открытии его в ворде может как-то поехать верстка (там у заказчика тем более 2007 офис, а не 2010, не было возможности и времени особо тестировать это поднимая виртуалку, а у меня в распоряжении есть только маковский 2011)
идею генерировать docx также отложил потому что не нашел примеров генерации сложных табличек...
ещё есть требование - при печати каждый отчёт должен быть на отдельной странице, в css есть такое свойство, но у меня как-то не получилось с наскока, вообщем, в итоге я ещё раз внимательно прочитал руководство и сделал через REPORTLAB pdf, но в будущем ещё подумаю на эту тему...
генерировать html и потом конвертировать в другие форматы я думаю самая интересная идея, надо будет оценить качество подобного конвертирования, наверное, это наиболее удобный способ...
ещё раз спасибо за ответы и ссылки, мне стоит изучить это более детально.. -
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.





