Chat GPT4 makes graph paper!

It does take an extra step, but it figured it out in python!

The Prompt:
Please write a python script using fpdf that will output a file “my-grid.pdf” which is a landscape a4 pdf file with a background color of dark purple, and has a border of at least 2cm. In the remaining space, figure out how many 1cm x 1cm squares would best fill the remaining space, and build a 1cm x 1cm grid with thin white lines. Do not draw partial squares.

The Code:
from fpdf import FPDF

# Constants
A4_WIDTH = 297 # Width of A4 paper in mm (landscape)
A4_HEIGHT = 210 # Height of A4 paper in mm (landscape)
BACKGROUND_COLOR = (41, 31, 88) # Dark purple
BORDER_WIDTH = 20 # 2cm border width
GRID_SIZE = 10 # 1cm x 1cm squares
GRID_COLOR = (255, 255, 255) # White

# Initialize PDF
pdf = FPDF("L", "mm", "A4")
pdf.set_auto_page_break(False)
pdf.add_page()

# Set background color
pdf.set_fill_color(*BACKGROUND_COLOR)
pdf.rect(0, 0, A4_WIDTH, A4_HEIGHT, "F")

# Calculate grid dimensions
grid_width = A4_WIDTH - 2 * BORDER_WIDTH
grid_height = A4_HEIGHT - 2 * BORDER_WIDTH
grid_columns = grid_width // GRID_SIZE
grid_rows = grid_height // GRID_SIZE

# Draw grid
pdf.set_draw_color(*GRID_COLOR)
pdf.set_line_width(0.3) # Thin lines

for row in range(grid_rows + 1):
y = BORDER_WIDTH + row * GRID_SIZE
pdf.line(BORDER_WIDTH, y, BORDER_WIDTH + grid_columns * GRID_SIZE, y)

for col in range(grid_columns + 1):
x = BORDER_WIDTH + col * GRID_SIZE
pdf.line(x, BORDER_WIDTH, x, BORDER_WIDTH + grid_rows * GRID_SIZE)

# Save PDF
pdf.output("my-grid.pdf")

And the final PDF output (after the script is run locally)

  1. my-grid

If you run into problems at any step of the way, paste your errors into ChatGPT, and it’ll help you out!