예제 #1
0
def simple_toc():
    doc = SimpleDocTemplate("Ejemplo11.pdf")
    story = []
    styles = getSampleStyleSheet()

    toc = TableOfContents()
    toc.levelStyles = [
        ParagraphStyle(fontName='Helvetica',
                       fontSize=14,
                       name='Heading1',
                       leftIndent=20,
                       firstLineIndent=-20,
                       spaceBefore=5,
                       leading=16),
        ParagraphStyle(fontName='Times-Roman',
                       fontSize=14,
                       name='Heading2',
                       leftIndent=20,
                       firstLineIndent=-20,
                       spaceBefore=5,
                       leading=16),
    ]
    story.append(toc)

    ipsum = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
    culpa qui officia deserunt mollit anim id est laborum.'''

    para = Paragraph("The Beginning", style=styles['Heading1'])
    toc.addEntry(0, 'The Beginning', 1)
    story.append(para)
    para = Paragraph(ipsum, style=styles['Normal'])
    story.append(para)
    story.append(PageBreak())

    para = Paragraph("The Middle", style=styles['Heading1'])
    toc.addEntry(0, 'The Middle', 2)
    story.append(para)
    para = Paragraph("The Middle Sub-Header", style=styles['Heading2'])
    toc.addEntry(1, 'The Middle Sub-Header', 2)
    story.append(para)
    para = Paragraph(ipsum, style=styles['Normal'])
    story.append(para)
    story.append(PageBreak())

    para = Paragraph("The End", style=styles['Heading1'])
    toc.addEntry(0, 'The End', 3)
    story.append(para)

    doc.multiBuild(story)
예제 #2
0
class cwPDF:

      def __init__(self,doc):
          self.docname = doc
          self.page_counter = 2
          self.w,self.h = letter
          self.doc = BaseDocTemplate(self.docname,pagesize=letter)
          self.landscape = Frame(self.doc.leftMargin,
                                 self.doc.bottomMargin,
                                 self.doc.height,
                                 self.doc.width,
                                 id="Normal")

          self.portrait = Frame(self.doc.leftMargin,
                                self.doc.bottomMargin,
                                self.doc.width,
                                self.doc.height,
                                id="Normal")

          self.tportrait = Frame(self.doc.leftMargin,
                                self.doc.bottomMargin,
                                self.doc.width,
                                self.doc.height,
                                id="Normal")
          ttemplate = PageTemplate(id='tportrait',frames =self.tportrait, onPage=self.make_title_page)
          ptemplate = PageTemplate(id='portrait',frames =self.portrait, onPage=self.make_portrait)
          ltemplate = PageTemplate(id='landscape',frames =self.landscape, onPage=self.make_landscape)
          self.doc.addPageTemplates([ttemplate,ptemplate,ltemplate]) 
          self.styles = getSampleStyleSheet()
          
          self.start = ""
          self.end = ""
          self.story = []
          self.pgType = "Letter"
          self.image = ""
          self.cimage = ""
          self.client = ""


          self.toc = TableOfContents()
	  self.toc.levelStyles = [  
	            PS(fontName='Times-Bold', fontSize=10, name='TOCHeading1', leftIndent=20, firstLineIndent=-20, spaceBefore=10, leading=16),  
	            PS(fontSize=10, name='TOCHeading2', leftIndent=40, firstLineIndent=-20, spaceBefore=5, leading=12),  
	            ]  


      def addTOC(self, page):
	  self.toc.beforeBuild()
          self.story.insert(page, NextPageTemplate('portrait'))
	  self.story.insert(page+1, self.toc);
          self.story.insert(page+2, PageBreak())

      def setCImage(self,image):
          self.cimage = image

      def setPImage(self,image):
          self.image = image

      def setTitle(self,text):
          self.title = text

      def setClient(self,text):
          self.client = text

      def setDates(self,start,end):
          self.startDate = start
          self.endDate = end

      def setClient(self,text):
          self.client = text

      def make_portrait(self,canvas,doc):
          canvas.saveState()
          canvas.setPageSize(letter)
          canvas.setFont("Times-Roman",10)
          canvas.drawString(6.25 * inch, self.h - 25,"Client Name: %s " % (self.client))
          canvas.line(.50 * inch, self.h - 33, 8 * inch, self.h - 33)
          canvas.line(.50 * inch,.50 * inch, 8 * inch,.50 * inch)
          canvas.drawString(inch * 7.25, 0.25 * inch, "Page %d" % doc.page)
          canvas.drawString(inch * .50, 0.25 * inch, "Confidential Document.")
          canvas.restoreState()

      def make_landscape(self,canvas,doc):
          canvas.saveState()
          canvas.setFont("Times-Roman",10)
          canvas.setPageSize(landscape(letter))
          canvas.line(.50 * inch, self.w - 33, 10.75 * inch,self.w - 33)
          canvas.line(.50 * inch,.50 * inch, 10.75 * inch,.50 * inch)
          canvas.drawString(inch * 10.75, 0.75 * inch, "Page %d" % doc.page)
          canvas.drawString(inch * 1.75, 0.75 * inch, "Confidential Document.")
          canvas.drawString(9.50 * inch,self.w - 25 ,"Client: %s" % self.client)
          canvas.restoreState()

      def make_title_page(self,canvas,doc):
          canvas.saveState()
          canvas.setFont("Times-Bold",20)
          canvas.setFillColor(lightblue)
          canvas.drawString(1 * inch,9 * inch , self.title)
          canvas.setFont("Times-Bold",12)
          canvas.setFillColor(black)
          canvas.drawString(1 * inch,8.70 * inch,"Start (%s) - End (%s)" % (self.startDate,self.endDate))
          canvas.drawString(1 * inch,8.45 * inch,"Client: %s" % self.client)
          canvas.setFont("Times-Roman",10)
          canvas.setFillColor(grey)
          canvas.drawString(1 * inch,2.20 * inch,"Confidential: The following report contains confidential information. Do not distribute, email, mail, fax, or transfer ")
          canvas.drawString(1 * inch,2.05 * inch,"via any electronic mechanism unless it has been approved by the recipient company's security policy. All copies and")
          canvas.drawString(1 * inch,1.90 * inch,"backups of this document should be saved on protected storage at all times. Do not share any of the information")
          canvas.drawString(1 * inch,1.75 * inch,"contained within this report with anyone unless they are authorized to view the information. Violating within this ")
          canvas.drawString(1 * inch,1.60 * inch,"report with anyone unless they are authorized to view the information. Violating any of the previous instructions is")
          canvas.drawString(1 * inch,1.45 * inch,"grounds for termination.")
          if self.image != "":
                aspect = self.get_aspect(self.image)
                canvas.drawImage(self.image,self.w-150,self.h-80,width=120,height=(120 * aspect))
          if self.cimage != "":
                aspect = self.get_aspect(self.cimage)
                canvas.drawImage(self.cimage,2.0625 * inch,self.h-400,width=self.w/2,height=(self.w/2 * aspect))
          canvas.restoreState()

      def get_aspect(self,path):
          img = utils.ImageReader(path)
          iw,ih = img.getSize()
          aspect = ih / float(iw)
          return aspect

      def setPortrait(self):
          self.story.append(NextPageTemplate('portrait'))
          self.addPageBreak()

      def setLandscape(self):
          self.story.append(NextPageTemplate('landscape'))
          self.addPageBreak()

      def setDates(self,start,end):
          self.startDate = start
          self.endDate = end

      def setCanvas(self,canvas):
          self.canvas = canvas  

      def addStory(self,text):
          t = Paragraph(text,self.styles["Normal"])
          self.story.append(t)
          self.story.append(Spacer(1,12))       

      def addStoryTitle(self,text):
          t = Paragraph(text,self.styles["Heading1"])
          self.story.append(t)
          self.story.append(Spacer(1,8))
          self.toc.addEntry(1, text, self.page_counter)

      def getKeys(self,data):
             all = []
             for f in data.keys():
                 all.append(f)
             return all

      def addTable(self,ndata):
          data = []
          keys = self.getKeys(ndata)
          data.append(keys)
          for x in ndata:
              lister = []
              for b in keys:
                  outb = ndata[b]
                  t = Paragraph(str(outb),self.styles["Normal"])
                  lister.append(t)
          data.append(lister)

          tblStyle = TableStyle([('TEXTCOLOR',(0,0),(-1,-1),black),
                                 ('VALIGN',(0,0),(-1,-1),'TOP'),
                                 ('BOX',(0,0),(-1,-1),1,black),
                                 ('INNERGRID',(0,0),(-1,-1),1,black),
                                 ('BACKGROUND',(0,0),(-1,0),lightblue)])

          t = LongTable(data,repeatRows=1)
          t.setStyle(tblStyle)
          self.story.append(t)
          self.story.append(CondPageBreak(6))
 
      def addPageBreak(self):
          self.story.append(PageBreak())
          self.page_counter = self.page_counter + 1

      def addImage(self,image,w,h):
          self.story.append(Image(image,w,h))
          self.story.append(Spacer(1,12))

      def savePDF(self):
          self.addTOC(2)
          self.doc.build(self.story)
          self.story = []
예제 #3
0
파일: hawkPDF.py 프로젝트: ddfelts/hawk2.0
class hawkPDF:

      def __init__(self,doc):
          self.docname = doc
          self.page_counter = 2
          self.w,self.h = letter
          self.doc = BaseDocTemplate(self.docname,pagesize=letter)
          self.landscape = Frame(self.doc.leftMargin,
                                 self.doc.bottomMargin,
                                 self.doc.height,
                                 self.doc.width,
                                 id="Normal")

          self.portrait = Frame(self.doc.leftMargin,
                                self.doc.bottomMargin,
                                self.doc.width,
                                self.doc.height,
                                id="Normal")

          self.tportrait = Frame(self.doc.leftMargin,
                                self.doc.bottomMargin,
                                self.doc.width,
                                self.doc.height,
                                id="Normal")
          ttemplate = PageTemplate(id='tportrait',frames =self.tportrait, onPage=self.make_title_page)
          ptemplate = PageTemplate(id='portrait',frames =self.portrait, onPage=self.make_portrait)
          ltemplate = PageTemplate(id='landscape',frames =self.landscape, onPage=self.make_landscape)
          self.doc.addPageTemplates([ttemplate,ptemplate,ltemplate]) 
          self.styles = getSampleStyleSheet()
          self.toc = TableOfContents()
          self.start = ""
          self.end = ""
          self.story = []
          self.pgType = "Letter"
          self.image = ""
          self.cimage = ""
          self.client = ""


          self.toc = TableOfContents()
	  self.toc.levelStyles = [  
	            PS(fontName='Times-Bold', fontSize=14, name='TOCHeading1', leftIndent=20, firstLineIndent=-20, spaceBefore=10, leading=16),  
	            PS(fontSize=12, name='TOCHeading2', leftIndent=40, firstLineIndent=-20, spaceBefore=5, leading=12),  
	            ]  


      def addTOC(self, page):
	  self.toc.beforeBuild()
          self.story.insert(page, NextPageTemplate('portrait'))
	  self.story.insert(page+1, self.toc);
          self.story.insert(page+2, PageBreak())

      def setCImage(self,image):
          self.cimage = image

      def setPImage(self,image):
          self.image = image

      def setTitle(self,text):
          self.title = text

      def setClient(self,text):
          self.client = text

      def setDates(self,start,end):
          self.startDate = start
          self.endDate = end

      def setClient(self,text):
          self.client = text

      def make_portrait(self,canvas,doc):
          canvas.saveState()
          canvas.setPageSize(letter)
          canvas.setFont("Times-Roman",10)
          canvas.drawString(6.25 * inch, self.h - 25,"Client Name: %s " % (self.client))
          canvas.line(.50 * inch, self.h - 50, 8 * inch, self.h - 50)
          canvas.line(.50 * inch,1 * inch, 8 * inch,1 * inch)
          canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
          canvas.drawString(inch * 1.5, 0.60 * inch, "Confidential Document.")
          canvas.restoreState()

      def make_landscape(self,canvas,doc):
          canvas.saveState()
          canvas.setFont("Times-Roman",10)
          canvas.setPageSize(landscape(letter))
          canvas.line(.50 * inch, self.w - 50, 10.75 * inch,self.w - 50)
          canvas.line(.50 * inch,1 * inch, 10.75 * inch,1 * inch)
          canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
          canvas.drawString(inch * 2.75, 0.60 * inch, "Confidential Document.")
          canvas.drawString(9.50 * inch,self.w - 25 ,"Client: %s" % self.client)
          canvas.restoreState()

      def make_title_page(self,canvas,doc):
          canvas.saveState()
          canvas.setFont("Times-Bold",30)
          canvas.drawString(1 * inch,9 * inch , self.title)
          canvas.setFont("Times-Bold",16)
          canvas.drawString(1 * inch,8.5 * inch,"Start (%s) - End (%s)" % (self.startDate,self.endDate))
          canvas.drawString(1 * inch,8.25 * inch,"Client: %s" % self.client)
          if self.image != "":
                aspect = self.get_aspect(self.image)
                canvas.drawImage(self.image,self.w-150,self.h-80,width=120,height=(120 * aspect))
          if self.cimage != "":
                aspect = self.get_aspect(self.cimage)
                canvas.drawImage(self.cimage,2.0625 * inch,self.h-400,width=self.w/2,height=(self.w/2 * aspect))
          canvas.restoreState()

      def get_aspect(self,path):
          img = utils.ImageReader(path)
          iw,ih = img.getSize()
          aspect = ih / float(iw)
          return aspect

      def setPortrait(self):
          self.story.append(NextPageTemplate('portrait'))
          self.addPageBreak()

      def setLandscape(self):
          self.story.append(NextPageTemplate('landscape'))
          self.addPageBreak()

      def setDates(self,start,end):
          self.startDate = start
          self.endDate = end

      def setCanvas(self,canvas):
          self.canvas = canvas  

      def addStory(self,text):
          t = Paragraph(text,self.styles["Normal"])
          self.story.append(t)
          self.story.append(Spacer(1,12))       

      def addStoryTitle(self,text):
          t = Paragraph(text,self.styles["Heading1"])
          self.story.append(t)
          self.story.append(Spacer(1,8))
          self.toc.addEntry(1, text, self.page_counter)

      def addTable(self,ndata,nkeys=None):
          data = []
          if not nkeys:
             keys = self.hlib.getKeys(ndata)
             data.append(keys)
          else:
             keys = nkeys 
             data.append(nkeys)
          for x in ndata:
              lister = [] 
              for b in range(len(keys)):
                  if keys[b] not in x:
                     outb = None
                  else:
                     outb = x[keys[b]]
                  t = Paragraph(str(outb),self.styles["Normal"])
                  lister.append(t)
              data.append(lister)

          tblStyle = TableStyle([('TEXTCOLOR',(0,0),(-1,-1),black),
                                 ('VALIGN',(0,0),(-1,-1),'TOP'),
                                 ('BOX',(0,0),(-1,-1),1,black),
                                 ('INNERGRID',(0,0),(-1,-1),1,black),
                                 ('BACKGROUND',(0,0),(-1,0),lightblue)])

          t = LongTable(data,repeatRows=1)
          t.setStyle(tblStyle)
          self.story.append(t)
          self.story.append(CondPageBreak(6))
 
      def addPageBreak(self):
          self.story.append(PageBreak())
          self.page_counter = self.page_counter + 1

      def addImage(self,image,w,h):
          self.story.append(Image(image,w,h))
          self.story.append(Spacer(1,12))

      def savePDF(self):
          self.addTOC(2)
          self.doc.build(self.story)
          self.story = []
예제 #4
0
class cwPDF:
    def __init__(self, doc):
        self.docname = doc
        self.page_counter = 2
        self.w, self.h = letter
        self.doc = BaseDocTemplate(self.docname, pagesize=letter)
        self.landscape = Frame(self.doc.leftMargin,
                               self.doc.bottomMargin,
                               self.doc.height,
                               self.doc.width,
                               id="Normal")

        self.portrait = Frame(self.doc.leftMargin,
                              self.doc.bottomMargin,
                              self.doc.width,
                              self.doc.height,
                              id="Normal")

        self.tportrait = Frame(self.doc.leftMargin,
                               self.doc.bottomMargin,
                               self.doc.width,
                               self.doc.height,
                               id="Normal")
        ttemplate = PageTemplate(id='tportrait',
                                 frames=self.tportrait,
                                 onPage=self.make_title_page)
        ptemplate = PageTemplate(id='portrait',
                                 frames=self.portrait,
                                 onPage=self.make_portrait)
        ltemplate = PageTemplate(id='landscape',
                                 frames=self.landscape,
                                 onPage=self.make_landscape)
        self.doc.addPageTemplates([ttemplate, ptemplate, ltemplate])
        self.styles = getSampleStyleSheet()

        self.start = ""
        self.end = ""
        self.story = []
        self.pgType = "Letter"
        self.image = ""
        self.cimage = ""
        self.client = ""

        self.toc = TableOfContents()
        self.toc.levelStyles = [
            PS(fontName='Times-Bold',
               fontSize=10,
               name='TOCHeading1',
               leftIndent=20,
               firstLineIndent=-20,
               spaceBefore=10,
               leading=16),
            PS(fontSize=10,
               name='TOCHeading2',
               leftIndent=40,
               firstLineIndent=-20,
               spaceBefore=5,
               leading=12),
        ]

    def addTOC(self, page):
        self.toc.beforeBuild()
        self.story.insert(page, NextPageTemplate('portrait'))
        self.story.insert(page + 1, self.toc)
        self.story.insert(page + 2, PageBreak())

    def setCImage(self, image):
        self.cimage = image

    def setPImage(self, image):
        self.image = image

    def setTitle(self, text):
        self.title = text

    def setClient(self, text):
        self.client = text

    def setDates(self, start, end):
        self.startDate = start
        self.endDate = end

    def setClient(self, text):
        self.client = text

    def make_portrait(self, canvas, doc):
        canvas.saveState()
        canvas.setPageSize(letter)
        canvas.setFont("Times-Roman", 10)
        canvas.drawString(6.25 * inch, self.h - 25,
                          "Client Name: %s " % (self.client))
        canvas.line(.50 * inch, self.h - 33, 8 * inch, self.h - 33)
        canvas.line(.50 * inch, .50 * inch, 8 * inch, .50 * inch)
        canvas.drawString(inch * 7.25, 0.25 * inch, "Page %d" % doc.page)
        canvas.drawString(inch * .50, 0.25 * inch, "Confidential Document.")
        canvas.restoreState()

    def make_landscape(self, canvas, doc):
        canvas.saveState()
        canvas.setFont("Times-Roman", 10)
        canvas.setPageSize(landscape(letter))
        canvas.line(.50 * inch, self.w - 33, 10.75 * inch, self.w - 33)
        canvas.line(.50 * inch, .50 * inch, 10.75 * inch, .50 * inch)
        canvas.drawString(inch * 10.75, 0.75 * inch, "Page %d" % doc.page)
        canvas.drawString(inch * 1.75, 0.75 * inch, "Confidential Document.")
        canvas.drawString(9.50 * inch, self.w - 25, "Client: %s" % self.client)
        canvas.restoreState()

    def make_title_page(self, canvas, doc):
        canvas.saveState()
        canvas.setFont("Times-Bold", 20)
        canvas.setFillColor(lightblue)
        canvas.drawString(1 * inch, 9 * inch, self.title)
        canvas.setFont("Times-Bold", 12)
        canvas.setFillColor(black)
        canvas.drawString(
            1 * inch, 8.70 * inch,
            "Start (%s) - End (%s)" % (self.startDate, self.endDate))
        canvas.drawString(1 * inch, 8.45 * inch, "Client: %s" % self.client)
        canvas.setFont("Times-Roman", 10)
        canvas.setFillColor(grey)
        canvas.drawString(
            1 * inch, 2.20 * inch,
            "Confidential: The following report contains confidential information. Do not distribute, email, mail, fax, or transfer "
        )
        canvas.drawString(
            1 * inch, 2.05 * inch,
            "via any electronic mechanism unless it has been approved by the recipient company's security policy. All copies and"
        )
        canvas.drawString(
            1 * inch, 1.90 * inch,
            "backups of this document should be saved on protected storage at all times. Do not share any of the information"
        )
        canvas.drawString(
            1 * inch, 1.75 * inch,
            "contained within this report with anyone unless they are authorized to view the information. Violating within this "
        )
        canvas.drawString(
            1 * inch, 1.60 * inch,
            "report with anyone unless they are authorized to view the information. Violating any of the previous instructions is"
        )
        canvas.drawString(1 * inch, 1.45 * inch, "grounds for termination.")
        if self.image != "":
            aspect = self.get_aspect(self.image)
            canvas.drawImage(self.image,
                             self.w - 150,
                             self.h - 80,
                             width=120,
                             height=(120 * aspect))
        if self.cimage != "":
            aspect = self.get_aspect(self.cimage)
            canvas.drawImage(self.cimage,
                             2.0625 * inch,
                             self.h - 400,
                             width=self.w / 2,
                             height=(self.w / 2 * aspect))
        canvas.restoreState()

    def get_aspect(self, path):
        img = utils.ImageReader(path)
        iw, ih = img.getSize()
        aspect = ih / float(iw)
        return aspect

    def setPortrait(self):
        self.story.append(NextPageTemplate('portrait'))
        self.addPageBreak()

    def setLandscape(self):
        self.story.append(NextPageTemplate('landscape'))
        self.addPageBreak()

    def setDates(self, start, end):
        self.startDate = start
        self.endDate = end

    def setCanvas(self, canvas):
        self.canvas = canvas

    def addStory(self, text):
        t = Paragraph(text, self.styles["Normal"])
        self.story.append(t)
        self.story.append(Spacer(1, 12))

    def addStoryTitle(self, text):
        t = Paragraph(text, self.styles["Heading1"])
        self.story.append(t)
        self.story.append(Spacer(1, 8))
        self.toc.addEntry(1, text, self.page_counter)

    def getKeys(self, data):
        all = []
        for f in data.keys():
            all.append(f)
        return all

    def addTable(self, ndata):
        data = []
        keys = self.getKeys(ndata)
        data.append(keys)
        for x in ndata:
            lister = []
            for b in keys:
                outb = ndata[b]
                t = Paragraph(str(outb), self.styles["Normal"])
                lister.append(t)
        data.append(lister)

        tblStyle = TableStyle([('TEXTCOLOR', (0, 0), (-1, -1), black),
                               ('VALIGN', (0, 0), (-1, -1), 'TOP'),
                               ('BOX', (0, 0), (-1, -1), 1, black),
                               ('INNERGRID', (0, 0), (-1, -1), 1, black),
                               ('BACKGROUND', (0, 0), (-1, 0), lightblue)])

        t = LongTable(data, repeatRows=1)
        t.setStyle(tblStyle)
        self.story.append(t)
        self.story.append(CondPageBreak(6))

    def addPageBreak(self):
        self.story.append(PageBreak())
        self.page_counter = self.page_counter + 1

    def addImage(self, image, w, h):
        self.story.append(Image(image, w, h))
        self.story.append(Spacer(1, 12))

    def savePDF(self):
        self.addTOC(2)
        self.doc.build(self.story)
        self.story = []