KEMBAR78
Python&Printer / Андрей Пучко / penta.by
Python & Printer
Вывод на печать из программ на Python
Андрей Пучко
www.penta.by
penta@penta.by
http:/www.penta.by/downloads/pythonprint.pdf
Печать?
PDF
XLS DOCODT
ODS
DOCX
TXT
HTML RTF
TXT
HTML
RTF
TeX
DOCX
XLSX
ODT
ODS
TXT
(XML)
Шаблон
Конвертер
Документ
Portable Document Format
межплатформенный формат
электронных документов,
разработанный фирмой Adobe Systems
(1993) с использованием ряда
возможностей языка PostScript.
PDF
ReportLab
downloaded by at least 50,000
developers per month
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase import ttfonts
MyFontObject = ttfonts.TTFont('Arial', ‘arial.ttf’)
pdfmetrics.registerFont(MyFontObject)
MyCanvas = canvas.Canvas(“hello.pdf”)
MyCanvas .setFont(“Arial”, 40)
MyCanvas .drawString(200,400,“Привет Мир”)
MyCanvas .save()
from reportlab.lib.enums import TA_JUSTIFY
from reportlab.lib.pagesizes import letter, landscape
from reportlab.lib.enums import TA_JUSTIFY
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer,
Image
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
doc = SimpleDocTemplate("form_letter.pdf",pagesize=landscape(letter),
rightMargin=72,leftMargin=72,
topMargin=72,bottomMargin=18)
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY))
Story=[]
logo = "image.png"
# We really want to scale the image to fit in a box and keep proportions.
im = Image(logo, 3*inch, 3*inch)
Story.append(im)
ptext = '''
<seq>. </seq>Some Text<br/>
<seq>. </seq>Some more test Text
'''
Story.append(Paragraph(ptext, styles["Bullet"]))
ptext='<bullet>&bull;</bullet>Some Text'
Story.append(Paragraph(ptext, styles["Bullet"]))
doc.build(Story)
Platypus
Page
Layout and
Typography
Using
Scripts
RML
Report Markup
Language
is an XML-style language for
describing the layout of
documents.
$$$$$$$$$
ReportLab PLUS
PyQt
PySide
printer = QPrinter(QPrinter.HighResolution)
printer.setOutputFileName('test.pdf')
printer.setPaperSize(QPrinter.A4)
printer.setOrientation(QPrinter.Landscape)
painter = QPainter(printer)
rect = QRect(100, 100, printer.width() - 200, 200)
painter.fillRect(rect, Qt.red)
painter.drawText(rect, Qt.AlignCenter, "Draw on QPainter!")
painter.end()
printer = QPrinter()
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName(filename)
painter=QPainter()
painter.begin(printer)
document.QTextDocument()
document.setHtml(“Hello, world”)
document.drawContents(painter,QRectF(1,1,0,10))
painter.end()
QTextDocument
plaintext Plain text
HTML HyperText Markup Language
ODF OpenDocument Format
QTextDocumentWriter
Since the capabilities of the supported
output formats vary considerably, the
writer simply outputs the appropriate
subset of objects for each format. This
typically includes the formatted text and
images contained in a document.
OpenDocument
pod (python open document)
odoo
odfpy 0.9.6
python-docx
RTF
Rich Text Format
межплатформенный формат хранения
размеченных текстовых документов,
предложенный группами программистов,
основавшими компании Microsoft и Adobe
(1982)
{rtf1
Привет!
par
{i Это} некий
отформатированный {b текст}.par
End
}
Привет!
Это некий отформатированный текст.
End
PyRTF 0.45
:(
Excel
(XLS)
xlrd
xlwt
import xlwt
from datetime import datetime
font0 = xlwt.Font()
font0.name = 'Times New Roman'
font0.colour_index = 2
font0.bold = True
style0 = xlwt.XFStyle()
style0.font = font0
style1 = xlwt.XFStyle()
style1.num_format_str = 'D-MMM-YY'
wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')
ws.write(0, 0, 'Test', style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))
wb.save('example.xls')
ODS
HTML
XML
PDF
pisa
Easy integration into
Python frameworks like
CherryPy, KID
Templating, TurboGears,
Django, Zope, Plone,
Google AppEngine
● jXLS
● OpenReport
● OpenReports
● Pentaho
● POI
● BIRT
● DataVision
● Jacob
● JasperReports
● Jedox
● JFreeReport
WTF?
1993
Отчеты для Python
WYSIWYG редактор и мультиформатный
генератор PentaReport
Андрей Пучко
penta@penta.by
www.penta.by
Редактор
Секции отчета и их роли
секция без привязки к источнику данных
PageHeader - колонтитул верхний
PageFooter - колонтитул нижний
Detail - секция, привязанная к источнику
данных
TableHeader - заголовок таблицы
TableTotal - итог таблицы
GroupHeader - заголовок группировки
GroupTotal - итог группировки
Ширина колонок
● 1.5 - фиксированный размер
● 40% - от оставшегося свободного пространства
● пусто - свободное пространство распределяется
поровну между такими колонками
Высота строк
● фиксированное значение
● по содержимому строки
● по содержимому строки, но не
менее
● не более
Объединение ячеек
Панель атрибутов
Наследование атрибутов:
отчет-секция-ячейка
Например - изменение
шрифта отчета
применяется ко всем
ячейкам (кроме
измененных)
Строка редактирования ячейки
Редактирование содержимого
ячейки в построителе выражений
Использование разметки HTML и
вызов функций Python
Программый
модуль отчета
Источники данных
Панель команд для интерактивной
отладки
Встроенный просмотрщик
Ограничения для XLS
Автоматическое
разбиение на
листы, если
колонки в
секциях имеют
разные размеры
Формат хранения макета - XML
Запуск отчета
Программное формирование
отчета
Видео процесса создания отчета
http://penta.by/?p=139

Python&Printer / Андрей Пучко / penta.by