Python reportlab教程

合集下载

reportlab使用示例:文字和图片

reportlab使用示例:文字和图片

reportlab使⽤⽰例:⽂字和图⽚Python的reportlab专门将数据使⽤⽣成PDF中的图形和⽂档功能,下载ReportLab⽣成⼀个简单的helloworldfrom reportlab.graphics.shapes import Drawing, Stringfrom reportlab.graphics import renderPDFd = Drawing(100, 100)s = String(50, 50, 'Hello, world!', textAnchor='middle')d.add(s)renderPDF.drawToFile(d, 'hello.pdf', 'A simple PDF file')三条折线from reportlab.lib import colorsfrom reportlab.graphics.shapes import *from reportlab.graphics import renderPDFdata = [# Year Month Predicted High Low(2007, 8, 113.2, 114.2, 112.2),(2007, 9, 112.8, 115.8, 109.8),(2007, 10, 111.0, 116.0, 106.0),(2007, 11, 109.8, 116.8, 102.8),(2007, 12, 107.3, 115.3, 99.3),(2008, 1, 105.2, 114.2, 96.2),(2008, 2, 104.1, 114.1, 94.1),(2008, 3, 99.9, 110.9, 88.9),(2008, 4, 94.8, 106.8, 82.8),(2008, 5, 91.2, 104.2, 78.2),]drawing = Drawing(200, 150)pred = [row[2]-40 for row in data]high = [row[3]-40 for row in data]low = [row[4]-40 for row in data]times = [200*((row[0] + row[1]/12.0) - 2007)-110 for row in data]drawing.add(PolyLine(zip(times, pred), strokeColor=colors.blue))drawing.add(PolyLine(zip(times, high), strokeColor=colors.red))drawing.add(PolyLine(zip(times, low), strokeColor=colors.green))drawing.add(String(65, 115, 'Sunspots', fontSize=18, fillColor=colors.red))renderPDF.drawToFile(drawing, 'report1.pdf', 'Sunspots')最终的sunspotfrom urllib import urlopenfrom reportlab.graphics.shapes import *from reportlab.graphics.charts.lineplots import LinePlotfrom reportlab.graphics.charts.textlabels import Labelfrom reportlab.graphics import renderPDFURL = '/ftpdir/weekly/Predict.txt'COMMENT_CHARS = '#:'drawing = Drawing(400, 200)data = []for line in urlopen(URL).readlines():if not line.isspace() and not line[0] in COMMENT_CHARS:data.append([float(n) for n in line.split()])pred = [row[2] for row in data]high = [row[3] for row in data]low = [row[4] for row in data]times = [row[0] + row[1]/12.0 for row in data]lp = LinePlot()lp.x = 50lp.y = 50lp.height = 125lp.width = 300lp.data = [zip(times, pred), zip(times, high), zip(times, low)] lp.lines[0].strokeColor = colors.bluelp.lines[1].strokeColor = colors.redlp.lines[2].strokeColor = colors.greendrawing.add(lp)drawing.add(String(250, 150, 'Sunspots',fontSize=14, fillColor=colors.red)) renderPDF.drawToFile(drawing, 'report2.pdf', 'Sunspots')。

pythonreportlab生成table

pythonreportlab生成table

pythonreportlab⽣成table'''Table(data, colWidths=None, rowHeights=None, style=None, splitByRow=1,repeatRows=0, repeatCols=0, rowSplitRange=None, spaceBefore=None,spaceAfter=None)''''''Table and TablestyleTableStyle user Methods1.TableStyle(commandSequence)The creation method initializes the TableStyle with the argument command sequenceeg:LIST_STYLE = TableStyle([('LINEABOVE', (0,0), (-1,0), 2, colors.green),('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black),('LINEBELOW', (0,-1), (-1,-1), 2, colors.green),('ALIGN', (1,1), (-1,-1), 'RIGHT')]2. TableStyle.add(commandSequence)This method allows you to add commands to an existing TableStyle, i.e. you can build upTableStyles in multiple statements.eg:LIST_STYLE.add('BACKGROUND', (0,0), (-1,0), colors.Color(0,0.7,0.7))3.TableStyle.getCommands()This method returns the sequence of commands of the instance.cmds = LIST_STYLE.getCommands()4.TableStyle CommandsTableStyle Cell Formatting CommandsFONT - takes fontname, optional fontsize and optional leading.FONTNAME (or FACE) - takes fontname.FONTSIZE (or SIZE)- takes fontsize in points; leading may get out of sync.LEADING- takes leading in points.TEXTCOLOR- takes a color name or (R,G,B) tuple.ALIGNMENT (or ALIGN)- takes one of LEFT, RIGHT and CENTRE (or CENTER) or DECIMAL.LEFTPADDING- takes an integer, defaults to 6.RIGHTPADDING- takes an integer, defaults to 6.BOTTOMPADDING- takes an integer, defaults to 3.TOPPADDING- takes an integer, defaults to 3.BACKGROUND- takes a color defined by an object, string name or numeric tuple/list,or takes a list/tuple describing a desired gradient fill which shouldcontain three elements of the form [DIRECTION, startColor, endColor]where DIRECTION is either VERTICAL or HORIZONTAL.ROWBACKGROUNDS- takes a list of colors to be used cyclically.COLBACKGROUNDS- takes a list of colors to be used cyclically.VALIGN- takes one of TOP, MIDDLE or the default BOTTOMTableStyle Line CommandsLine commands begin with the identifier, the start and stop cell coordinates and always follow this with the thickness(in points) and color of the desired lines. Colors can be names, or they can be specified as a (R, G, B) tuple, whereR, G and B are floats and (0, 0, 0) is black. The line command names are: GRID, BOX, OUT- LINE, INNERGRID, LINEBELOW,LINEABOVE, LINEBEFORE and LINEAFTER. BOX and OUTLINE are equivalent, and GRID is the equivalent of applying both BOX and INNERGRID.#TableStyle Span CommandsOur Table classes support the concept of spanning, but it isn't specified in the same way as html. The stylespecificationSPAN, (sc,sr), (ec,er)indicates that the cells in columns sc - ec and rows sr - er should be combined into a super cell with con- tentsdetermined by the cell (sc, sr). The other cells should be present, but should contain empty strings or you mayget unexpected results.'''# examplefrom reportlab.lib.units import inchfrom reportlab.pdfgen.canvas import Canvasfrom reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.cidfonts import UnicodeCIDFontpdfmetrics.registerFont(UnicodeCIDFont('STSong-Light'))from reportlab.pdfbase.ttfonts import TTFontpdfmetrics.registerFont(TTFont('hei', 'SIMHEI.TTF'))from reportlab.lib.styles import getSampleStyleSheetfrom reportlab.lib import colorsfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle import timeelements = []# TableStyle Commands# BACKGROUND, and TEXTCOLOR commandsdata = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]t = Table(data,colWidths=[100, 100,100,100,100])t.setStyle(TableStyle([('BACKGROUND', (1, 1), (-2, -2), colors.green),('TEXTCOLOR', (0, 0), (1, -1), colors.red)]))elements.append(t)data = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]t = Table(data,colWidths=[100, 100,100,100,100],style=[('GRID', (1, 1), (-2, -2), 1, colors.green),('BOX', (0, 0), (1, -1), 2, colors.red),('LINEABOVE', (1, 2), (-2, 2), 1, colors.blue),('LINEBEFORE', (2, 1), (2, -2), 1, colors.pink),])elements.append(t)data = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]t = Table(data, 5 * [0.4 * inch], 4 * [0.4 * inch])t.setStyle(TableStyle([('ALIGN', (1, 1), (-2, -2), 'RIGHT'),('TEXTCOLOR', (1, 1), (-2, -2), colors.red),('VALIGN', (0, 0), (0, -1), 'TOP'),('TEXTCOLOR', (0, 0), (0, -1), colors.blue),('ALIGN', (0, -1), (-1, -1), 'CENTER'),('VALIGN', (0, -1), (-1, -1), 'MIDDLE'),('TEXTCOLOR', (0, -1), (-1, -1), colors.green),('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),('BOX', (0, 0), (-1, -1), 0.25, colors.black),]))elements.append(t)# print(elements)# TableStyle Line Commandsdata = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]t = Table(data, style=[('GRID', (1, 1), (-2, -2), 1, colors.green),('BOX', (0, 0), (1, -1), 2, colors.red),('LINEABOVE', (1, 2), (-2, 2), 1, colors.blue),('LINEBEFORE', (2, 1), (2, -2), 1, colors.pink),])elements.append(t)data = [['00', '01', '闪电', '03', '04'],data = [['00', '01', '闪电', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]t = Table(data, style=[('FONTNAME', (0, 0), (-1, -1), 'hei'),('GRID', (0, 0), (-1, -1), 0.5, colors.grey),('GRID', (1, 1), (-2, -2), 1, colors.green),('BOX', (0, 0), (1, -1), 2, colors.red),('BOX', (0, 0), (-1, -1), 2, colors.black),('LINEABOVE', (1, 2), (-2, 2), 1, colors.blue),('LINEBEFORE', (2, 1), (2, -2), 1, colors.pink),('BACKGROUND', (0, 0), (0, 1), colors.pink),('BACKGROUND', (1, 1), (1, 2), vender), ('BACKGROUND', (2, 2), (2, 3), colors.orange), ])elements.append(t)# TableStyle Span Commandsdata = [['Top\nLeft', '', '02', '03', '04'],['', '', '12', '13', '14'],['20', '21', '22', 'Bottom\nRight', ''],['30', '31', '32', '', '']]T = Table(data, style=[('GRID', (0, 0), (-1, -1), 0.5, colors.grey),('BACKGROUND', (0, 0), (1, 1), colors.palegreen), ('SPAN', (0, 0), (1, 1)),('BACKGROUND', (-2, -2), (-1, -1), colors.pink), ('SPAN', (-2, -2), (-1, -1)),])print(elements)doc = SimpleDocTemplate('demo5.pdf')doc.build(elements)。

Python技术的数据报表生成方法

Python技术的数据报表生成方法

Python技术的数据报表生成方法数据报表在各种行业和领域中起着至关重要的作用,帮助人们更好地理解和分析数据。

Python作为一种强大的编程语言,提供了多种方法来生成数据报表。

本文将介绍一些常用的Python技术,用于生成各种类型的数据报表。

一、使用matplotlib库生成数据可视化报表matplotlib是Python中广泛使用的数据可视化库,它提供了多种绘图函数和工具,可以方便地生成各种图表类型。

为了生成数据报表,我们可以使用matplotlib来展示数据的趋势、分布以及相关关系。

例如,我们可以使用折线图来展示时间序列数据的变化趋势,使用柱状图来比较不同类别数据的差异,使用散点图来显示数据之间的相关关系等等。

通过调整matplotlib库中的参数和样式,我们可以自定义报表的外观,使其更符合需求。

二、使用pandas库生成数据分析报表pandas是Python中常用的数据处理和分析库,它提供了强大的数据结构和功能,可以帮助我们高效地处理和分析数据。

除了数据处理之外,pandas还可以用来生成各种类型的数据报表。

通过pandas库,我们可以将数据转换成表格形式,并对表格进行操作和筛选。

同时,pandas还提供了数据分组、聚合、透视等功能,可以帮助我们更好地理解数据并生成更有洞察力的报表。

三、使用reportlab库生成PDF报表reportlab是一个用于生成PDF文档的Python库,它提供了丰富的功能和组件,可以用于生成各种类型的报表。

我们可以通过reportlab库创建自定义的报表模板,并将数据填充到模板中,最后输出为PDF格式的报表文件。

通过reportlab库,我们可以控制报表的布局、样式和内容,添加各种图表、表格和文字,使报表更具可读性和美观性。

同时,reportlab还提供了丰富的字体和颜色选择,可以帮助我们进行更好的报表设计。

四、使用openpyxl库生成Excel报表openpyxl是一个用于读写Excel文件的Python库,我们可以利用它来生成Excel格式的数据报表。

python使用reportlab画图示例(含中文汉字)

python使用reportlab画图示例(含中文汉字)

python使⽤reportlab画图⽰例(含中⽂汉字)开发环境:python2.6,reportlab准备中⽂字体⽂件:simsun.ttc代码:复制代码代码如下:#!/usr/bin/env python2.6#coding:utf-8import tracebackfrom reportlab.graphics.shapes import Drawingfrom reportlab.graphics.charts.lineplots import LinePlotfrom reportlab.graphics.charts.textlabels import Labelfrom reportlab.graphics import renderPDFfrom reportlab.graphics.widgets.markers import makeMarkerfrom reportlab.pdfbase import pdfmetrics, ttfonts#注意data的类型,#每⼀个数据点是⼀个元组#⼀条曲线对应⼀个存储数据点元组的元组#⼀个图形可以包含多条曲线,⽤列表存储曲线元组data=[((1,100),(2,200),(3,300),(4,400),(5,500)),((1,50),(2,80),(3,400),(4,40),(5,70))]drawing = Drawing(500, 300)lp = LinePlot()lp.x = 50 #坐标轴中⼼坐标lp.y = 30lp.height = 250lp.width = 400lp.data = datalp.joinedLines = 1lp.lines.symbol = makeMarker('FilledCircle')lp.xValueAxis.valueMin = 1lp.xValueAxis.valueMax = 5lp.xValueAxis.valueStep = 1lp.yValueAxis.valueMin = 0lp.yValueAxis.valueMax = 500lp.yValueAxis.valueStep = 100drawing.add(lp)title = Label()#若需要显⽰中⽂,需要先注册⼀个中⽂字体pdfmetrics.registerFont(ttfonts.TTFont("haha", "simsun.ttc"))title.fontName = "haha"title.fontSize = 12title_text = unicode('你好','gbk')#title_text = "abc"title._text = title_texttitle.x = 250title.y = 280title.textAnchor ='middle'drawing.add(title)Xlabel = Label()Xlabel._text = 'x'Xlabel.fontSize = 12Xlabel.x = 480Xlabel.y = 30Xlabel.textAnchor ='middle'drawing.add(Xlabel)Ylabel = Label()Ylabel._text = "y"Ylabel.fontSize = 12Ylabel.x = 40Ylabel.y = 295Ylabel.textAnchor ='middle'drawing.add(Ylabel)try:drawing.save(formats=['gif'],outDir=".",fnRoot="abc") except:traceback.print_exc()。

reportlab 行高自适应参数

reportlab 行高自适应参数

reportlab 行高自适应参数reportlab是一个用于生成PDF文档的Python库,它提供了丰富的功能和灵活的参数设置,可以满足各种需求。

其中,行高自适应是一个非常实用的参数,可以让文本在不同的行高下自动调整,以适应不同的排版需求。

行高自适应参数的作用是根据文本内容和行高设置,自动调整文本的行高,使得文本在不同的行高下显示效果更加美观和舒适。

在使用reportlab生成PDF文档时,我们可以通过设置行高自适应参数来优化文本的排版效果。

在实际应用中,行高自适应参数可以用于各种场景。

比如,在生成报告或文章时,我们经常会遇到标题和正文的排版问题。

有时候,标题的内容可能比较长,需要占用多行才能完整显示,而正文的内容可能比较短,只需要占用一行或几行。

这时,如果使用固定的行高设置,就会导致标题和正文的排版效果不够美观,可能会出现内容溢出或留白的情况。

而使用行高自适应参数,就可以根据实际内容的长度,自动调整行高,使得标题和正文的排版更加合理和美观。

行高自适应参数的设置非常简单。

在使用reportlab生成PDF文档时,我们可以通过设置ParagraphStyle的属性来实现行高自适应。

具体来说,可以使用ParagraphStyle的leading属性来设置行高。

leading属性表示行间距,它的值可以是一个正整数,表示行高的倍数。

当设置leading为1时,表示行高等于字体的高度;当设置leading为2时,表示行高为字体高度的两倍,以此类推。

通过设置leading属性,我们就可以实现行高的自适应。

除了leading属性,ParagraphStyle还提供了其他一些属性,可以进一步优化文本的排版效果。

比如,我们可以设置alignment属性来调整文本的对齐方式,可以设置leftIndent和rightIndent属性来调整文本的缩进,可以设置firstLineIndent属性来调整首行缩进等。

通过灵活使用这些属性,我们可以实现更加精细化的排版效果。

reportlab setfont参数

reportlab setfont参数

reportlab setfont参数reportlab 是一个强大的 Python PDF 库,它允许你创建复杂的 PDF 文档,包括文本、图形、图像等。

在 reportlab 中,设置字体是一个常见的需求,因为你可能希望改变文本的外观以符合你的设计或品牌。

在 reportlab 中设置字体主要使用 setFont() 方法,它通常接受两个参数:字体名和字体大小。

但是,实际上,setFont() 方法可以接受更多的参数,这取决于你如何定义和使用字体。

字体名和字体大小:最基本的用法是指定字体名和字体大小。

例如:pythonfrom reportlab.pdfgen import canvasc = canvas.Canvas("hello.pdf")c.setFont("Helvetica", 12)c.drawString(100, 750, "Hello, World!")c.save()在这个例子中,我们使用了 Helvetica 字体,字体大小为 12。

2. 更多参数:然而,setFont() 方法实际上可以接受一个字体对象作为参数,这个字体对象可以包含更多的信息,如字体样式(粗体、斜体等)。

要创建这样的字体对象,你通常需要使用reportlab.pdfbase.ttfonts 模块中的类,如 TTFont。

例如,如果你有一个 TrueType 或 OpenType 字体文件,并希望将其嵌入到你的 PDF 中,你可以这样做:pythonfrom reportlab.pdfgen import canvasfrom reportlab.pdfbase import ttfonts# 注册字体pdfmetrics.registerFont(ttfonts.TTFont('MyFontName','path/to/your/font.ttf'))# 使用字体c = canvas.Canvas("hello.pdf")c.setFont("MyFontName", 12)c.drawString(100, 750, "Hello, World in My Custom Font!")c.save()注意,在这个例子中,我们首先使用 ttfonts.TTFont 创建了一个字体对象,并将其注册到一个内部字体表中。

reportlab basedoctemplate -回复

reportlab basedoctemplate -回复如何使用reportlab创建基于docx模板的文档。

一、介绍在现代办公和文档处理中,Microsoft Word是最常用的文档编辑软件之一。

为了生成可编辑的Word文档,我们可以使用Python的报表生成库reportlab。

本文将以使用reportlab创建基于docx模板的文档为主题,详细介绍一步一步的操作。

二、安装reportlab首先,我们需要在Python环境中安装reportlab库。

在命令行输入以下命令来安装reportlab库:pip install reportlab三、创建docx模板为了能够更好地使用reportlab创建基于docx模板的文档,我们需要先创建一个docx模板。

可以使用Microsoft Office套件中的Word软件,或者使用其他在线工具创建一个空的docx文档。

在模板中,我们可以定义一些占位符,以便在后续生成文档时填充相关信息。

例如,我们可以在模板中添加一个简历文档的标题:[简历文档标题]四、使用reportlab生成文档在创建好docx模板后,我们可以开始使用reportlab库来生成文档。

首先,我们导入reportlab库中的相关模块以及其他依赖项:pythonfrom reportlab.lib.pagesizes import letterfrom reportlab.platypus import SimpleDocTemplate, Paragraph from reportlab.lib.styles import getSampleStyleSheet接下来,我们定义一个生成文档的函数,用于创建并保存最终的docx文档:pythondef generate_document(template_path, output_path, data): doc = SimpleDocTemplate(output_path, pagesize=letter)styles = getSampleStyleSheet()content = []with open(template_path) as template_file:template_content = template_file.readlines()for line in template_content:for key in data:if key in line:line = line.replace(key, data[key])content.append(Paragraph(line, styles['Normal'])) doc.build(content)在这个函数中,我们使用了SimpleDocTemplate和Paragraph类来创建文档和段落。

python生成pdf测试报告

python生成pdf测试报告生成PDF测试报告是在Python中常见的需求之一。

有几种方法可以实现这个目标,我将从不同的角度介绍几种常用的方法。

1. 使用第三方库:Python有一些强大的第三方库可以用来生成PDF文件,比如ReportLab和PyPDF2。

ReportLab提供了丰富的功能来创建和定制PDF文档,而PyPDF2则更适合于对现有PDF文档进行操作。

你可以根据自己的需求选择其中之一。

以下是使用ReportLab库生成PDF测试报告的示例代码:python.from reportlab.lib.pagesizes import letter.from reportlab.pdfgen import canvas.def generate_pdf_report(report_data):# 创建一个PDF文档对象。

c = canvas.Canvas("test_report.pdf",pagesize=letter)。

# 设置字体和字号。

c.setFont("Helvetica", 12)。

# 写入内容。

c.drawString(100, 750, "测试报告")。

c.drawString(100, 700, "测试结果,")。

c.drawString(100, 650, report_data)。

# 保存PDF文档。

c.save()。

2. 使用模板引擎:另一种方法是使用Python的模板引擎来生成PDF测试报告。

常用的模板引擎有Jinja2和Mako。

你可以使用这些模板引擎来定义报告的结构和样式,并将测试结果数据传递给模板进行渲染。

然后,使用第三方库(比如pdfkit)将渲染后的HTML转换为PDF格式。

以下是使用Jinja2和pdfkit生成PDF测试报告的示例代码:python.from jinja2 import Environment, FileSystemLoader.import pdfkit.def generate_pdf_report(report_data):# 加载模板文件。

reportlab grid 参数

reportlab grid 参数reportlab是一个用于创建PDF文档的Python库。

其中的grid参数用于设置PDF文档中的网格布局。

本文将从不同角度介绍reportlab grid参数的使用。

一、grid参数的基本概念grid参数是reportlab库中一个常用的参数,用于在PDF文档中创建网格布局。

网格布局是一种常见的页面布局方式,可以将页面划分为多个等大小的方块,方便进行排版和定位。

二、grid参数的使用方法在reportlab中,grid参数主要用于确定PDF页面的布局方式。

可以通过设置grid参数的行数、列数、行高、列宽等属性,来实现不同的页面布局效果。

1. 设置行数和列数:通过设置grid参数的rows和cols属性,可以分别指定PDF页面的行数和列数。

例如,设置rows=3,cols=2,表示将页面划分为3行2列的网格布局。

2. 设置行高和列宽:通过设置grid参数的rowHeights和colWidths属性,可以分别指定PDF页面每行和每列的高度和宽度。

例如,设置rowHeights=[50, 100, 50],colWidths=[100, 200],表示第一行高度为50,第二行高度为100,第三行高度为50,第一列宽度为100,第二列宽度为200。

3. 设置网格边框:通过设置grid参数的leftPadding、rightPadding、topPadding和bottomPadding属性,可以分别指定PDF页面网格的左边距、右边距、上边距和下边距。

例如,设置leftPadding=20,rightPadding=20,topPadding=10,bottomPadding=10,表示网格的左边距为20,右边距为20,上边距为10,下边距为10。

4. 设置网格单元格的样式:可以通过设置grid参数的cellStyle属性,来为网格中的单元格设置样式。

例如,可以设置单元格的背景颜色、字体、字号等样式属性。

python与reportlab类库技术用例-pdf报表1

python与reportlab类库技术⽤例-pdf报表1 #coding=utf-8from reportlab.platypus import *from reportlab.lib.styles import *from reportlab.rl_config import *from reportlab.lib.units import *from reportlab.lib import pagesizes,colorsfrom reportlab.pdfbase import ttfonts,pdfmetricsimport copyFONT_PATH=('D:/python_workspace/python_pdf_demo/MSYH.TTF',)class ReportConfig:#字体初始化def init_stylesheet(self):warnOnMissingFontGlyphs = 0pdfmetrics.registerFont(ttfonts.TTFont('wenquan',FONT_PATH[0]))stylesheet= getSampleStyleSheet()return stylesheet#初始化普通内容字体样式def init_body_font(self,stylesheet):body_style=copy.deepcopy(stylesheet["BodyText"])body_style.fontName="wenquan"body_style.fontSzie=12return body_styledef getSplitStr(self,type):if(type==1):return "/n"else:return "<br/>"def getSplitParagraph(self,content,width=0,styles=None):if(width is None or width<=0):return Paragraph(content,styles)param=Paragraph(content,styles)res=Nonetry:res=param.breakLinesCJK(width)except:res=param.breakLines(width)lsttmp=[]for row in res.lines:lsttmp.append(row[1][0])#定义换⾏符splitstr=self.getSplitStr(2)tmpstr=splitstr.join(lsttmp)return Paragraph(tmpstr,styles)def firstPages(canvas,doc):TITLE=u"订单信息列表"canvas.saveState()canvas.setFont('wenquan',18)canvas.drawImage("logo.jpg",20,doc.pagesize[1]-35,33,30,[254,255, 254,255, 254,255])canvas.drawCentredString(doc.pagesize[0]/2-30,doc.pagesize[1]-30,TITLE)canvas.setFont('wenquan',8)canvas.drawString((doc.pagesize[0]/2)-20,20,u"第1页")canvas.restoreState()def laterPages(canvas,doc):TITLE=u"订单信息列表"canvas.saveState()canvas.setFont('wenquan',18)canvas.drawImage("logo.jpg",20,doc.pagesize[1]-35,33,30,[254,255, 254,255, 254,255])canvas.drawCentredString(doc.pagesize[0]/2-30,doc.pagesize[1]-30,TITLE)canvas.setFont('wenquan',8)canvas.drawString((doc.pagesize[0]/2)-20,20,u"第%d页" % (doc.page))canvas.restoreState()def init_table_data(config,widths,styles):import MySQLdbhosts='192.168.1.32'users='root'passwds='12345'dbs='sjpoto'charsets='utf8'conn=MySQLdb.connect(host=hosts,user=users,passwd=passwds,db=dbs,charset=charsets)cursor=conn.cursor()cursor.execute("SELECT PRD_ID,PRD_CODE,PRD_LOCALNAME,PRD_MARKET_PRICE,PRD_COLOR FROM BPRODUCT") lst=[]for row in cursor.fetchall():lines=[]i=0for field in row:if(field is not None):lines.append(config.getSplitParagraph(unicode(field),widths[i],styles))else:lines.append("")i=i+1lst.append(lines)cursor.close()conn.close()return lstdef init_content():doc=SimpleDocTemplate("demo5.pdf",pagesize=pagesizes.A4)#doc.rotation=180config=ReportConfig()elements=[]stylesheet=config.init_stylesheet()content_style=config.init_body_font(stylesheet)#p=config.getSplitParagraph(u"测试werqwerwe细3421341234234234⼼你",20,content_style)#elements.append(p)#将页⾯总宽度分成1000份,取其中1份pwidth=(doc.pagesize[0]-20)/1000#表格每列宽度,总共5列colwidths = (pwidth*50,pwidth*200,pwidth*400,pwidth*200,pwidth*150)table_data=init_table_data(config,colwidths,content_style)table1=Table(table_data,colwidths)table1.setStyle(TableStyle([('GRID',(0,0),(4,len(table_data)),0.25,colors.black)]))elements.append(table1)#强制分页#elements.append(PageBreak())#再添加⼀个tabledata2=[["aaaa","bbbbbbbbbbbb","cccccccccccccc","ddddddddddddd"],]colwidths = (pwidth*250,pwidth*250,pwidth*250,pwidth*250)table2=Table(data2,colwidths)table2.setStyle(TableStyle([('GRID',(0,0),(4,len(data2)),0.25,colors.black)]))elements.append(table2)#⽣称报表最终内容#doc.build(elements,onFirstPage=firstPages)doc.build(elements,onFirstPage=firstPages, onLaterPages=laterPages)if __name__=="__main__":init_content()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1:from reportlab.lib.pagesizes import letter 2:from reportlab.pdfgen import canvas 3:canvas = canvas.Canvas("form.pdf", pagesize=letter) 4:canvas.setLineWidth(.3) 5:canvas.setFont(’Helvetica’, 12) 6:canvas.drawString(30,750,’OFFICIAL COMMUNIQUE’) 7:canvas.drawString(30,735,’OF ACME INDUSTRIES’) 8:canvas.drawString(500,750,"12/12/2010") 9:canvas.line(480,747,580,747) 10:canvas.drawString(275,725,’AMOUNT OWED:’) 11:canvas.drawString(500,725,"$1,000.00") 12:canvas.line(378,723,580,723) 13:canvas.drawString(30,703,’RECEIVED BY:’) 14:canvas.line(120,700,580,700) 15:canvas.drawString(120,703,"JOHN DOE") 16:canvas.save() ù ‡ ´ ‡ { ü â ü ~ f § † ƒ cHello world~ f Ø Ó ƒ ? 3 ucanvas.line(), \ Œ ± Ï L • ½ é X,Y5 3canvasþ x ‚ " X J Œ ± § „ Œ ± ^ § 5 ± › L ‚ § w , ù ' „ ¡ " Ù ¦ ¼ ê ' XsetLineWidth(.3), ù ‡ • - ^u w Šreportlab± õ o ) 5 ± › ‚ ã " „ k \ Œ ± Ï LsetFont¼ê5•½iNÚŒ " 3
ReportLab: https:///software/downloads/ Python Imaging Library: /products/pil/ 8c ReprtLab •k|± Python2.X ‡ § O 3.x ‡ •鯘Ñ" SC•{µ windows ^ rŒ±† e1 .exe SC•§† SC" XJ´ linux ^r§Œ±e1 èSC(ïÆkSCPIL•)" SC•{(I‡rSC“è˜3 python S C8¹ Ü· ˜)µ
2
•{ü
˜‡~f
e¡5ww1˜‡~f§‹ÆÙ¦˜ §k5ww•{ü Hello World §S" 3 Reportlab ¥ •$? |‡Ò´3 pdfgen •¥ canvas é–§ …3ù‡•p#N^r¦^© § ã¡Mïg ½Â PDF©‡ L"5w“èµ 1µ 2µ 3µ 4µ 5µ 6: Created on Aug 23, 2010 @author: from reportlab.pdfgen import canvas c = canvas.Canvas("hello.pdf") c.drawString(100,750,"Hello World!") c.showPage() c.save()
4
24:styles.add(ParagraphStyle(name=’Justify’, alignment=TA_JUSTIFY)) 25:ptext = ’<font size=12>%s</font>’ % formatted_time 26:Story.append(Paragraph(ptext, styles["Normal"])) 27:Story.append(Spacer(1, 12)) 28:# Create return address 29:ptext = ’<font size=12>%s</font>’ % full_name 30:Story.append(Paragraph(ptext, styles["Normal"])) 31:for part in address_parts: 32: ptext = ’<font size=12>%s</font>’ % part.strip() 33: Story.append(Paragraph(ptext, styles["Normal"])) 34: Story.append(Spacer(1, 12)) 35:ptext = ’<font size=12>Dear %s:</font>’ % full_name.split()[0].strip() 36: Story.append(Paragraph(ptext, styles["Normal"])) 37: Story.append(Spacer(1, 12)) 38:ptext = ’<font size=12>We would like to welcome you to our 39: subscriber base for %s Magazine! \ 40: You will receive %s issues at the 41: excellent introductory price of $%s. 42: Please respond by\%s to start receiving 43: your subscription and get the following 44: free gift: %s.</font>’ 45: % (magName, 50:Story.append(Paragraph(ptext, styles["Justify"])) 51:Story.append(Spacer(1, 12)) 52:ptext = ’<font size=12>Thank you very much and we 53:look forward to serving you.</font>’ 54:Story.append(Paragraph(ptext, styles["Justify"])) 55:Story.append(Spacer(1, 12)) 56:ptext = ’<font size=12>Sincerely,</font>’Story.append 57:(Paragraph(ptext, styles["Normal"])) 58:Story.append(Spacer(1, 48)) 59µptext = ’<font size=12>Ima Sucker</font>’Story.append 60µ(Paragraph(ptext, styles["Normal"])) 61µStory.append(Spacer(1, 12)) 62µdoc.build(Story) 5 ¿ ‰ 1 ù ‡ § SI ‡ S CPIL(python imaging library)" þ ¡ “ è ' ƒ c §¤±·‚I‡‰‡{ü 0 •Bn)" 1µfrom 2µfrom 3µfrom 4µfrom § ~f•õ
Á‡µ3python -.p§˜„ ‹<ÑÑ¿ØU ÷v^rI¦§reportlab´pythonþ éÐ ˜‡m `DPDF La¥§ ©• þk'T reportlab ˜‡ÆS] §øˆ ÆS 땜
1
ReportlabSC
ÄuPython² `DPDF La¥Reportlab"§ØáuPython IOa¥§¤±7LÃÄe 1a¥•¿SC"Ï• 9 rã¡=†•PDF§¤±„I‡Python imaging library(PIL)a¥" ü‡a¥e1/Œµ
2
1: Python reportlab-helloworld def __init__(self,filename, pagesize=letter, bottomup = 1, pageCompression=0, encoding=rl_config.defaultEncoding, verbosity=0 encrypt=None): •õ]Õë•Reportlab User Guide" ~fµ 5ww“èµ e5·‚wwXÛ|^pagesize ˜Canvas•&µŒ
2: pdf-partial-form-fig2 $1“èƒ ò3éA8¹e)¤myfile.pdf©‡§„þ¡ ýAãfig-2"
4
k 'platyplatypus ¡•Page layout and topology using script,´˜«•p ÙÛa¥§•B^rŒ±ÏL§S{üMï••E, © " Platypus´˜|Ø%±x§Sa§J ø ŽŒ ˜!© ÙÛ!L‚!a.±9©•õU" ÏL˜‡{ü ~fäN`²§Xeã§ù´˜‡Ê•v±Ï•üµ ùX{´˜‡~f §Ï•ü´ØŒUkpython logo3"5w“èµ 1:import time 2:from reportlab.lib.enums import TA_JUSTIFY 3:from reportlab.lib.pagesizes import letter 4:from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image 5:from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle 6:from reportlab.lib.units import inch 7:doc = SimpleDocTemplate("form_letter.pdf",pagesize=letter, 8: rightMargin=72,leftMargin=72, 9: topMargin=72, 10: bottomMargin=18) 11:Story=[] 12:logo = "python_logo.png" 13:magName = "Pythonista" 14:issueNum = 12 15:subPrice = "99.00" 16:limitedDate = "03/05/2010" 17:freeGift = "tin foil hat" 18:formatted_time = time.ctime() 19:full_name = "Mike Driscoll" 20:address_parts = ["411 State St.", "Marshalltown, IA 50158"] 21:im = Image(logo, 2*inch, 2*inch) 22:Story.append(im) 23:styles=getSampleStyleSheet()
相关文档
最新文档