src/reportlab/platypus/doctemplate.py
changeset 4405 c985bd7093ad
parent 4380 831ee16f2338
child 4458 dfef5530196d
--- a/src/reportlab/platypus/doctemplate.py	Thu May 24 11:50:23 2018 +0100
+++ b/src/reportlab/platypus/doctemplate.py	Thu May 31 12:07:34 2018 +0100
@@ -939,41 +939,52 @@
     _handle_currentFrame = handle_currentFrame
     _handle_nextFrame = handle_nextFrame
 
+    def _makeCanvas(self, filename=None, canvasmaker=canvas.Canvas):
+        '''make and return a sample canvas. As suggested by 
+        Chris Jerdonek cjerdonek @ bitbucket this allows testing of stringWidths
+        etc.
+
+        *NB* only the canvases created in self._startBuild will actually be used
+        in the build process.
+        '''
+        canv = canvasmaker(filename or self.filename,
+                            pagesize=self.pagesize,
+                            invariant=self.invariant,
+                            pageCompression=self.pageCompression,
+                            enforceColorSpace=self.enforceColorSpace,
+                            initialFontName = self.initialFontName,
+                            initialFontSize = self.initialFontSize,
+                            initialLeading = self.initialLeading,
+                            cropBox = self.cropBox,
+                            artBox = self.artBox,
+                            trimBox = self.trimBox,
+                            bleedBox = self.bleedBox,
+                            )
+
+        getattr(canv,'setEncrypt',lambda x: None)(self.encrypt)
+
+        canv._cropMarks = self.cropMarks
+        canv.setAuthor(self.author)
+        canv.setTitle(self.title)
+        canv.setSubject(self.subject)
+        canv.setCreator(self.creator)
+        canv.setKeywords(self.keywords)
+        if self.displayDocTitle is not None:
+            canv.setViewerPreference('DisplayDocTitle',['false','true'][self.displayDocTitle])
+        if self.lang:
+            canv.setCatalogEntry('Lang',self.lang)
+
+        if self._onPage:
+            canv.setPageCallBack(self._onPage)
+        return canv
+
     def _startBuild(self, filename=None, canvasmaker=canvas.Canvas):
         self._calc()
 
         #each distinct pass gets a sequencer
-        self.seq = reportlab.lib.sequencer.Sequencer()
-
-        self.canv = canvasmaker(filename or self.filename,
-                                pagesize=self.pagesize,
-                                invariant=self.invariant,
-                                pageCompression=self.pageCompression,
-                                enforceColorSpace=self.enforceColorSpace,
-                                initialFontName = self.initialFontName,
-                                initialFontSize = self.initialFontSize,
-                                initialLeading = self.initialLeading,
-                                cropBox = self.cropBox,
-                                artBox = self.artBox,
-                                trimBox = self.trimBox,
-                                bleedBox = self.bleedBox,
-                                )
+        #self.seq = reportlab.lib.sequencer.Sequencer()
 
-        getattr(self.canv,'setEncrypt',lambda x: None)(self.encrypt)
-
-        self.canv._cropMarks = self.cropMarks
-        self.canv.setAuthor(self.author)
-        self.canv.setTitle(self.title)
-        self.canv.setSubject(self.subject)
-        self.canv.setCreator(self.creator)
-        self.canv.setKeywords(self.keywords)
-        if self.displayDocTitle is not None:
-            self.canv.setViewerPreference('DisplayDocTitle',['false','true'][self.displayDocTitle])
-        if self.lang:
-            self.canv.setCatalogEntry('Lang',self.lang)
-
-        if self._onPage:
-            self.canv.setPageCallBack(self._onPage)
+        self.canv = self._makeCanvas(filename=filename,canvasmaker=canvasmaker)
         self.handle_documentBegin()
 
     def _endBuild(self):