Первое что попалось на глаза оказался ReportLab (http://www.reportlab.com)
Вернее попался он на глаза в книге - Гифт, Джонс "Питон в системном администрировании" . Установка библиотеки прошла без проблем в одну команду - sudo apt-get install reportlab (вот за это люблю я пакетные менеджеры). И начались эксперименты. Оказалось что если рисовать на канве то расположение элементов и переходы на другую страницу нужно выставлять самостоятельно. После вдумчивого чтения документации и гугления стало понятно, что если лень делать самому то нужно использовать подсистему ReportLab'а - platypus. Так же обнаружилось, что ReportLab по умолчанию ставит себе Type 1 шрифты без русского языка.
Решений данной проблемы как всегда несколько:
- Заменть шрифты на шрифты с русским набором символов
- Сделать симлинки в каталоге ReportLab'а на нужные Type 1 шрифты
- Загрузить TryeType шрифты.
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
from reportlab.platypus import Paragraph,SimpleDocTemplate
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
import reportlab.rl_config
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
class CreateRep:
def __init__(self):
# пути к фонтам и регистрация фонта
reportlab.rl_config.TTFSearchPath='/usr/share/fonts/truetype/freefont'
pdfmetrics.registerFont(TTFont('FreeSans', '/usr/share/fonts/truetype/freefont/FreeSans.ttf'))
reportlab.rl_config.TTFSearchPath='/usr/share/fonts/truetype/ttf-dejavu'
pdfmetrics.registerFont(TTFont('DejaVu Serif','/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf'))
story=[] # словарь документа
styles = getSampleStyleSheet() # дефолтовые стили
#-*- coding: UTF-8 -*-
from reportlab.platypus import Paragraph,SimpleDocTemplate
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
import reportlab.rl_config
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
class CreateRep:
def __init__(self):
# пути к фонтам и регистрация фонта
reportlab.rl_config.TTFSearchPath='/usr/share/fonts/truetype/freefont'
pdfmetrics.registerFont(TTFont('FreeSans', '/usr/share/fonts/truetype/freefont/FreeSans.ttf'))
reportlab.rl_config.TTFSearchPath='/usr/share/fonts/truetype/ttf-dejavu'
pdfmetrics.registerFont(TTFont('DejaVu Serif','/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf'))
story=[] # словарь документа
styles = getSampleStyleSheet() # дефолтовые стили
# создаем объект документа с размером страницы A4
doc=SimpleDocTemplate('test.pdf',pagesize = A4,title='Тест документа',author='CAV Inc')
story.append(Paragraph("The Platypus", styles['Heading1']))
story.append(Paragraph('<font name="FreeSans">ЭТО СПАРТА !!!</font>', styles['Normal']))
for i in xrange(500):
story.append(Paragraph("Line in %s " % str(i),styles["Normal"]))
story.append(Paragraph('<font name="DejaVu Serif">Line in %s линия </font>' % str(i),styles["Normal"]))
doc.build(story)
cr=CreateRep()
print "усе"
doc=SimpleDocTemplate('test.pdf',pagesize = A4,title='Тест документа',author='CAV Inc')
story.append(Paragraph("The Platypus", styles['Heading1']))
story.append(Paragraph('<font name="FreeSans">ЭТО СПАРТА !!!</font>', styles['Normal']))
for i in xrange(500):
story.append(Paragraph("Line in %s " % str(i),styles["Normal"]))
story.append(Paragraph('<font name="DejaVu Serif">Line in %s линия </font>' % str(i),styles["Normal"]))
doc.build(story)
cr=CreateRep()
print "усе"
Выбор нужного шрифта как видите реализован с помощью HTML тегов, но можно и через создания собственных стилей
Комментариев нет:
Отправить комментарий