|
Table of contents
|
Формат PDF, разработанный компанией Adobe, используется для отображения печатных документов с полным попиксельным форматированием, встроенными шрифтами и двумерной векторной графикой. Вы можете рассматривать PDF документ в качестве электронного эквивалента напечатанного документа. В реальности, PDF документ довольно часто используется для передачи информации, которую затем требуется напечатать. Вы можете легко создавать PDF документы с помощью Python и Django благодаря отличной открытой библиотеке ReportLab. Преимущество динамического создания PDF документов заключается в том, что вы можете изменять его различными способами, например, разная информация для разных пользователей. Например, мы используем Django и ReportLab на сайте KUSports.com для генерации NCAA программ соревнований. Однако перед тем как сгенерировать PDF документ вам потребуется установить ReportLab. Это несложно: просто скачайте и установите библиотеку с http://www.reportlab.org/downloads.html. Руководство пользователя (доступное только в виде PDF) на http://www.reportlab.org/rsrc/userguide.pdf содержит дополнительные инструкции по установке.
ЗамечаниеПри использовании современного дистрибутива Linux, вы можете проверить наличие этой библиотеки в репозиториях операционной системы. Большинство репозиториев содержит данную библиотеку. Например, если вы используете (обалденный) дистрибутив Ubuntu, установка библиотеки крайне проста: apt-get install python-reportlab
Проверьте установку с помощью импортирования библиотеки в интерактивном интерпретаторе Python: >>> import reportlab
Если эта команда не вызывает никаких ошибок, значит установка библиотеки прошла успешно. Аналогично случаю с CSV, динамическое создание PDF объектов с помощью Django является несложным, по причине того, что API библиотеки ReportLab работает как файлоподобный объект. Ниже представлен пример «Hello World»: from reportlab.pdfgen import canvas
from django.http import HttpResponse
def hello_pdf(request):
# Создаём объект HttpResponse с соответствующим PDF заголовком.
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=hello.pdf'
# Создаём объект PDF, используя объект HttpResponse как файл.
p = canvas.Canvas(response)
# Выводим в PDF необходимую информацию. Вот так создаются PDF.
# Обратитесь к документации на ReportLab для подробностей.
p.drawString(100, 100, "Hello world.")
# Явно закрываем объект PDF.
p.showPage()
p.save()
return response
А теперь несколько замечаний:
Если вы создаёте сложный PDF документ (или любой большой объём данных), рассмотрите возможность использования библиотеки cStringIO в качестве временного хранилища для вашего PDF файла. Библиотека cStringIO предоставляет файлоподобный интерфейс, который написан на языке C для достижения максимальной эффективности. Перепишем предыдущий «Hello World» пример, используя библиотеку cStringIO: from cStringIO import StringIO
from reportlab.pdfgen import canvas
from django.http import HttpResponse
def hello_pdf(request):
# Создаём объект HttpResponse с соответствующим PDF заголовком.
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=hello.pdf'
temp = StringIO()
# Создаём объект PDF, используя объект StringIO как файл.
p = canvas.Canvas(temp)
# Выводим в PDF необходимую информацию. Здесь генерируется содержимое PDF.
# Обратитесь к документации на ReportLab для подробностей.
p.drawString(100, 100, "Hello world.")
# Явно закрываем объект PDF.
p.showPage()
p.save()
# Получаем данные из буфера StringIO и пишем отклик.
response.write(temp.getvalue())
return response
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |