Re: reportlab-users Digest, Vol 157, Issue 4
Prabhakar Moka <[email protected]>
| Newsgroups | gmane.comp.python.reportlab.user |
|---|---|
| Message-ID | <CAN2cTZuLgZSoH2a846Lg7QUfgLwkpe-Y779A6v+HCH9vwJ4maw@mail.gmail.com> |
Hi, Could some one guide me on this issue? Regards, Prabhakar On Wed, Nov 16, 2016 at 12:11 PM, < [email protected]> wrote: > Send reportlab-users mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > https://pairlist2.pair.net/mailman/listinfo/reportlab-users > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of reportlab-users digest..." > > > Today's Topics: > > 1. Help (Prabhakar Moka) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 15 Nov 2016 15:00:14 +0530 > From: Prabhakar Moka <[email protected]> > To: [email protected] > Subject: [reportlab-users] Help > Message-ID: > <CAN2cTZuO4fXd1iAS6cU45pP+ZO=A77xtZ2VKw9Ackr1Bi2ewvg@mail. > gmail.com> > Content-Type: text/plain; charset="utf-8" > > Hi, > > I am using Reportlab 2.7 with Python2.7.11 to generate *PDF file with page > number and table of contents clickable*. > > I am able to create a pdf with clickable bookmarks in the table of > contents (toc) and created a pdf with "x of y" page numbering also. > > Here my problem is bookmarkpage(key) appears to break when I try to do > both. Please check attached "clickcheck.py" file code which I am using. > > Please help me to resolve this. > > Thanks, > Prabhakar > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: <https://pairlist2.pair.net/pipermail/reportlab-users/ > attachments/20161115/8ae18f0f/attachment-0001.html> > -------------- next part -------------- > from reportlab.lib.styles import ParagraphStyle as PS > from reportlab.platypus import PageBreak > from reportlab.platypus.paragraph import Paragraph > from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate > from reportlab.platypus.tableofcontents import TableOfContents > from reportlab.platypus.frames import Frame > from reportlab.lib.units import cm > from reportlab.pdfgen import canvas > from reportlab.lib.pagesizes import LETTER > > class FooterCanvas(canvas.Canvas): > > def __init__(self, *args, **kwargs): > canvas.Canvas.__init__(self, *args, **kwargs) > self.pages = [] > > def showPage(self): > self.pages.append(dict(self.__dict__)) > self._startPage() > > def save(self): > page_count = len(self.pages) > for page in self.pages: > self.__dict__.update(page) > self.draw_canvas(page_count) > canvas.Canvas.showPage(self) > canvas.Canvas.save(self) > > def draw_canvas(self, page_count): > page = "Page %s of %s" % (self._pageNumber, page_count) > x = 128 > self.saveState() > self.setStrokeColorRGB(0, 0, 0) > self.setLineWidth(0.5) > self.line(66, 78, LETTER[0] - 66, 78) > self.setFont('Times-Roman', 10) > self.drawString(LETTER[0]-x, 65, page) > self.restoreState() > > class MyDocTemplate(BaseDocTemplate): > def __init__(self, filename, **kw): > self.allowSplitting = 0 > apply(BaseDocTemplate.__init__, (self, filename), kw) > template = PageTemplate('normal', [Frame(2.5*cm, 2.5*cm, 15*cm, > 25*cm, id='F1')]) > self.addPageTemplates(template) > > > > def afterFlowable(self, flowable): > "Registers TOC entries." > if flowable.__class__.__name__ == 'Paragraph': > text = flowable.getPlainText() > style = flowable.style.name > if style == 'Heading1': > level = 0 > elif style == 'Heading2': > level = 1 > else: > return > E = [level, text, self.page] > #if we have a bookmark name append that to our notify data > bn = getattr(flowable,'_bookmarkName',None) > if bn is not None: E.append(bn) > self.notify('TOCEntry', tuple(E)) > > centered = PS(name = 'centered', fontSize = 30,leading = 16, alignment = > 1,spaceAfter = 20) > > h1 = PS(name = 'Heading1',fontSize = 14,leading = 16) > h2 = PS(name = 'Heading2',fontSize = 12,leading = 14) > > > # Build story. > story = [] > > # Create an instance of TableOfContents. Override the level styles > (optional) > # and add the object to the story > > toc = TableOfContents() > toc.levelStyles = [ > PS(fontName='Times-Bold', fontSize=20, name='TOCHeading1', > leftIndent=20, firstLineIndent=-20, spaceBefore=10, leading=16), > PS(fontSize=18, name='TOCHeading2', leftIndent=40, > firstLineIndent=-20, spaceBefore=5, leading=12), > ] > story.append(Paragraph('<b>Table of contents</b>', centered)) > story.append(toc) > > > #this function makes our headings > def doHeading(text,sty): > from hashlib import sha1 > #create bookmarkname > bn=sha1(text+sty.name).hexdigest() > #modify paragraph text to include an anchor point with name bn > h=Paragraph(text+'<a name="%s"/>' % bn,sty) > #store the bookmark name on the flowable so afterFlowable can see this > h._bookmarkName=bn > story.append(h) > > #story.append(Paragraph('<b>Table of contents</b>', centered)) > story.append(PageBreak()) > doHeading('First heading', h1) > story.append(Paragraph('Text in first heading', PS('body'))) > doHeading('First sub heading', h2) > story.append(Paragraph('Text in first sub heading', PS('body'))) > story.append(PageBreak()) > doHeading('Second sub heading', h2) > story.append(Paragraph('Text in second sub heading', PS('body'))) > story.append(PageBreak()) > doHeading('Last heading', h1) > story.append(Paragraph('Text in last heading', PS('body'))) > doc = MyDocTemplate('mintoc.pdf') > doc.multiBuild(story, canvasmaker = FooterCanvas) > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > reportlab-users mailing list > [email protected] > https://pairlist2.pair.net/mailman/listinfo/reportlab-users > > > ------------------------------ > > End of reportlab-users Digest, Vol 157, Issue 4 > *********************************************** >