我用reportlab构建了一个pdf,为了更好地控制页面(颜色-填充-返回行…)我创建了一个框架。在
问题是,我的文本来自一个数据库,它需要多个页面。在
我想知道如何判断这是页面/框架的结尾,我应该为其余的文本创建一个新的页面/框架。在
import MySQLdb
import pprint
import sys
import csv
from datetime import *
from reportlab.pdfgen import canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import landscape, letter, A4
from reportlab.lib.units import cm, inch
from reportlab.platypus import Image, Paragraph, Frame, KeepInFrame
styles = getSampleStyleSheet()
styleN = styles['Normal']
styleH = styles['Heading1']
story = []
pdf_file_name = 'report_.pdf'
c = canvas.Canvas(pdf_file_name)
f = Frame(0.5*inch, inch, 7*inch, 10.5*inch, showBoundary=1)
story.append(Paragraph("<font size='12' face='times' color='blue'>>SOME TEXT!</font>",styleN))
story.append(Paragraph("<font size='10' face='times'>SOME TEXT</font>", styleN) )
story.append( Paragraph('MORE TEXT HERE', styleN ) )
f.addFromList(story,c)
del story [:]
c.save()
我想你可以这样做,不过我不确定这是否是最好的方法。在
如果我们首先用数据库中的整个文本声明一个字符串变量
我们的下一步是创建一个所有单词的列表
^{2}$您可能需要配置一点,这取决于有多少个单词 放在一页纸上。对于这一点,我只想说每一页都要3个字。在
现在来看看“魔法”。 我们做一个for循环,x将通过文本列表逐级写入 在这个例子中,它从0开始,每循环跳3
然后在循环中,我们有一个从x到(x+3)的线性函数 然后每3个单词用一个空格把它们连在一起。在
然后你就可以把它放进你的镜框里
现在我们有了适合每一页的单词表。每一页上都有相等数量的单词。 这可能不太理想,但你可以拿着这个做个更好的分割。在
代码:
根据reportlabapi,您不应该直接使用
Frame
,而应该使用Flowable
,例如Paragraph
,这样可以为您创建和操作框架。例如,您应该使用这样,}。在
f.add
在成功时返回1,当它不能容纳p
时返回0,当这种情况发生时,我们使用f.split
从p
中提取尽可能多的内容到填充f
,然后用一个新框架替换{相关问题 更多 >
编程相关推荐