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

Post on 12-Jul-2015

501 views 5 download

Transcript of 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 HTMLRTFTeXDOCXXLSXODTODS

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 pdfmetricsfrom 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_JUSTIFYfrom reportlab.lib.pagesizes import letter, landscape from reportlab.lib.enums import TA_JUSTIFYfrom reportlab.lib.pagesizes import letterfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Imagefrom reportlab.lib.styles import getSampleStyleSheet, ParagraphStylefrom 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)

PlatypusPage Layout and Typography Using Scripts

RMLReport Markup Language

is an XML-style language for describing the layout of documents.

$$$$$$$$$

ReportLab PLUS

PyQtPySide

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

{\rtf1 Привет! \par {\i Это} некий отформатированный {\b текст}.\par End}

Привет!Это некий отформатированный текст.End

PyRTF 0.45

:(

Excel (XLS)

xlrd xlwt

import xlwtfrom datetime import datetime

font0 = xlwt.Font()font0.name = 'Times New Roman'font0.colour_index = 2font0.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

HTMLXML PDF

pisaEasy integration into Python frameworks like CherryPy, KID Templating, TurboGears, Django, Zope, Plone, Google AppEngine

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