Home/Products/Easy PDF Invoices for WooCommerce

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

Auto-generates PDFs on order status change
Smart Invoice/Receipt distinction (PAID badge)
Sequential numbering with database locking
Auto-attaches to WooCommerce order emails
Customer downloads from My Account
Credit notes for full or partial refunds
Packing slips for fulfilment
4 template variants: Modern, Classic, Minimal, Thermal
Theme template overrides
Bulk download as ZIP
Bulk regenerate and bulk email
Backfill PDFs for past orders
CSV export of invoice list
REST API endpoints
WooCommerce Subscriptions compatible
WPML and Polylang compatible
Multi-currency aware
HPOS native
Block Checkout compatible
PHPStan level 8, zero errors
Easy PDF Invoices for WooCommerce screenshot 1
Click to enlarge
1 / 10

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

  • Smart document type. Receipts show a PAID badge with payment date and method. Invoices show the amount due. Credit notes are auto-generated for refunds. The plugin reads $order->is_paid() and labels the document correctly without you configuring anything.
  • Sequential numbering that doesn't break. Tax-compliant numbering uses database row-level locking (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.
  • HPOS-native from day one. Built for WooCommerce's High-Performance Order Storage. No legacy get_post_meta() calls. No WP_Query on shop_order post type.
  • One PDF library, not three. Just DOMPDF (~2MB) and one bundled font (DejaVu Sans). The plugin zip is under 5MB. Some bundled invoicing plugins ship at over 50MB on disk.
  • Zero-config defaults. Activate it. Add a logo. You're done. Every setting is optional.
  • Native WooCommerce settings. Settings tab lives under WooCommerce > Settings > Invoices, uses SelectWoo dropdowns, the WP color picker, and the WordPress media library.
  • Who is this for?

  • Small to medium WooCommerce stores (10–500 orders/month) that want invoices that just work without touching code.
  • Stores with tax-compliance requirements that need sequential numbering, prefix/suffix formats, and annual reset support.
  • Agencies and developers setting up stores for clients who need a reliable, free, maintained invoicing solution they can recommend.
  • Stores migrating from older or unmaintained invoicing plugins that want a modern replacement with proper HPOS support and active maintenance.
  • Enterprise stores moving from Stripe Invoicing that need professional documents, bulk operations, and CSV export for accountants.
  • What you get out of the box

    4 document types

  • Invoice for orders awaiting payment. Shows amount due, payment terms, and your company details.
  • Receipt for completed orders. Includes a PAID badge with the payment date and method (e.g., "PAID on March 15, 2026 via Stripe").
  • Credit note for full or partial refunds. References the original invoice number and shows the refund total.
  • Packing slip for fulfilment. No prices, no tax, just product names, SKUs, quantities, and the ship-to address. Optional QR code for warehouse scanning.
  • Smart document resolution

    The plugin reads order status and decides what to render:

    Order statusDocument
    Pending / On holdInvoice (amount due)
    ProcessingInvoice (payment confirmed but not fulfilled)
    CompletedReceipt (PAID badge)
    RefundedCredit note (REFUNDED badge)
    Partial refundReceipt with refund line item
    Failed / CancelledNo 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.

  • Modern — Stripe-inspired clean layout. The default.
  • Classic — Formal serif (Times-Roman), centred title, headed-paper feel.
  • Minimal — Accountant-friendly, monospace numbers, hairline rules, single-line top header.
  • Thermal — 80mm POS receipt printer layout. Single column, monospace, compact spacing. Works for in-store retail receipts, kitchen tickets, pickup slips, and slap-and-ship labels.
  • 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:

  • Customer Processing Order → Invoice
  • Customer Completed Order → Receipt
  • Customer Refunded Order → Credit note
  • New Order (admin) → Invoice copy
  • 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:

  • My Account > Orders with the label adapted to the document type.
  • Order received (Thank You) page for both logged-in customers and guests.
  • Email body as an optional download link beside the order table.
  • 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

  • Atomic increment via SELECT ... FOR UPDATE inside a transaction. Optimistic compare-and-set fallback for non-transactional engines.
  • Configurable format: prefix, suffix, padding digits, start number.
  • Date placeholders in prefix and suffix: {YYYY}, {YY}, {MM}, {DD}. Example: INV-2026-000042.
  • Annual reset support, with year-change detection inside the same lock so the counter never skips or duplicates at year-end.
  • Separate sequences for invoices and credit notes.
  • Manual override with a confirmation dialog if you ever need to set the next number explicitly.
  • Live preview of the format in settings.
  • Admin tools

  • Invoice number column on the WooCommerce orders list (HPOS and legacy). Shows display number plus type label.
  • Quick "Download PDF" icon in the order row actions next to View / Complete.
  • Order edit metabox with document type, number, generation date, file size, and Download / Regenerate / Email customer buttons.
  • Bulk actions on the order list:
  • - 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.

  • Backfill tool under Settings > Invoices > Advanced. Generate PDFs for past orders within a date range. Queues each order via Action Scheduler.
  • CSV export of the invoice list with date range filter. UTF-8 BOM for Excel compatibility.
  • 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

  • HPOS native. Declares custom_order_tables compatibility. Uses WooCommerce CRUD methods exclusively.
  • Block Checkout. Declares cart_checkout_blocks compatibility.
  • WooCommerce Subscriptions. Strips inherited PDF meta from renewal orders so each renewal earns a fresh invoice number.
  • WPML and Polylang. Switches locale via switch_to_locale() based on order language meta. Restores after generation.
  • Multi-currency. Templates render each order in its own currency through wc_price(). Works with WOOCS, WPML, Aelia, and any plugin that sets order currency correctly.
  • Action Scheduler. Used for bulk operations above 50 orders. Bundled with WooCommerce, not duplicated.
  • Privacy and security

  • No telemetry. No phone-home. No tracking pixels. No CDN loads.
  • One optional external service, disabled by default: QR codes on packing slips. When enabled, the QR Server API generates the image and the result is cached locally for 12 hours. Disable it and no external calls happen.
  • Locked-down PDF engine. DOMPDF runs with isRemoteEnabled=false, isPhpEnabled=false, isJavascriptEnabled=false, chroot to ABSPATH.
  • Path traversal protection on every download via realpath() validation.
  • Capability + nonce + sanitised input on every admin action and every REST endpoint.
  • Random hash filenames prevent URL guessing. Storage directory protected with .htaccess, web.config, and index.php.
  • Built for the long term

  • PHP 8.1+ with strict types on every file.
  • PHPStan level 8 with zero errors.
  • WordPress Coding Standards with zero errors across 52 files.
  • WordPress Plugin Check with zero errors.
  • composer audit with no security advisories.
  • GPL v2+ licensed.
  • How it compares

    FeatureEasy PDF InvoicesWP OvernightWebToffeeAndrew Benbow
    PriceFree foreverFree + $54–99/yrFree + Premium$79/yr
    Smart Invoice/ReceiptYes (auto)NoNoNo
    PAID badge on receiptsYesNo (free)PremiumNo
    Credit notesFreePremiumPremiumNo
    Packing slipsFreeFreeFreeNo
    4 template variantsFree$54–99/yrPremiumNo
    Sequential numbering with DB lockYesUnknownUnknownUnknown
    Single PDF libraryDOMPDF onlyDOMPDFDOMPDF3 libraries
    Plugin zip size< 5 MB~8 MB~12 MB~60 MB
    HPOS nativeYes (100%)YesYesPartial
    PHP 8.1+ strict typesYesNoNoNo
    REST APIFreeNoNoNo
    CSV exportFreeNoPremiumNo
    Subscriptions compatFreePremiumPremiumPartial
    PHPStan level 8 readyYesUnknownUnknownUnknown
    Active developmentYesYesYesSlow

    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.

    FreeComing Soon on WordPress.org
    This plugin has been submitted to WordPress.org and is currently under review. It will be available for free download once approved.
    Latest version1.0.0
    Plugin Information
    PHP version8.1+
    WordPress6.4+
    WP tested up to6.9
    WC tested up to10.7
    Categories
    WooCommerceInvoicingPDFAccounting
    FreeComing Soon on WordPress.org
    This plugin has been submitted to WordPress.org and is currently under review. It will be available for free download once approved.
    Latest version1.0.0
    Plugin Information
    PHP version8.1+
    WordPress6.4+
    WP tested up to6.9
    WC tested up to10.7
    Categories
    WooCommerceInvoicingPDFAccounting