{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reportlab Cheatsheet" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "from reportlab.pdfgen.canvas import Canvas\n", "from reportlab.lib.pagesizes import letter, A4\n", "from reportlab.lib.units import inch, mm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ReportLab PDF Library\n", "\n", "![](data:image/jpeg;base64,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)\n", "\n", "What is the ReportLab PDF Library?\n", "\n", "This is a software library that lets you directly create documents in Adobe's Portable Document Format (PDF)using the Python programming language. It also creates charts and data graphics in various bitmap and vectorformats as well as PDF.\n", "\n", "https://www.reportlab.com/docs/reportlab-userguide.pdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Canvas" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mInit signature:\u001b[0m\n", "\u001b[0mCanvas\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mpagesize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mbottomup\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mpageCompression\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0minvariant\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mverbosity\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mencrypt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mcropMarks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mpdfVersion\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0menforceColorSpace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0minitialFontName\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0minitialFontSize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0minitialLeading\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mcropBox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0martBox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mtrimBox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mbleedBox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", "This class is the programmer's interface to the PDF file format. Methods\n", "are (or will be) provided here to do just about everything PDF can do.\n", "\n", "The underlying model to the canvas concept is that of a graphics state machine\n", "that at any given point in time has a current font, fill color (for figure\n", "interiors), stroke color (for figure borders), line width and geometric transform, among\n", "many other characteristics.\n", "\n", "Canvas methods generally either draw something (like canvas.line) using the\n", "current state of the canvas or change some component of the canvas\n", "state (like canvas.setFont). The current state can be saved and restored\n", "using the saveState/restoreState methods.\n", "\n", "Objects are \"painted\" in the order they are drawn so if, for example\n", "two rectangles overlap the last draw will appear \"on top\". PDF form\n", "objects (supported here) are used to draw complex drawings only once,\n", "for possible repeated use.\n", "\n", "There are other features of canvas which are not visible when printed,\n", "such as outlines and bookmarks which are used for navigating a document\n", "in a viewer.\n", "\n", "Here is a very silly example usage which generates a Hello World pdf document.\n", "\n", "Example:: \n", "\n", " from reportlab.pdfgen import canvas\n", " c = canvas.Canvas(\"hello.pdf\")\n", " from reportlab.lib.units import inch\n", " # move the origin up and to the left\n", " c.translate(inch,inch)\n", " # define a large font\n", " c.setFont(\"Helvetica\", 80)\n", " # choose some colors\n", " c.setStrokeColorRGB(0.2,0.5,0.3)\n", " c.setFillColorRGB(1,0,1)\n", " # draw a rectangle\n", " c.rect(inch,inch,6*inch,9*inch, fill=1)\n", " # make text go straight up\n", " c.rotate(90)\n", " # change color\n", " c.setFillColorRGB(0,0,0.77)\n", " # say hello (note after rotate the y coord needs to be negative!)\n", " c.drawString(3*inch, -3*inch, \"Hello World\")\n", " c.showPage()\n", " c.save()\n", "\u001b[0;31mInit docstring:\u001b[0m\n", "Create a canvas of a given size. etc.\n", "\n", "You may pass a file-like object to filename as an alternative to\n", "a string.\n", "For more information about the encrypt parameter refer to the setEncrypt method.\n", "\n", "Most of the attributes are private - we will use set/get methods\n", "as the preferred interface. Default page size is A4.\n", "cropMarks may be True/False or an object with parameters borderWidth, markColor, markWidth\n", "and markLength\n", "\n", "if enforceColorSpace is in ('cmyk', 'rgb', 'sep','sep_black','sep_cmyk') then one of\n", "the standard _PDFColorSetter callables will be used to enforce appropriate color settings.\n", "If it is a callable then that will be used.\n", "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.7/site-packages/reportlab/pdfgen/canvas.py\n", "\u001b[0;31mType:\u001b[0m type\n", "\u001b[0;31mSubclasses:\u001b[0m \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Canvas?" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [], "source": [ "# Make a Canvas object, bottomup=0 will put the 0,0 at the lop-left (instead of bottom-left)\n", "c = Canvas(\"pdf/reportlab-cheatsheet.pdf\", pagesize=A4, bottomup=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shapes" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcircle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_cen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_cen\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstroke\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m draw a cirle centered at (x_cen,y_cen) with radius r (special case of ellipse)\n", "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.7/site-packages/reportlab/pdfgen/canvas.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "c.circle?" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [], "source": [ "c.circle(20*mm, 20*mm, 10*mm, stroke=0, fill=1)" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstroke\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m draws a rectangle with lower left corner at (x,y) and width and height as given.\n", "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.7/site-packages/reportlab/pdfgen/canvas.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "c.rect?" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [], "source": [ "c.rect(40*mm, 40*mm, 10*mm, 10*mm, stroke=1, fill=0)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mroundRect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mradius\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstroke\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m\n", "Draws a rectangle with rounded corners. The corners are\n", "approximately quadrants of a circle, with the given radius.\n", "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.7/site-packages/reportlab/pdfgen/canvas.py\n", "\u001b[0;31mType:\u001b[0m method\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "c.roundRect?" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "c.roundRect(60*mm, 60*mm, 50*mm, 50*mm, 5*mm, stroke=1, fill=0)" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "c.showPage()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fonts" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Courier',\n", " 'Courier-Bold',\n", " 'Courier-BoldOblique',\n", " 'Courier-Oblique',\n", " 'Helvetica',\n", " 'Helvetica-Bold',\n", " 'Helvetica-BoldOblique',\n", " 'Helvetica-Oblique',\n", " 'Symbol',\n", " 'Times-Bold',\n", " 'Times-BoldItalic',\n", " 'Times-Italic',\n", " 'Times-Roman',\n", " 'ZapfDingbats']" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Reportlab comes with a set of fonts\n", "c.getAvailableFonts()" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [], "source": [ "c.setFont('Courier', 72)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [], "source": [ "# Or you can import fonts\n", "from reportlab.pdfbase.ttfonts import TTFont, pdfmetrics\n", "\n", "fontpath = \"fonts/OSP-DIN.ttf\"\n", "font = TTFont('OSP-DIN', fontpath)\n", "pdfmetrics.registerFont(font)" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [], "source": [ "c.setFont('OSP-DIN', 72)" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "c.drawCentredString(105*mm, 50*mm, \"Hello :)!\")" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "c.showPage()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Colors" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [], "source": [ "# Choose a RGB/CMYK color\n", "\n", "# Fill-color\n", "c.setFillColorRGB(255,0,0)\n", "c.setFillColorCMYK(0,1,0,0)\n", "\n", "# Stroke-color\n", "c.setStrokeColorRGB(255,255,0)\n", "c.setStrokeColorCMYK(0,0,1,0)" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "# Or choose one of the embedded colors from Reportlab\n", "from reportlab.lib.colors import pink, magenta, red, blue\n", "\n", "c.setFillColor(magenta)\n", "c.setStrokeColor(red)" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [], "source": [ "c.setFont('OSP-DIN', 72)\n", "c.drawCentredString(105*mm, 50*mm, \"Hello :)!\")\n", "\n", "c.rect(105*mm, 150*mm, 50*mm, 50*mm, stroke=1, fill=1)" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [], "source": [ "c.showPage()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lines" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Text" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Images" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Save PDF" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [], "source": [ "c.save()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }