Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在使用Flowable添加拆分之前添加分页符_Python_Reportlab - Fatal编程技术网

Python 在使用Flowable添加拆分之前添加分页符

Python 在使用Flowable添加拆分之前添加分页符,python,reportlab,Python,Reportlab,我有一个应用程序正在使用reportlab构建表文档。我希望发生的是,当一个可流动(在本例中,始终是一个表)需要跨页面拆分时,它应该首先添加一个分页符。因此,应该允许拆分一个表,但任何被拆分的表都应该始终从新页面开始。同一文档中有多个表,如果两个表可以放在同一页上而无需拆分,则不应出现分页符 最接近这一点的是在初始化文档时将allowspliting设置为False。然而问题是,当一个表超过了它必须容纳的空间量时,它就会失败。如果不是失败,而是包装,这就是我要找的 例如,此操作将失败,并出现空间

我有一个应用程序正在使用reportlab构建表文档。我希望发生的是,当一个可流动(在本例中,始终是一个
)需要跨页面拆分时,它应该首先添加一个分页符。因此,应该允许拆分一个表,但任何被拆分的表都应该始终从新页面开始。同一文档中有多个表,如果两个表可以放在同一页上而无需拆分,则不应出现分页符

最接近这一点的是在初始化文档时将
allowspliting
设置为
False
。然而问题是,当一个表超过了它必须容纳的空间量时,它就会失败。如果不是失败,而是包装,这就是我要找的

例如,此操作将失败,并出现空间不足的错误:

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, inch
from reportlab.platypus import SimpleDocTemplate, Table
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("simple_table_grid.pdf", pagesize=letter, allowSplitting=False)
# container for the 'Flowable' objects
elements = []
data2 = []

data = [['00', '01', '02', '03', '04'],
       ['10', '11', '12', '13', '14'],
       ['20', '21', '22', '23', '24'],
       ['30', '31', '32', '33', '34']]

for i in range(100):
  data2.append(['AA', 'BB', 'CC', 'DD', 'EE'])

t1 = Table(data)
t2 = Table(data2)

elements.append(t1)
elements.append(t2)
doc.build(elements)

第一个表(
t1
)适合,但是
t2
不适合。如果禁用了
allowSplitting
,它将适合文档中的所有内容,但是
t1
t2
位于同一页面上。因为
t2
比一页长,我希望它在开始之前添加一个分页符,然后在需要时在后面的页面上拆分。

一个选项是利用文档高度和表格高度来计算
PageBreak()
元素的正确位置。文档高度可以从
SimpleDoctTemplate
对象获得,表格高度可以使用
wrap()
方法计算

如果可用高度小于表格高度,下面的示例将插入一个
PageBreak()
。然后重新计算下一个表的可用高度

来自reportlab.lib.pagesizes导入信函
从reportlab.platypus导入SimpleDoctTemplate、表格、分页符
doc=SimpleDocTemplate(“simple\u table\u grid.pdf”,pagesize=letter)
#创建多个不同长度的表。
表=[]
对于[10,10,30,50,30,10]中的行:
数据=[[0,1,2,3,4]表示范围内(行)]
append(表(数据,样式=[('BOX',(0,0),(-1,-1),2,(0,0,0))]))
#在适当的位置插入PageBreak()元素。
元素=[]
可用高度=文件高度
对于表中的表:
table_height=table.wrap(0,可用_height)[1]
如果可用,高度<表高度:
extend([PageBreak(),table])
如果表格高度<文件高度:
可用高度=文件高度-表格高度
其他:
可用高度=表格高度%doc.height
其他:
元素。追加(表)
可用高度=可用高度-工作台高度
文档生成(元素)