Pillow PSDraw Module

PSDraw is a module in the Python Pillow library, specifically used for generating drawing files in PostScript format.

PostScript is a page description language and programming language, widely used in desktop publishing and printing.

The PSDraw module allows you to:

  • Create vector graphics
  • Draw basic shapes (lines, rectangles, circles, etc.)
  • Add text content
  • Control page layout and format

Import method:

from PIL import PSDraw

Main Methods of the PSDraw Module

The following are the commonly used methods in the PSDraw module and their descriptions:

Method Description Parameters Return value
PSDraw.begin_document() Start a new PostScript document None None
PSDraw.end_document() End the current PostScript document None None
PSDraw.setfont(font, size) Set text font and size font: font name
size: font size (points)
None
PSDraw.text(position, text) Draw text at the specified position position: (x,y) coordinates
text: the text to draw
None
PSDraw.line(from_pos, to_pos) Draw a straight line from_pos: starting point coordinates
to_pos: ending point coordinates
None
PSDraw.rectangle(box) Draw a rectangle box: (x0,y0,x1,y1) coordinates None
PSDraw.setink(color) Set drawing color color: color value (RGB tuple or color name) None
PSDraw.setfill(onoff) Set whether to fill shapes onoff: boolean value (True/False) None

Basic Usage Examples

Creating a Simple PostScript Document

Example

from PIL import PSDraw

# Create PSDraw object
ps = PSDraw.PSDraw()  # Default output to standard output

# Start document
ps.begin_document()

# Set font
ps.setfont("Helvetica", 12)

# Draw text
ps.text((100, 100), "Hello, PostScript!")

# Draw a line
ps.line((100, 120), (200, 120))

# Draw a rectangle
ps.rectangle((100, 150, 200, 200))

# End document
ps.end_document()

Output to File

Example

from PIL import PSDraw

# Create file output
with open("output.ps", "wb") as f:
    ps = PSDraw.PSDraw(f)
   
    # Set page size (A4)
    ps.begin_document("A4")
   
    # Set color to red
    ps.setink("red")
   
    # Draw filled rectangle
    ps.setfill(True)
    ps.rectangle((100, 100, 300, 200))
   
    # End document
    ps.end_document()

Advanced Features

Coordinate System

PSDraw uses PostScript's default coordinate system, with the origin (0,0) at the lower-left corner of the page, x-axis increasing to the right, and y-axis increasing upward. The coordinate unit is the point (1 point = 1/72 inch).

Graphics Transformation

Although PSDraw does not directly provide transformation methods, you can achieve translation, rotation, and scaling through PostScript commands:

Example

ps.text((100, 100), "gsave 45 rotate Hello, World! grestore")

Custom PostScript Commands

PSDraw allows you to directly insert raw PostScript commands:

Example

ps.text((0, 0), "% Custom PostScript commands\n/showpage {} def")

Notes

  1. The PSDraw module is mainly used to generate PostScript files, not to display graphics.
  2. The generated PostScript files can be viewed with Ghostscript or other PostScript interpreters.
  3. Some complex graphics operations may require directly using PostScript commands.
  4. For modern applications, consider using more modern vector graphics formats such as SVG.

By mastering the PSDraw module, you can easily generate high-quality PostScript documents in Python, suitable for printing and professional publishing needs.

Other Extensions