报告实验室更改段落样式

时间:2017-07-27 04:51:09

标签: python pdf styles reportlab paragraph

我一直在努力改变报告实验室中的段落样式。我认为问题可能是缺乏理解什么是类。如果有人能给我一些很棒的指针。贝娄是我的代码。当我运行它时,我在调用元类库时遇到错误'错误 init ()最多需要3个参数(给定4个)'。

干杯,

罗宾

from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import mm
from reportlab.platypus import Paragraph, Frame

Title = 'Test'

c  = Canvas(str(Title)+'.pdf')  

story = []

file = open('Acknowledgements.txt','r')
lis = []
for line in file:
    lis.append(line)





styles = getSampleStyleSheet()
styleN = styles['Normal']
styleH = styles['Heading1']

class ParagraphStyle(styleN):
           defaults = {
               'fontName':'Helvetica',
               'fontSize':14,
               'leading':12,
               'leftIndent':0,
               'rightIndent':0,
               'firstLineIndent':0,
               'alignment':0,
               'spaceBefore':0,
               'spaceAfter':0,
               'bulletFontName':'Helvetica',
               'bulletFontSize':10,
               'bulletIndent':0,
               'textColor': 'k',
               'backColor':None,
               'wordWrap':None,
               'borderWidth': 0,
               'borderPadding': 0,
               'borderColor': None,
               'borderRadius': None,
               'allowWidows': 1,
               'allowOrphans': 0,
               'textTransform':None,
               'endDots':None,
               'splitLongWords':1,
               'underlineProportion': 0,
               'bulletAnchor': 'start',
               'justifyLastLine': 0,
               'justifyBreaks': 0,
               'spaceShrinkage': 0,
               }




story.append(Paragraph('Acknowledgements', styleH))
for l in lis:
    story.append(Paragraph(l, styleN))



f = Frame(110*mm, 0*mm, 90*mm, 280*mm, showBoundary=0)

f.addFromList(story,c)

c.save()

1 个答案:

答案 0 :(得分:0)

无需为您调试代码:

__init__()是一个类初始值设定项。 (它类似于Java中的New)

这意味着:如果我在某处定义了一个类Foo,后来又做了a = Foo(param1),那么后台发生的事情是Python为该类分配内存然后调用Foo.__init__(self, param1),其中self是该类新分配的内存。

请注意,Python会在参数中插入self而不会看到它。这意味着Foo.__init__() 技术上收到了两个参数(根据Python和任何追溯),您只需在Foo()中输入一个参数!对于那些不熟悉Python类的人来说,这可能是一个令人困惑的旅行。

所以在你的情况下,你(或你调用的东西)正在初始化一个类并传递三个参数(IE:a = Foo(1, 2, 3))。然后Python传递self,然后输入您输入到该类__init__()的参数,以便它接收四个参数(self, 1, 2, 3)。这个类只用三个参数声明,所以你传递的太多了!它只能容忍你传递两个(或者可能更少,如果它需要关键字args)参数,所以当添加self__init__()得到三个参数。

当出现这种情况时,通常最好检查它失败的线路并确保它看起来没问题,然后参考您尝试初始化的类的文档。