首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drawString不打印

drawString不打印
EN

Stack Overflow用户
提问于 2022-02-17 22:00:23
回答 1查看 85关注 0票数 0

我尝试使用在这里输入链接描述这个来生成页面名。

最重要的部分是:

代码语言:javascript
复制
   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
                           )

它的作用是:

代码语言:javascript
复制
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消失页码..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 22:36:36

问题是,当您绘制背景时,将填充颜色设置为蓝色灰色,并将其留在那里。“填充颜色”是用来画字符串的,所以你的文本正在绘制,它只是在你的背景色中绘制。

添加

代码语言:javascript
复制
        self.setFillGray(0)

在绘制文本之前,在您的draw_page_number例程中。或者,在退出之前在setBackground函数中这样做,以恢复默认值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71165911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档