Annotate PDFs⚓︎
PyPDFForm supports adding non-form-field annotations to PDFs.
This section uses this PDF as an example.
Understanding the PDF coordinate system is necessary for this section.
In the library examples, optional parameters are marked with an # optional comment.
Create text annotations⚓︎
Text annotations appear as sticky notes on a PDF.
Use the PdfWrapper.annotate method and pass a list of annotations:
from PyPDFForm import Annotations, PdfWrapper
annotations = [
Annotations.TextAnnotation(
page_number=1,
x=310,
y=663,
contents="this is an annotation", # optional
title="First Annotation", # optional
),
Annotations.TextAnnotation(
page_number=2,
x=310,
y=672,
contents="this is another annotation", # optional
title="Second Annotation", # optional
icon=Annotations.TextAnnotation.comment_icon, # optional (1)
),
]
pdf = PdfWrapper("sample_template.pdf").annotate(annotations)
pdf.write("output.pdf")
- The default icon is
note_icon. Other options arecomment_icon,help_icon,key_icon, andinsert_icon.
Use the create annotation command with a JSON file that contains a text array:
Create link annotations⚓︎
A link annotation opens a destination when clicked. The destination can be a URI or another page in the same PDF.
The following snippet creates a link annotation over the text TEST PDF TEMPLATE that opens https://www.google.com/:
The following snippet creates a link annotation over the text TEST PDF TEMPLATE that jumps to the second page of the PDF:
Use the create annotation command with a JSON file that contains a link array. Each link must include exactly one of uri or page. The command example uses uri.json; replace it with page.json to create a link to another page.
Create text markup annotations⚓︎
There are four types of text markup annotations: highlight, underline, squiggly, and strikeout. To create them, specify the coordinates and dimensions for the bounding box:
Use the create annotation command with a JSON file whose top-level key matches the markup type. The command example uses highlight.json; replace it with the file for the markup type you want.
Create rubber stamp annotations⚓︎
Note
Currently, Chromium-based browsers have trouble rendering rubber stamp annotations correctly.
A rubber stamp annotation places stamp text or graphics on the page. PyPDFForm supports a collection of predefined rubber stamps you can use to annotate PDFs:
from PyPDFForm import Annotations, PdfWrapper
pdf = PdfWrapper("sample_template.pdf").annotate(
[
Annotations.RubberStampAnnotation(
page_number=1,
x=70,
y=720,
width=95,
height=20,
name=Annotations.RubberStampAnnotation.approved, # optional (1)
)
]
)
pdf.write("output.pdf")
- Supported stamp names are
approved,experimental,not_approved,as_is,expired,not_for_public_release,confidential,final,sold,departmental,for_comment,top_secret,draft, andfor_public_release.