from __future__ import print_function import math import fitz """ @created: 2017-06-18 10:00:00 @author: (c) Jorj X. McKie Demo for creating simple graphics with method 'Page.drawLine()'. Dependencies: PyMuPDF, math License: GNU GPL 3+ Sketching a caustic. This is the figure the early morning sun paints onto your desperately needed cup of coffee from an angle on your left side ... """ def pvon(a): # starting point of one sun ray return(math.cos(a), math.sin(a)) def pbis(a): # end point of one sun ray return(math.cos(3*a - math.pi), (math.sin(3*a - math.pi))) # create new PDF with an empty square format page doc = fitz.open() doc.insertPage(-1, width = 800, height = 800) page = doc[0] # get the page just created # if you want a coffee background, use some picture reflecting your # preferred amount of milk. page.insertImage(page.rect, "coffee.jpg") # middle of the circle of the page mitte = fitz.Point(page.rect.width / 2, page.rect.height / 2) # radius leaves a border of 20 pixels radius = page.rect.width / 2 - 20 # how many sun rays we paint count = 200 interval = math.pi / count color = (1, 1, 0) # this is plain yellow for i in range(1, count): a = -math.pi / 2 + i * interval von = fitz.Point(pvon(a))*radius + mitte # start point adjusted bis = fitz.Point(pbis(a))*radius + mitte # end point adjusted page.drawLine(von, bis, width = 0.5, color = color) doc.save("caustic.pdf", garbage = 4, deflate = True)