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
> ***********************************************
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.