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

56
Python & Printer Вывод на печать из программ на Python Андрей Пучко www.penta.by [email protected] http:/www.penta.by/downloads/pythonprint.pdf

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

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

Python & Printer

Вывод на печать из программ на Python

Андрей Пучкоwww.penta.by

[email protected]

http:/www.penta.by/downloads/pythonprint.pdf

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

Печать?

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

PDF

XLS DOCODT

ODS

DOCX

TXT

HTML RTF

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

TXT HTMLRTFTeXDOCXXLSXODTODS

TXT (XML) Шаблон

Конвертер

Документ

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

Portable Document Formatмежплатформенный формат электронных документов, разработанный фирмой Adobe Systems (1993) с использованием ряда возможностей языка PostScript.

PDF

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

ReportLab downloaded by at least 50,000 developers per month

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

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()

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

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

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

RMLReport Markup Language

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

$$$$$$$$$

ReportLab PLUS

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

PyQtPySide

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

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()

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

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

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

plaintext Plain text

HTML HyperText Markup Language

ODF OpenDocument Format

QTextDocumentWriter

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

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.

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

OpenDocument

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

pod (python open document)

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

odoo

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

odfpy 0.9.6

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

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

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

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

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

PyRTF 0.45

:(

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

Excel (XLS)

xlrd xlwt

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

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')

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

ODS

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

HTMLXML PDF

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

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

Page 31: Python&Printer / Андрей Пучко / penta.by
Page 32: Python&Printer / Андрей Пучко / penta.by
Page 34: Python&Printer / Андрей Пучко / penta.by

WTF?

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

1993

Page 37: Python&Printer / Андрей Пучко / penta.by
Page 38: Python&Printer / Андрей Пучко / penta.by
Page 39: Python&Printer / Андрей Пучко / penta.by

Отчеты для Python

WYSIWYG редактор и мультиформатный генератор PentaReport

Андрей Пучко[email protected]

www.penta.by

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

Редактор

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

Секции отчета и их роли

секция без привязки к источнику данныхPageHeader - колонтитул верхний PageFooter - колонтитул нижнийDetail - секция, привязанная к источнику данныхTableHeader - заголовок таблицыTableTotal - итог таблицыGroupHeader - заголовок группировкиGroupTotal - итог группировки

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

Ширина колонок

● 1.5 - фиксированный размер● 40% - от оставшегося свободного пространства● пусто - свободное пространство распределяется

поровну между такими колонками

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

Высота строк

● фиксированное значение● по содержимому строки● по содержимому строки, но не

менее● не более

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

Объединение ячеек

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

Панель атрибутов

Наследование атрибутов:отчет-секция-ячейка

Например - изменение шрифта отчета применяется ко всем ячейкам (кроме измененных)

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

Строка редактирования ячейки

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

Редактирование содержимого ячейки в построителе выражений

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

Использование разметки HTML и вызов функций Python

Программый модуль отчета

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

Источники данных

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

Панель команд для интерактивной отладки

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

Встроенный просмотрщик

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

Ограничения для XLS

Автоматическое разбиение на листы, если колонки в секциях имеют разные размеры

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

Формат хранения макета - XML

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

Запуск отчета

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

Программное формирование отчета

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

Видео процесса создания отчета

http://penta.by/?p=139