Easy PDF Invoices for WooCommerce
Free PDF invoices, receipts, packing slips, and credit notes for WooCommerce. Auto-attach to emails, smart Invoice/Receipt distinction, HPOS native, zero bloat.Features

WooCommerce store owners shouldn't have to pay $54–99/year for the basics: invoices that attach to order emails, receipts that say "PAID", credit notes for refunds, and packing slips for fulfilment. Yet most options on the market either gate these features behind premium tiers or bundle bloat that slows your site down.
Easy PDF Invoices for WooCommerce is the PDF invoicing plugin WooCommerce should have shipped natively. It generates clean, branded invoices, receipts, packing slips, and credit notes, attaches them to order emails, and works the moment you activate it. No premium tier, no upsell, no Freemius, no third-party tracking. Free forever on WordPress.org.
Coming soon to WordPress.org
The plugin has been submitted to WordPress.org and is currently in review. Once approved, you'll be able to install it straight from your WordPress dashboard. Bookmark this page, or follow us on X and LinkedIn to hear the moment it goes live.
Why store owners choose this plugin
$order->is_paid() and labels the document correctly without you configuring anything.SELECT ... FOR UPDATE) so two orders placed at the same moment never share a number. Optimistic compare-and-set fallback for hosts without transaction support.get_post_meta() calls. No WP_Query on shop_order post type.Who is this for?
What you get out of the box
4 document types
Smart document resolution
The plugin reads order status and decides what to render:
| Order status | Document |
|---|---|
| Pending / On hold | Invoice (amount due) |
| Processing | Invoice (payment confirmed but not fulfilled) |
| Completed | Receipt (PAID badge) |
| Refunded | Credit note (REFUNDED badge) |
| Partial refund | Receipt with refund line item |
| Failed / Cancelled | No document generated |
You can override this mapping in settings if your business logic differs.
4 template variants, all included
Most paid competitors charge $54–99/year for additional templates. We ship four free.
Switch variants from the Branding tab. Override any variant in your theme at your-theme/easy-pdf-invoices/{variant}/{template}.php.
Auto-attach to WooCommerce emails
The plugin attaches the right document to the right email automatically:
Per-email toggles let you disable any of these. Choose between PDF attachment, download link in the email body, both, or neither. Position the link before or after the order table.
Customer downloads
A "Download invoice" / "Download receipt" / "Download credit note" button appears on three customer-facing surfaces:
Guest authentication uses the WooCommerce order key. Rate limiting blocks abuse (10 downloads per minute per identity, IP-hashed for privacy).
Sequential numbering done right
SELECT ... FOR UPDATE inside a transaction. Optimistic compare-and-set fallback for non-transactional engines.{YYYY}, {YY}, {MM}, {DD}. Example: INV-2026-000042.Admin tools
- Regenerate PDFs (inline up to 50 orders, Action Scheduler offload above).
- Download PDFs (ZIP) with on-the-fly ZIP creation, capped at 200 orders to avoid memory issues.
- Email invoices to customers using WooCommerce's native customer-invoice email.
REST API for headless and integrations
Three endpoints under /wp-json/epdi/v1/documents/:
GET /documents/{order_id} — invoice metadata.GET /documents/{order_id}/pdf — download the PDF binary.POST /documents/{order_id}/regenerate — force regeneration.Permission: manage_woocommerce capability. Disabled by default — enable it from Settings > Invoices > Advanced when you need it.
WooCommerce ecosystem compatibility
custom_order_tables compatibility. Uses WooCommerce CRUD methods exclusively.cart_checkout_blocks compatibility.switch_to_locale() based on order language meta. Restores after generation.wc_price(). Works with WOOCS, WPML, Aelia, and any plugin that sets order currency correctly.Privacy and security
isRemoteEnabled=false, isPhpEnabled=false, isJavascriptEnabled=false, chroot to ABSPATH.realpath() validation..htaccess, web.config, and index.php.Built for the long term
composer audit with no security advisories.How it compares
| Feature | Easy PDF Invoices | WP Overnight | WebToffee | Andrew Benbow |
|---|---|---|---|---|
| Price | Free forever | Free + $54–99/yr | Free + Premium | $79/yr |
| Smart Invoice/Receipt | Yes (auto) | No | No | No |
| PAID badge on receipts | Yes | No (free) | Premium | No |
| Credit notes | Free | Premium | Premium | No |
| Packing slips | Free | Free | Free | No |
| 4 template variants | Free | $54–99/yr | Premium | No |
| Sequential numbering with DB lock | Yes | Unknown | Unknown | Unknown |
| Single PDF library | DOMPDF only | DOMPDF | DOMPDF | 3 libraries |
| Plugin zip size | < 5 MB | ~8 MB | ~12 MB | ~60 MB |
| HPOS native | Yes (100%) | Yes | Yes | Partial |
| PHP 8.1+ strict types | Yes | No | No | No |
| REST API | Free | No | No | No |
| CSV export | Free | No | Premium | No |
| Subscriptions compat | Free | Premium | Premium | Partial |
| PHPStan level 8 ready | Yes | Unknown | Unknown | Unknown |
| Active development | Yes | Yes | Yes | Slow |
Frequently asked questions
Is this plugin really free?
Yes. Free forever, GPL v2+, no premium tier, no Freemius, no upsell. We make money on other premium plugins; this one stays free because PDF invoicing is a core need every WooCommerce store has.
Does it work with HPOS?
Yes. The plugin declares full compatibility with WooCommerce's High-Performance Order Storage and uses WooCommerce CRUD methods exclusively. No legacy get_post_meta() calls. Tested with HPOS enabled and disabled.
Does it work with the new Block Checkout?
Yes. The plugin declares compatibility with the cart and checkout blocks. No additional configuration needed.
Can I customise the template?
Yes. Switch between Modern, Classic, Minimal, and Thermal variants from the Branding tab. To go further, copy any template from easy-pdf-invoices-for-woocommerce/templates/ into your-theme/easy-pdf-invoices/ and edit it. Theme overrides survive plugin updates.
Does the PAID badge appear on every order?
The PAID badge appears only on receipts (orders that have transitioned to a paid status). Invoices for unpaid orders show the amount due instead. Credit notes show a REFUNDED badge.
What happens to my numbers if I deactivate the plugin?
Numbering, generated PDFs, and order meta are kept by default. Settings > Invoices > Advanced lets you choose "delete everything" if you'd prefer a clean uninstall.
Does it support RTL or CJK languages?
The base plugin includes DejaVu Sans, which covers Latin, Cyrillic, and Greek scripts. For Arabic, Hebrew, and CJK, install the upcoming companion plugin "Easy PDF Invoices mPDF", which swaps in mPDF and the appropriate fonts only when needed. We keep the main plugin lightweight for the 95% of stores that don't need RTL or CJK.
Does it work with WooCommerce Subscriptions?
Yes. Each renewal order earns a fresh invoice number — the plugin strips inherited PDF meta so renewals don't reuse the original order's number.
What about WPML and Polylang?
The plugin switches locale based on each order's language meta during PDF generation, then restores afterwards. Templates and labels render in the customer's language.
Is there a setup wizard?
Yes. After activation, a three-step wizard takes you from zero to working invoices in under 60 seconds: upload a logo, confirm company details (pre-filled from WooCommerce), add VAT number. Skip any step. The wizard is dismissible and never returns once dismissed.
Can I generate invoices for past orders?
Yes. Settings > Invoices > Advanced has a Backfill tool. Pick a date range and click run. The plugin queues each order via Action Scheduler so large batches don't time out.
Does it bundle three PDF libraries like the competition?
No. One library: DOMPDF 3.x. One font: DejaVu Sans. The plugin zip is under 5MB. We made this a hard design constraint because some bundled invoicing plugins ship at 50MB or more, and most stores never use the extra libraries.
Want to be notified when Easy PDF Invoices is live on WordPress.org? Bookmark this page, or follow us on X and LinkedIn for the launch announcement. The plugin is fully built, security-audited, and waiting on review approval.