我尝试使用在这里输入链接描述这个来生成页面名。
最重要的部分是:
class PageNumCanvas(canvas.Canvas):
"""
http://code.activestate.com/recipes/546511-page-x-of-y-with-reportlab/
http://code.activestate.com/recipes/576832/
"""
#----------------------------------------------------------------------
def __init__(self, *args, **kwargs):
"""Constructor"""
super().__init__(*args, **kwargs)
self.pages = []
#----------------------------------------------------------------------
def showPage(self):
"""
On a page break, add information to the list
"""
self.pages.append(dict(self.__dict__))
self._startPage()
#----------------------------------------------------------------------
def save(self):
"""
Add the page number to each page (page x of y)
"""
page_count = len(self.pages)
for page in self.pages:
self.__dict__.update(page)
self.draw_page_number(page_count)
super().showPage()
super().save()
#----------------------------------------------------------------------
def draw_page_number(self, page_count):
"""
Add the page number
"""
self.line(10*mm, 78, 200*mm, 78)
if (self._pageNumber % 2) == 0:
self.drawString(15*mm, 15*mm, '{}'.format(self._pageNumber))
else:
self.drawRightString(195*mm, 15*mm, '{}'.format(self._pageNumber))
class MyDocTemplate(SimpleDocTemplate):
def __init__(self, filename, **kw):
self.allowSplitting = 1
super().__init__(filename, **kw)
def setBackground(canvas, doc):
color = PCMYKColor(5,3,0,8)
canvas.setFillColor(color)
canvas.rect(0,0,doc.width+doc.leftMargin+doc.rightMargin,doc.height+doc.topMargin+doc.bottomMargin, fill=True, stroke=False)
#Two Columns
frame1 = Frame(self.leftMargin, self.bottomMargin, self.width/2-6, self.height, id='col1')
frame2 = Frame(self.leftMargin+self.width/2+6, self.bottomMargin, self.width/2-6, self.height, id='col2')
frameT = Frame(self.leftMargin, self.bottomMargin, self.width, self.height, id='normal')
frame1a = Frame(self.leftMargin, self.bottomMargin, self.width/2-6, self.height/2-6, id='col1a')
frame2a = Frame(self.leftMargin+self.width/2+6, self.bottomMargin, self.width/2-6, self.height/2-6, id='col2a')
frameTa = Frame(self.leftMargin, self.bottomMargin+self.height/2+6, self.width, self.height/2-6, id='normala')
self.addPageTemplates([
PageTemplate(id='OneCol',frames=frameT, onPage=setBackground),
PageTemplate(id='TwoCol',frames=[frame1,frame2], onPage=setBackground),
PageTemplate(id='OneAndTwoCol',frames=[frameTa,frame1a,frame2a], onPage=setBackground),
])
def afterFlowable(self, flowable):
"Registers TOC entries."
if flowable.__class__.__name__ == 'Paragraph':
text = flowable.getPlainText()
style = flowable.style.name
if style == 'TOCheading':
key = 'h2-%s' % self.seq.nextf('TOCheading')
self.canv.bookmarkPage(key)
self.notify('TOCEntry', (0, text, self.page, key))
doc = MyDocTemplate(buffer,showBoundary=0, leftMargin=2*cm, rightMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm)
styles=getSampleStyleSheet()
heading= ParagraphStyle('heading',
parent=styles['Heading2'],
fontName = 'LiberationSansBold',
textColor = PCMYKColor(98,46,0,84),
spaceAfter=5
)它的作用是:
Story= []
Story.append(Paragraph("First Page", heading))
#Story.append(NextPageTemplate('OneCol'))
Story.append(PageBreak())
Story.append(Paragraph("Middle Page", heading))
#Story.append(NextPageTemplate('OneCol'))
Story.append(PageBreak())
Story.append(Paragraph("Last Page", heading))
#start the construction of the pdf
doc.multiBuild(Story, canvasmaker=PageNumCanvas)但是如果我取消注释,NextPageTemplate行页码就会消失,但是行仍然是可见的.
不知道为什么NextpageTemplate消失页码..。
发布于 2022-02-17 22:36:36
问题是,当您绘制背景时,将填充颜色设置为蓝色灰色,并将其留在那里。“填充颜色”是用来画字符串的,所以你的文本正在绘制,它只是在你的背景色中绘制。
添加
self.setFillGray(0)在绘制文本之前,在您的draw_page_number例程中。或者,在退出之前在setBackground函数中这样做,以恢复默认值。
https://stackoverflow.com/questions/71165911
复制相似问题