If you have problems printing your document make sure you are using the right page size (usually either A4
or letter). Some printers do not work well with pages that are too large or too small.
Very often, you will want to calculate things based on the page size. In the example above we extracted the
width and height. Later in the program we may use the width variable to define a right margin as width
- inch rather than using a constant. By using variables the margin will still make sense even if the page
size changes.
The bottomup argument switches coordinate systems. Some graphics systems (like PDF and PostScript)
place (0,0) at the bottom left of the page others (like many graphical user interfaces [GUI's]) place the origin
at the top left. The bottomup argument is deprecated and may be dropped in future
Need to see if it really works for all tasks, and if not then get rid of it
The pageCompression option determines whether the stream of PDF operations for each page is
compressed. By default page streams are not compressed, because the compression slows the file generation
process. If output size is important set pageCompression=1, but remember that, compressed documents
will be smaller, but slower to generate. Note that images are always compressed, and this option will only
save space if you have a very large amount of text and vector graphics on each page.
The encoding argument is largely obsolete in version 2.0 and can probably be omitted by 99% of users.
Its default value is fine unless you very specifically need to use one of the 25 or so characters which are
present in MacRoman and not in Winansi. A useful reference to these is here:
http://www.alanwood.net/demos/charsetdiffs.html. The parameter determines which font encoding is used for
the standard Type 1 fonts; this should correspond to the encoding on your system. Note that this is the
encoding used internally by the font; text you pass to the ReportLab toolkit for rendering should always
either be a Python unicode string object or a UTF-8 encoded byte string (see the next chapter)! The font
encoding has two values at present: 'WinAnsiEncoding' or 'MacRomanEncoding'. The variable
rl_config.defaultEncoding above points to the former, which is standard on Windows, Mac OS X
and many Unices (including Linux). If you are Mac user and don't have OS X, you may want to make a
global change: modify the line at the top of reportlab/pdfbase/pdfdoc.py to switch it over. Otherwise, you can
probably just ignore this argument completely and never pass it. For all TTF and the commonly-used CID
fonts, the encoding you pass in here is ignored, since the reportlab library itself knows the right encodings in
those cases.
The demo script reportlab/demos/stdfonts.py will print out two test documents showing all code
points in all fonts, so you can look up characters. Special characters can be inserted into string commands
with the usual Python escape sequences; for example \101 = 'A'.
The verbosity argument determines how much log information is printed. By default, it is zero to assist
applications which want to capture PDF from standard output. With a value of 1, you will get a confirmation
message each time a document is generated. Higher numbers may give more output in future.
The encrypt argument determines if and how the document is encrypted. By default, the document is not
encrypted. If encrypt is a string object, it is used as the user password for the pdf. If encrypt is an
instance of reportlab.lib.pdfencrypt.StandardEncryption, this object is used to encrypt the
pdf. This allows more finegrained control over the encryption settings. Encryption is covered in more detail
in Chapter 4.
to do - all the info functions and other non-drawing stuff
Cover all constructor arguments, and setAuthor etc.
2.3 Drawing Operations
Suppose the hello function referenced above is implemented as follows (we will not explain each of the
operations in detail yet).
def hello(c):
from reportlab.lib.units import inch
# move the origin up and to the left
c.translate(inch,inch)
# define a large font
c.setFont("Helvetica", 14)
# choose some colors
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 11
Pdf first page thumbnail - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
print pdf thumbnails; show pdf thumbnails
Pdf first page thumbnail - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
pdf files thumbnails; cannot view pdf thumbnails in
c.setStrokeColorRGB(0.2,0.5,0.3)
c.setFillColorRGB(1,0,1)
# draw some lines
c.line(0,0,0,1.7*inch)
c.line(0,0,1*inch,0)
# draw a rectangle
c.rect(0.2*inch,0.2*inch,1*inch,1.5*inch, fill=1)
# make text go straight up
c.rotate(90)
# change color
c.setFillColorRGB(0,0,0.77)
# say hello (note after rotate the y coord needs to be negative!)
c.drawString(0.3*inch, -inch, "Hello World")
Examining this code notice that there are essentially two types of operations performed using a canvas. The
first type draws something on the page such as a text string or a rectangle or a line. The second type changes
the state of the canvas such as changing the current fill or stroke color or changing the current font type and
size.
If we imagine the program as a painter working on the canvas the "draw" operations apply paint to the canvas
using the current set of tools (colors, line styles, fonts, etcetera) and the "state change" operations change one
of the current tools (changing the fill color from whatever it was to blue, or changing the current font to
Times-Roman in 15 points, for example).
The document generated by the "hello world" program listed above would contain the following graphics.
Hello World
Figure 2-1: "Hello World" in pdfgen
About the demos in this document
This document contains demonstrations of the code discussed like the one shown in the rectangle above.
These demos are drawn on a "tiny page" embedded within the real pages of the guide. The tiny pages are 5.5
inches wide and 3 inches tall. The demo displays show the actual output of the demo code. For convenience
the size of the output has been reduced slightly.
2.4 The tools: the "draw" operations
This section briefly lists the tools available to the program for painting information onto a page using the
canvas interface. These will be discussed in detail in later sections. They are listed here for easy reference
and for summary purposes.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 12
VB.NET Image: Program for Creating Thumbnail from Documents and
are supposed to read VB.NET Imaging: Get Started first! document and image formats, such as PDF, TIFF, GIF server space, which results in slower web page loading
pdf first page thumbnail; pdf thumbnail creator
How to C#: Preview Document Content Using XDoc.PowerPoint
Project. RasterEdge XDoc.PowerPoint provide you with APIs to get a thumbnail bitmap of the first page in the PowerPoint document file.
how to create a thumbnail of a pdf document; pdf thumbnail
Line methods
canvas.line(x1,y1,x2,y2)
canvas.lines(linelist)
The line methods draw straight line segments on the canvas.
Shape methods
canvas.grid(xlist, ylist) 
canvas.bezier(x1, y1, x2, y2, x3, y3, x4, y4)
canvas.arc(x1,y1,x2,y2) 
canvas.rect(x, y, width, height, stroke=1, fill=0) 
canvas.ellipse(x1,y1, x2,y2, stroke=1, fill=0)
canvas.wedge(x1,y1, x2,y2, startAng, extent, stroke=1, fill=0) 
canvas.circle(x_cen, y_cen, r, stroke=1, fill=0)
canvas.roundRect(x, y, width, height, radius, stroke=1, fill=0) 
The shape methods draw common complex shapes on the canvas.
String drawing methods
canvas.drawString(x, y, text):
canvas.drawRightString(x, y, text) 
canvas.drawCentredString(x, y, text)
The draw string methods draw single lines of text on the canvas.
The text object methods
textobject = canvas.beginText(x, y) 
canvas.drawText(textobject) 
Text objects are used to format text in ways that are not supported directly by the canvas interface. A
program creates a text object from the canvas using beginText and then formats text by invoking
textobject methods. Finally the textobject is drawn onto the canvas using drawText.
The path object methods
path = canvas.beginPath() 
canvas.drawPath(path, stroke=1, fill=0) 
canvas.clipPath(path, stroke=1, fill=0) 
Path objects are similar to text objects: they provide dedicated control for performing complex graphical 
drawing not directly provided by the canvas interface. A program creates a path object using beginPath 
populates the path with graphics using the methods of the path object and then draws the path on the canvas
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 13
How to C#: Preview Document Content Using XDoc.Word
Programming Project. RasterEdge XDoc.Word provide you with APIs to get a thumbnail bitmap of the first page in the word document file.
pdf thumbnail generator; how to make a thumbnail from pdf
C# Word - Render Word to Other Images
String inputFilePath = Program.RootPath + "\\" 1.docx"; DOCXDocument doc = new DOCXDocument(inputFilePath); // Get the first page of Word file.
no pdf thumbnails in; show pdf thumbnails in
using drawPath.
It is also possible to use a path as a "clipping region" using the clipPath method -- for example a circular
path can be used to clip away the outer parts of a rectangular image leaving only a circular part of the image
visible on the page.
Image methods
ETON
You need the Python Imaging Library (PIL) to use images with the ReportLab package. Examnples of the
techniques below can be found by running the script test_pdfgen_general.py in our tests
subdirectory and looking at page 7 of the output.
There are two similar-sounding ways to draw images. The preferred one is the drawImage method. This
implements a caching system so you can define an image once and draw it many times; it will only be stored
once in the PDF file. drawImage also exposes one advanced parameter, a transparency mask, and will
expose more in future. The older technique, drawInlineImage, stores bitmaps within the page stream
and is thus very inefficient if you use the same image more than once in a document; but can result in PDFs
which render faster if the images are very small and not repeated. We'll discuss the oldest one first:
canvas.drawInlineImage(self, image, x,y, width=None,height=None) 
The drawInlineImage method places an image on the canvas. The image parameter may be either a
PIL Image object or an image filename. Many common file formats are accepted including GIF and JPEG. It
returns the size of the actual image in pixels as a (width, height) tuple.
canvas.drawImage(self, image, x,y, width=None,height=None,mask=None) 
The arguments and return value work as for drawInlineImage. However, we use a caching system; a
given image will only be stored the first time it is used, and just referenced on subsequent use. If you supply
a filename, it assumes that the same filename means the same image. If you supply a PIL image, it tests if the
content has actually changed before re-embedding.
The mask parameter lets you create transparent images. It takes 6 numbers and defines the range of RGB
values which will be masked out or treated as transparent. For example with [0,2,40,42,136,139], it will mask
out any pixels with a Red value from 0 or 1, Green from 40 or 41 and Blue of 136, 137 or 138 (on a scale of
0-255). It's currently your job to know which color is the 'transparent' or background one.
PDF allows for many image features and we will expose more of the over time, probably with extra keyword
arguments to drawImage.
Ending a page
canvas.showPage()
The showPage method finishes the current page. All additional drawing will be done on another page.
ETON
Warning! All state changes (font changes, color settings, geometry transforms, etcetera) are FORGOTTEN
when you advance to a new page in pdfgen. Any state settings you wish to preserve must be set up again
before the program proceeds with drawing!
2.5 The toolbox: the "state change" operations
This section briefly lists the ways to switch the tools used by the program for painting information onto a
page using the canvas interface. These too will be discussed in detail in later sections.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 14
C# powerpoint - Render PowerPoint to Other Images
String inputFilePath = Program.RootPath + "\\" 1.pptx"; PPTXDocument doc = new PPTXDocument(inputFilePath); // Get the first page of PowerPoint file.
pdf reader thumbnails; pdf thumbnails
C# Word - Insert Blank Word Page in C#.NET
page inserting library control toolkit allows developers to specify where they want to insert (blank) Word document page (before the first page or after the
generate pdf thumbnails; thumbnail pdf preview
Changing Colors
canvas.setFillColorCMYK(c, m, y, k) 
canvas.setStrikeColorCMYK(c, m, y, k) 
canvas.setFillColorRGB(r, g, b) 
canvas.setStrokeColorRGB(r, g, b) 
canvas.setFillColor(acolor) 
canvas.setStrokeColor(acolor) 
canvas.setFillGray(gray) 
canvas.setStrokeGray(gray) 
PDF supports three different color models: gray level, additive (red/green/blue or RGB), and subtractive with
darkness parameter (cyan/magenta/yellow/darkness or CMYK). The ReportLab packages also provide named
colors such as lawngreen. There are two basic color parameters in the graphics state: the Fill color for
the interior of graphic figures and the Stroke color for the boundary of graphic figures. The above
methods support setting the fill or stroke color using any of the four color specifications.
Changing Fonts
canvas.setFont(psfontname, size, leading = None) 
The setFont method changes the current text font to a given type and size. The leading parameter
specifies the distance down to move when advancing from one text line to the next.
Changing Graphical Line Styles
canvas.setLineWidth(width) 
canvas.setLineCap(mode) 
canvas.setLineJoin(mode) 
canvas.setMiterLimit(limit) 
canvas.setDash(self, array=[], phase=0) 
Lines drawn in PDF can be presented in a number of graphical styles. Lines can have different widths, they
can end in differing cap styles, they can meet in different join styles, and they can be continuous or they can
be dotted or dashed. The above methods adjust these various parameters.
Changing Geometry
canvas.setPageSize(pair) 
canvas.transform(a,b,c,d,e,f): 
canvas.translate(dx, dy) 
canvas.scale(x, y) 
canvas.rotate(theta) 
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 15
C# Raster - Image Save Options in C#.NET
Tiff Edit. Image Thumbnail. Image Save. Advanced Save Options. Save Image. VB.NET How-to, VB.NET PDF, VB.NET Word to icon file, false: just save the first page to
pdf thumbnail fix; pdf thumbnails in
C# PowerPoint - Insert Blank PowerPoint Page in C#.NET
page inserting library control toolkit allows developers to specify where they want to insert (blank) PowerPoint document page (before the first page or after
show pdf thumbnail in; disable pdf thumbnails
canvas.skew(alpha, beta) 
All PDF drawings fit into a specified page size. Elements drawn outside of the specified page size are not
visible. Furthermore all drawn elements are passed through an affine transformation which may adjust their
location and/or distort their appearence. The setPageSize method adjusts the current page size. The
transform, translate, scale, rotate, and skew methods add additional transformations to the
current transformation. It is important to remember that these transformations are incremental -- a new
transform modifies the current transform (but does not replace it).
State control
canvas.saveState() 
canvas.restoreState() 
Very often it is important to save the current font, graphics transform, line styles and other graphics state in
order to restore them later. The saveState method marks the current graphics state for later restoration by
a matching restoreState. Note that the save and restore method invokation must match -- a restore call
restores the state to the most recently saved state which hasn't been restored yet. You cannot save the state on
one page and restore it on the next, however -- no state is preserved between pages.
2.6 Other canvas methods.
Not all methods of the canvas object fit into the "tool" or "toolbox" categories. Below are some of the
misfits, included here for completeness.
canvas.setAuthor()
canvas.addOutlineEntry(title, key, level=0, closed=None)
canvas.setTitle(title)
canvas.setSubject(subj)
canvas.pageHasData()
canvas.showOutline()
canvas.bookmarkPage(name)
canvas.bookmarkHorizontalAbsolute(name, yhorizontal)
canvas.doForm()
canvas.beginForm(name, lowerx=0, lowery=0, upperx=None, uppery=None)
canvas.endForm()
canvas.linkAbsolute(contents, destinationname, Rect=None, addtopage=1, name=None, **kw)
canvas.linkRect(contents, destinationname, Rect=None, addtopage=1, relative=1, name=None, **kw)
canvas.getPageNumber()
canvas.addLiteral()
canvas.getAvailableFonts()
canvas.stringWidth(self, text, fontName, fontSize, encoding=None)
canvas.setPageCompression(onoff=1)
canvas.setPageTransition(self, effectname=None, duration=1,
direction=0,dimension='H',motion='I')
2.7 Coordinates (default user space)
By default locations on a page are identified by a pair of numbers. For example the pair (4.5*inch,
1*inch) identifies the location found on the page by starting at the lower left corner and moving to the
right 4.5 inches and up one inch.
For example, the following function draws a number of elements on a canvas.
def coords(canvas):
from reportlab.lib.units import inch
from reportlab.lib.colors import pink, black, red, blue, green
c = canvas
c.setStrokeColor(pink)
c.grid([inch, 2*inch, 3*inch, 4*inch], [0.5*inch, inch, 1.5*inch, 2*inch, 2.5*inch])
c.setStrokeColor(black)
c.setFont("Times-Roman", 20)
c.drawString(0,0, "(0,0) the Origin")
c.drawString(2.5*inch, inch, "(2.5,1) in inches")
c.drawString(4*inch, 2.5*inch, "(4, 2.5)")
c.setFillColor(red)
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 16
C# Image: Quick to Navigate Document in .NET Web Viewer
Navigation Throw Thumbnial Image. The first method recommended can be called from any document page object for formed documents, like Word and PDF, will contain
.pdf printing in thumbnail size; view pdf thumbnails
C# Word - Table Cell Processing in C#.NET
Create a Table for document ITable table = doc.CreateTable(3, 3); //Get all rows in table List<ITableRow> rows = table.GetRows(); //Get first row ITableRow row
how to make a thumbnail of a pdf; generate pdf thumbnail c#
c.rect(0,2*inch,0.2*inch,0.3*inch, fill=1)
c.setFillColor(green)
c.circle(4.5*inch, 0.4*inch, 0.2*inch, fill=1)
In the default user space the "origin" (0,0) point is at the lower left corner. Executing the coords
function in the default user space (for the "demo minipage") we obtain the following.
(0,0) the Origin
(2.5,1) in inches
(4, 2.5)
Figure 2-2: The Coordinate System
Moving the origin: the translate method
Often it is useful to "move the origin" to a new point off the lower left corner. The
canvas.translate(x,y) method moves the origin for the current page to the point currently identified
by (x,y).
For example the following translate function first moves the origin before drawing the same objects as shown
above.
def translate(canvas):
from reportlab.lib.units import cm
canvas.translate(2.3*cm, 0.3*cm)
coords(canvas)
This produces the following.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 17
(0,0) the Origin
(2.5,1) in inches
(4, 2.5)
Figure 2-3: Moving the origin: the translate method
ETON
Note: As illustrated in the example it is perfectly possible to draw objects or parts of objects "off the page".
In particular a common confusing bug is a translation operation that translates the entire drawing off the
visible area of the page. If a program produces a blank page it is possible that all the drawn objects are off the
page.
Shrinking and growing: the scale operation
Another important operation is scaling. The scaling operation canvas.scale(dx,dy) stretches or
shrinks the and dimensions by the dxdy factors respectively. Often dx and dy are the same -- for
example to reduce a drawing by half in all dimensions use dx = dy = 0.5. However for the purposes of
illustration we show an example where dx and dy are different.
def scale(canvas):
canvas.scale(0.75, 0.5)
coords(canvas)
This produces a "short and fat" reduced version of the previously displayed operations.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 18
(0,0) the Origin
(2.5,1) in inches
(4, 2.5)
Figure 2-4: Scaling the coordinate system
ETON
Note: scaling may also move objects or parts of objects off the page, or may cause objects to "shrink to
nothing."
Scaling and translation can be combined, but the order of the operations are important.
def scaletranslate(canvas):
from reportlab.lib.units import inch
canvas.setFont("Courier-BoldOblique", 12)
# save the state
canvas.saveState()
# scale then translate
canvas.scale(0.3, 0.5)
canvas.translate(2.4*inch, 1.5*inch)
canvas.drawString(0, 2.7*inch, "Scale then translate")
coords(canvas)
# forget the scale and translate...
canvas.restoreState()
# translate then scale
canvas.translate(2.4*inch, 1.5*inch)
canvas.scale(0.3, 0.5)
canvas.drawString(0, 2.7*inch, "Translate then scale")
coords(canvas)
This example function first saves the current canvas state and then does a scale followed by a
translate. Afterward the function restores the state (effectively removing the effects of the scaling and
translation) and then does the same operations in a different order. Observe the effect below.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 19
Scale then translate
(0,0) the Origin
(2.5,1) in inches
(4, 2.5)
Translate then scale
(0,0) the Origin
(2.5,1) in inches
(4, 2.5)
Figure 2-5: Scaling and Translating
ETON
Note: scaling shrinks or grows everything including line widths so using the canvas.scale method to render a
microscopic drawing in scaled microscopic units may produce a blob (because all line widths will get
expanded a huge amount). Also rendering an aircraft wing in meters scaled to centimeters may cause the
lines to shrink to the point where they disappear. For engineering or scientific purposes such as these scale
and translate the units externally before rendering them using the canvas.
Saving and restoring the canvas state: saveState and restoreState
The scaletranslate function used an important feature of the canvas object: the ability to save and
restore the current parameters of the canvas. By enclosing a sequence of operations in a matching pair of
canvas.saveState() an canvas.restoreState() operations all changes of font, color, line
style, scaling, translation, or other aspects of the canvas graphics state can be restored to the state at the
point of the saveState(). Remember that the save/restore calls must match: a stray save or restore
operation may cause unexpected and undesirable behavior. Also, remember that no canvas state is
preserved across page breaks, and the save/restore mechanism does not work across page breaks.
Mirror image
It is interesting although perhaps not terribly useful to note that scale factors can be negative. For example
the following function
def mirror(canvas):
from reportlab.lib.units import inch
canvas.translate(5.5*inch, 0)
canvas.scale(-1.0, 1.0)
coords(canvas)
creates a mirror image of the elements drawn by the coord function.
User Guide
Chapter 2 Graphics and Text with pdfgen
Page 20
Documents you may be interested
Documents you may be interested