Recently, I’ve obtained the Professional Scrum Master certification. The preparation for the examination involved dissecting the official Scrum Guide. Scrum as a framework is well structured into principles, accountabilities, events, and artifacts with important relations between them. However, while going through the guide, I would have preferred to have numbered section heads to highlight the hierarchy of each section. This is a great opportunity to try editing a real-life PDF with a text editor such as vim.

The command-line tool qpdf provides a mode to decompress object streams in PDF to obtain a file that is editable with a regular text editor. Try

$ qpdf scrum-guide-2020.pdf --qdf scrum-guide-2020-qdf.pdf

The PDF file format and the commands encountered within the document are explained in the PDF Reference document (here version 1.4). The manual is surprisingly easy to read, and if you are familiar with PostScript it should be easy to perform small edits.

The first link is the original PDF of the scrum guide. The second PDF is a version obtained from qpdf that is editable with a text editor. This version is visually identical to the original PDF. The third link points to the edited version. A diff between the qdf and my version reveals my edits:

$ diff scrum-guide-2020-qdf.pdf scrum-guide-2020-edit.pdf

<   /Title (Scrum Definition)
>   /Title (1 Scrum Definition)


< [(S)4(c)-8(r)8(um)6( Def)8(in)5(it)-2(io)7(n)] TJ
> [(1 S)4(c)-8(r)8(um)6( Def)8(in)5(it)-2(io)7(n)] TJ


< [(Sc)7(rum)-7( )4(D)4(efi)-8(ni)-8(ti)-3(on)] TJ
> [(1 Sc)7(rum)-7( )4(D)4(efi)-8(ni)-8(ti)-3(on)] TJ


< 0.235 0.251 0.263 rg
< 0.235 0.251 0.263 RG
> 0 g
> 0 G

I’ve enumerated the section heads for the main sections in the main body, the table of contents on page two, and the PDF table of contents (/Title). The TJ operator puts text with kerning into the document. The characters are specified in parenthesis. The positive and negative numbers between the parenthesis are kerning adjustments.

Secondly, I’ve noticed that the text in the Transparency section is printed in gray and not black as the rest of the text. The original version used rg and RG operations to set an RGB color for this section. With my modifications, the PDF uses 0 g and 0 G to set 0% color on a gray scale, i.e., black.

Comparison between original and edited PDF