#!/usr/bin/python3

import qrcode
import io
import fitz  # PyMuPDF

fitz.TOOLS.set_aa_level(0)  # set anti-aiasing level to 0
margin = 20  # ensure QR rect keeps this distance from page border

def make_qrcode():
	qr = qrcode.QRCode(
		version=1,
		error_correction=qrcode.constants.ERROR_CORRECT_L,
		box_size=10,
		border=4,
	)
	qr.add_data("Some data")
	qr.make(fit=True)

	img = qr.make_image(fill_color="black", back_color="white")
	fp = io.BytesIO()
	img.save(fp, "PNG")
	return fp

stream = make_qrcode()  # QR code as PNG image in memory

doc = fitz.open("input.pdf")

for page in doc:
	w = page.rect.width  # width of this page
	left = w - 240 - margin
	rect = fitz.Rect(left, margin, left + 240, margin + 240)  # top right square
	page.insert_image(rect, stream=stream)

doc.save("output.pdf", deflate=True, garbage=3)