我试图使用PythonandPDF2.2来创建一个ReportLab报告。
根据用户指南的说法
特殊TableStyle探测器sic 在任何样式命令中,第一行索引可以设置为一个特殊字符串“拆分最后”或“先拆分”,以指示样式仅用于拆分表的最后一行或连续的第一行。这使得分割表具有更好的分割效果。
我尝试过使用几个样式元素,包括:
('TEXTCOLOR', (0, 'splitfirst'), (1, 'splitfirst'), colors.black)
('TEXTCOLOR', (0, 'splitfirst'), (1, 0), colors.black)
('TEXTCOLOR', (0, 'splitfirst'), (1, -1), colors.black) 而这些似乎都不起作用。第一种方法生成带有以下消息的TypeError:
TypeError: cannot concatenate 'str' and 'int' objects后两者使用以下消息生成TypeErrors:
TypeError: an integer is required这个功能是简单地被破坏了还是我做错了什么?如果是后者,我做错了什么?
发布于 2008-09-18 17:46:36
看来我要回答自己的问题了。
首先,文档平直地显示了“在任何样式命令中,第一行索引可以设置为一个特殊字符串‘拆分最后’或‘拆分第一’,以指示样式应该仅用于拆分表的最后一行或连续的第一行。”在当前版本中,“先分离”和“先分离”的行索引与前面提到的TEXTCOLOR和后台逗号上的TypeErrors断开。
基于读取源代码,我怀疑只有表格样式的行命令(网格、方框、LINEABOVE和LINEBELOW)与“先分离”和“分割最后一行”索引兼容。我怀疑所有单元格命令都与前面提到的TypeErrors不同。
但是,我可以通过子类表类和重写onSplit方法来实现我想做的事情。这是我的代码:
class XTable(Table):
def onSplit(self, T, byRow=1):
T.setStyle(TableStyle([
('TEXTCOLOR', (0, 1), (1, 1), colors.black)]))这样做是将文本颜色黑色应用于每页第二行的第一和第二单元格。(第一行是一个标头,由表的repeatRows参数重复。)更准确地说,它是对每个帧的第一个和第二个单元格这样做的,但是由于我使用的是SimpleDocTemplate,框架和页面是相同的。
发布于 2010-04-12 16:52:07
这似乎是ReportLab表类中的一个bug。除了DLJessup自己的答案之外,另一个修复方法是修改ReportLab代码,该代码在第1301行的Table._drawBkgrnd()中导致错误。对于“分裂最后”,更改:
y0 = rowpositions[sr]至:
if sr == 'splitlast':
y0 = rowpositions[-2] # last value is 0. Second last is the one we want.
else:
y0 = rowpositions[sr]这在您自己的代码中很容易完成,而无需通过子类表和覆盖此方法对ReportLab进行黑客攻击。我不需要先使用“拆分”;如果我使用了,我会在这里张贴其余的黑客。
发布于 2008-09-17 00:40:54
..。在任何样式的命令中,第一行索引可以设置为一个特殊的字符串.
在第一个示例中,您还将第二行索引设置为一个特殊的字符串。
不知道为什么其他两个人不工作..。你确定这就是异常的来源吗?
https://stackoverflow.com/questions/78450
复制相似问题