import fitz # import PyMuPDF doc = fitz.open("some.pdf") # or new: fitz.open(), followed by insertPage() page = doc[n] # choose some page rect = fitz.Rect(50, 100, 300, 400) # rectangle (left, top, right, bottom) in pixels text = """This text will only appear in the rectangle. Depending on width, new lines are generated as required.\n<- This forced line break will also appear.\tNow a very long word: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.\nIt will be broken into pieces.""" rc = page.insertTextbox(rect, text, fontsize = 12, # choose fontsize (float) fontname = "Times-Roman", # a PDF standard font fontfile = None, # could be a file on your system align = 0) # 0 = left, 1 = center, 2 = right print("unused rectangle height: %g" % rc) # just demo (should display "44.2") doc.saveIncr() # update file. Save to new instead by doc.save("new.pdf",...)