At the moment there are quite a few softwares (mostly paid) that allow you to manipulate PDF files as they are sold online. Some even allow you to add identifying customer data to the PDF in order to copyright, encrypt and password intellectual property. Currently the Wordpress plugin scene includes three main routes for PDF manipulation.
Risking simplifying things to a degree and possibly excluding outliers on the market, most products for Wordpress will use these three library sets:
- Option 1: TCPDF (using TCPDI as a parser)
- Option 2: FPDF (using FPDI as a parser)
- Option 3: SetaPDF Stamper
The only watermarkers currently using Option 1 are WaterWoo for WooCommerce, EDDiMark for Easy Digital Downloads and WP TCPDF Bridge for Wordpress general use.
Watermarkers using Option 2 include WooCommerce PDF Watermark from WooCommerce, the Ignite WooCommerce PDF Watermark Stamper, and Tips & Tricks’ WP PDF Stamper.
The only watermarkers using Option 3 are WooStamper, EDDiStamper, and Download Monitor Stamper.
Because there are constant questions about the differences between the options, and what they can and cannot do, I’d like to write again and perhaps clarify what I have written in the past. Follow along as I discuss these three options.
Option 1: TCPDI/TCPDF
This library set performs as well as the free version of FPDI/FPDF, if not better, because it allows for manipulations of all versions of PDF, not just older versions. The free version of FPDI only works with PDFs version 1.4 or older. This is a major limitation of watermarkers using Option 2.
On the other hand, development of the only stable versions of TCPDI and TCPDF have stalled. A new version of TCPDF is anticipated; however, that doesn’t help us very much if TCPDI isn’t also finessed.
After finding FPDI/FPDF essentially incompatible with what I was trying to offer my users and customers, I switched to TCPDF several years ago. No regrets.
Option 2: FPDI/FPDF
I’ve discussed limitations of Option 2 a little bit in the previous paragraphs. The free version of FPDI doesn’t watermark newer PDFs. That’s a major deal. Hardly anyone knows how to make a semantic PDF these days, much less find out which version it is or convert it!
The benefits of using FPDI/FPDF is that the code is regularly maintained. Other than that, FPDI also has the same limitation as TCPDI: neither can read PDF recursive objects into memory which have to do with complex PDF features such as internal links (Table of Contents [TOC] for example) or PDF forms.
Please note if a Wordpress plugin claims to preserve a PDF’s integrity including internal links and uses FPDI, the plugin authors are violating GPL and the FPDI author’s license as well. Two words: not cool.
In this way, neither Option 1 nor Option 2 are favorable for someone serious about the integrity of their PDFs. Option 3 might cost more money, but it’s just worth it.
Option 3: SetaPDF-Stamper
From the same company that created FPDI comes a code library called SetaPDF-Stamper. This library allows you to manipulate PDFs similarly to Option 1 or Option 2; however, it uses an entirely different method which rather than re-writing a PDF from memory, simply adds to the PDF. Many more (malformed, newer, linearized, incremented) PDFs will pass muster while using SetaPDF-Stamper, and PDFs will retain their original state: forms, layers, TOCs, etc. will all be left alone.
Again, I consider this the best, smartest option. Anyone who can afford to purchase and implement this library should choose it. A lot of headache can be avoided: timeouts while parsing PDFs into memory using (TCPDI/FPDI), PDF-parsing failures, and PDF feature loss (to name a few huge headaches).
Currently options for integrating SetaPDF into a Wordpress site include WooStamper for WooCommerce, EDDiStamper for Easy Digital Downloads, and Download Monitor Stamper. To make the choice a little easier, the purchase of one of these three SetaPDF-Stamper bridge plugins from Little Package includes a 20% off coupon for Seta-PDF Stamper.
I hope this helps you make more sense of the plugin market and make decisions. Thanks for reading!