Guest User

Untitled

a guest
May 9th, 2020
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. _margin_top = 10*mm
  2. _margin_bottom = 30*mm
  3. _margin_left = 20*mm
  4. _margin_right = 50*mm
  5. _footer_height = 30*mm
  6. _header_height = 20*mm
  7.  
  8. class PageNumCanvas(canvas.Canvas):
  9. """
  10. http://code.activestate.com/recipes/546511-page-x-of-y-with-reportlab/
  11. http://code.activestate.com/recipes/576832/
  12. """
  13. #----------------------------------------------------------------------
  14. def __init__(self, *args, **kwargs):
  15. """Constructor"""
  16. canvas.Canvas.__init__(self, *args, **kwargs)
  17. self.pages = []
  18.  
  19. #----------------------------------------------------------------------
  20. def showPage(self):
  21. """
  22. On a page break, add information to the list
  23. """
  24. self.pages.append(dict(self.__dict__))
  25. self._startPage()
  26.  
  27. #----------------------------------------------------------------------
  28. def save(self):
  29. """
  30. Add the page number to each page (page x of y)
  31. """
  32. page_count = len(self.pages)
  33.  
  34. for page in self.pages:
  35. self.__dict__.update(page)
  36. self.draw_page_number(page_count)
  37. canvas.Canvas.showPage(self)
  38.  
  39. canvas.Canvas.save(self)
  40.  
  41. #----------------------------------------------------------------------
  42. def draw_page_number(self, page_count):
  43. """
  44. Add the page number
  45. """
  46. page = "Page %s of %s" % (self._pageNumber, page_count)
  47. self.setFont("Helvetica", 9)
  48. self.drawCentredString(210*mm/2, 10*mm, page)
  49.  
  50.  
  51. class FrontCoverTemplate(PageTemplate):
  52. def __init__(self):
  53. frame = Frame( _margin_left, _margin_bottom+_footer_height, 210*mm-(_margin_left+_margin_right), 297*mm-(_margin_top+_margin_bottom+_header_height+_footer_height), id='main_frame', showBoundary=1,rightPadding=0, leftPadding=0, topPadding=0, bottomPadding=0)
  54. PageTemplate.__init__(self, id='first',frames=[frame], pagesize=A4)
  55.  
  56. def beforeDrawPage(self,canvas,doc):
  57. styles = getSampleStyleSheet()
  58. canvas.saveState()
  59. #header
  60. #draw header border
  61. canvas.setFillColorRGB(1,0,1)
  62. canvas.rect(_margin_left,297*mm-_margin_top-_header_height,210*mm-_margin_left-_margin_right,_header_height, fill=1)
  63.  
  64. #footer
  65. canvas.setFillColorRGB(1,0,1)
  66. canvas.rect(_margin_left,_margin_bottom,210*mm-_margin_left-_margin_right,_footer_height, fill=1)
  67. canvas.drawString(_margin_left,_margin_bottom-10*mm, "My address")
  68. canvas.restoreState()
  69.  
  70.  
  71. #to be updated
  72. class LaterTemplate(PageTemplate):
  73. def __init__(self):
  74.  
  75. frame = Frame( 20*mm, 20*mm, 297*mm-40*mm, 210*mm-40*mm, id='main_frame', showBoundary=1,rightPadding=0, leftPadding=0, topPadding=0, bottomPadding=0)
  76. PageTemplate.__init__(self, id='later',frames=[frame],pagesize=landscape(A4))
  77.  
  78.  
  79.  
  80. class DeviceMontageOrder():
  81.  
  82. def __init__(self):
  83.  
  84. self.buffer = BytesIO()
  85. pdfmetrics.registerFont(TTFont('Roboto', 'Roboto-Regular.ttf'))
  86. self.styles = getSampleStyleSheet()####styles
  87. self.moj_styl=ParagraphStyle('moj_styl',
  88. alignment=TA_LEFT,
  89. fontSize=8,
  90. fontName="Roboto")
  91. self.maly_styl=ParagraphStyle('maly_styl',
  92. alignment=TA_LEFT,
  93. fontSize=6,
  94. fontName="Roboto")
  95. margin = 0.8*cm
  96. self.doc = BaseDocTemplate(self.buffer)
  97. self.doc.addPageTemplates(
  98. [
  99. FrontCoverTemplate(),
  100. LaterTemplate(),
  101. ])
  102.  
  103.  
  104.  
  105. def get_info_page(self):
  106. elements =[]
  107. elements.append(Paragraph("Jedziemy gdzieśtam",self.moj_styl))
  108. return elements
  109.  
  110. def get_device_page(self):
  111. elements =[]
  112. elements.append(Paragraph("Montujemy sobie cośtam",self.moj_styl))
  113. return elements
  114.  
  115. def print_single_order(self):
  116.  
  117. elements=[]
  118. elements.append(NextPageTemplate('first'))
  119. elements = elements + self.get_info_page()
  120. elements.append(PageBreak())
  121. elements.append(NextPageTemplate('later'))
  122.  
  123. elements = elements + self.get_device_page()
  124. elements.append(PageBreak())
  125. elements = elements + self.get_device_page()
  126. print(elements)
  127. self.doc.build(elements,canvasmaker=PageNumCanvas)
  128.  
  129. # Get the value of the BytesIO buffer and write it to the response.
  130. pdf = self.buffer.getvalue()
  131. self.buffer.close()
  132. return pdf
Add Comment
Please, Sign In to add comment