Signing a PDF with early versions of iText was something akin to rocket science: the code had to do a lot of stuff which was hard to understand unless one knew all the ins and outs of PDF signatures at byte level. Consequently, many “examples” and “tutorials” with code a) barely understood and b) not at all explained were published on the web.
During the 5.3.x versions of iText a higher level signing API was introduced, hiding those magical details and only requiring the knowledge necessary for arbitrary digital signature tasks. Additionally Bruno Lowagie published a free e-book on digitally signing PDFs with this new API, which even nowadays is an interesting read, see <https://itextpdf.com/resources/books/digital-signatures-pdf>. But all the examples and tutorials based on the original signing API were still around and their code was integrated into many projects the current maintainers don’t dare to touch.
iText version 7 essentially copied the higher level API with minor adaptations, all the while trying to make the underlying low-level API less accessible. This of course means that said projects based on the old API are difficult to port to iText 7+.
iText version 8 then improved the API a bit to allow for direct support for additional cryptographic algorithms.
To make porting old signing solutions and creating new ones from scratch easier, this series of articles describes the iText high level signing API and provides examples for using it with many kinds of signing devices currently in use.
Each of the chapters linked below go into detail on specific aspects and use cases for digitally signing PDFs, with handy examples for both Java and .NET (C#). So, grab yourself a coffee (or your beverage of choice) and dive in!