[reportlab-users] reportlab-users Digest, Vol 157, Issue 4

Prabhakar Moka prabhakarmoka at gmail.com
Tue Nov 22 09:31:36 EST 2016


Hi,

Could some one guide me on this issue?

Regards,
Prabhakar

On Wed, Nov 16, 2016 at 12:11 PM, <
reportlab-users-request at lists2.reportlab.com> wrote:

> Send reportlab-users mailing list submissions to
>         reportlab-users at lists2.reportlab.com
>
> 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
>         reportlab-users-request at lists2.reportlab.com
>
> You can reach the person managing the list at
>         reportlab-users-owner at lists2.reportlab.com
>
> 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 <prabhakarmoka at gmail.com>
> To: reportlab-users at lists2.reportlab.com
> Subject: [reportlab-users] Help
> Message-ID:
>         <CAN2cTZuO4fXd1iAS6cU45pP+ZO=A77xtZ2VKw9Ackr1Bi2ewvg at 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
> reportlab-users at lists2.reportlab.com
> https://pairlist2.pair.net/mailman/listinfo/reportlab-users
>
>
> ------------------------------
>
> End of reportlab-users Digest, Vol 157, Issue 4
> ***********************************************
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20161122/39563b86/attachment.html>


More information about the reportlab-users mailing list