[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