reportlab中,如何把self属性在类的其他函数中调用?
时间: 2023-02-08 18:48:08 浏览: 113
在reportlab中,如果你想在类的其他函数中使用self属性,可以直接使用self.属性名的形式来调用。例如:
```
class MyClass:
def __init__(self):
self.my_var = "Hello, world!"
def print_var(self):
print(self.my_var)
my_obj = MyClass()
my_obj.print_var() # output: "Hello, world!"
```
在上面的代码中,我们定义了一个类`MyClass`,在该类的`__init__`方法中定义了一个`my_var`属性,并在`print_var`方法中调用了这个属性。在这里,我们可以看到,在`print_var`方法中使用`self.my_var`来调用`my_var`属性。
相关问题
在reportlab中如何把TableOfContents() 生成的目录添加到MyDocTemplate生成文档的书签
在 ReportLab 中,可以使用 `TableOfContents` 类来生成目录。要将目录添加到文档的书签,需要在 `MyDocTemplate` 类中重写 `beforeFlowable` 方法,并在其中调用 `pdf.bookmarkPage` 方法将目录页添加到书签。
以下是一个简单的例子:
```python
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import SimpleDocTemplate, TableOfContents, Paragraph
class MyDocTemplate(SimpleDocTemplate):
def __init__(self, filename, **kwargs):
super().__init__(filename, **kwargs)
self.addPageTemplates([
TableOfContents(self, depth=1)
])
def beforeFlowable(self, flowable):
"""Add the current page to the table of contents"""
if flowable.__class__.__name__ == 'Paragraph':
if flowable._text.startswith('Chapter'):
self.canv.bookmarkPage(flowable._text)
doc = MyDocTemplate("mydocument.pdf", pagesize=letter)
doc.build([Paragraph("Chapter 1", style=styles['Heading1']), Paragraph("Some text."),
Paragraph("Chapter 2", style=styles['Heading1']), Paragraph("More text."),
])
```
上面的例子中,MyDocTemplate类的初始化函数传入了一个TableOfContents并且设置了目录的深度。
beforeFlowable方法在每一个flowable被添加到页面之前被调用,这里判断如果这个 flowable 是 Paragraph并且文本的头部是Chapter ,那么就把当前页面加入到书签中。
重要的是,在使用 `MyDocTemplate` 类生成文档之前,需要定义样式,其中一个是 heading1 级别的样式,并在段落中使用。
阅读全文