Version 1.10.0 of PyMuPDF supports PDF annotations. Among other things they can be extracted as images and also updated to some extent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # loop through annotations of a page, change their author,
# make them 10% larger and save an image as PNG file
import fitz
doc = fitz.open("some.pdf") # open the PDF
page = doc[n] # access page n (0-based)
annot = page.firstAnnot # get first annotation
matrix = fitz.Matrix(1.1, 1.1) # define matrix for scaling +10%
i = 0 # counter for file idents
# loop through the page's annotations
while annot:
pix = annot.getPixmap(matrix = matrix) # picture map for the annot
pix.writePNG("annot-%s.png" % (str(i),)) # save it as PNG
i += 1 # increase counter
d = annot.info # get annot's info dictionary
d["title"] = "Jorj X. McKie" # set author (= popup title)
annot.setInfo(d) # update info dict in annot
r = annot.rect * matrix # scale annot's rectangle
annot.setRect(r) # store rect back in annot
annot = annot.next # get next annot on page
# update PDF with the changes
doc.saveIncr()
# alternatively, save to a new file:
doc.save("some-updates.pdf")
|
PyMuPDF runs on Python versions 2.7 and 3.1 through 3.6, 32bit and 64bit, on Windows, Linux, Mac. For Windows, binaries exist if you want to avoid generating MuPDF yourself (required otherwise).