Get Plugin

Settings

Settings Reference

Every setting in Easy PDF Invoices for WooCommerce, organised by tab. The settings live under WooCommerce > Settings > Invoices and use native WooCommerce field types (SelectWoo, the WP color picker, the WordPress media library).

All settings are stored in a single consolidated epdi_settings option. Sequential counters live in their own option rows for atomic updates.

General tab

Enable PDF generation

Master switch. Disable to stop the plugin from generating PDFs without deactivating it.

  • Default: Enabled

Document type mode

Controls how the plugin decides Invoice vs Receipt vs Credit Note.

  • Auto (recommended) — uses order status: refunded → credit note, paid → receipt, otherwise invoice.
  • Always Invoice — every order generates an Invoice regardless of payment status.
  • Always Receipt — every order generates a Receipt with PAID badge.
  • Default: Auto

Paper size

PDF paper size for non-thermal templates.

  • A4 — 210 × 297 mm.
  • Letter — 8.5 × 11 inches.
  • Auto-detect from store country — Letter for US/CA, A4 elsewhere.
  • Default: Auto-detect
The Thermal template variant always renders at 80 × 297 mm and ignores this setting.

Date format

How dates render in PDF documents.

  • WordPress default — uses get_option('date_format').
  • Custom — pick from a date format picker (e.g., j F Y, Y-m-d, n/j/Y).
  • Default: WordPress default

Language

PDF language source.

  • Inherit from WordPress — uses the site language at the time of generation.
  • Override — pick a specific locale.
  • Default: Inherit
For multilingual stores, see Compatibility > WPML and Polylang — per-order language is handled automatically when those plugins are active.

Branding tab

Company logo

Click Upload logo to open the WordPress media library.

  • Recommended: 600 × 200 px PNG or JPG at 72 dpi.
  • Appears on every document except Minimal (text-only by design).
  • Default: empty (uses WooCommerce store logo if set, otherwise the site logo).

Template variant

Pick from four bundled variants.

  • Modern — Stripe-inspired, clean, sans-serif. Default.
  • Classic — formal serif, centred title.
  • Minimal — accountant-friendly, monospace numbers.
  • Thermal — 80mm POS receipt printer layout.
See Templates & Branding for variant details and theme override instructions.

Accent colour

Used for document title underline, grand total row, and PAID badge background.

  • Default: #2c3338

Footer text

Free-text footer that appears at the bottom of every document. Plain text only — line breaks are preserved, HTML is stripped.

  • Default: empty

QR code on packing slips

Off by default. When enabled, a QR code image is fetched from the QR Server API and embedded in every packing slip. The encoded payload is the order edit URL (admin-side) for warehouse scanning.

Tax/VAT number

Your store's VAT or sales tax registration number. Appears on every document.

  • Default: empty

Company registration number

Companies House number, EIN, IRD, or whatever your jurisdiction requires.

  • Default: empty

Registered name

If different from the company name on the Branding tab.

  • Default: empty (uses Company name from Branding)

Registered address

If different from the company address.

  • Default: empty (uses WooCommerce store address)

Terms and conditions

Free-text terms that appear on invoices only (not receipts or credit notes). Use this for payment terms, late fees, or any contractual language.

Plain text. Line breaks preserved.

  • Default: empty

Numbering tab

Invoice numbering

Format preview

A live preview of the next invoice number, updating as you change the fields below.

Prefix

Free text before the number. Date placeholders supported: {YYYY}, {YY}, {MM}, {DD}.

  • Default: INV-

Suffix

Free text after the number.

  • Default: empty

Padding digits

Number of digits to pad the sequential number with leading zeros (1–10).

  • Default: 6 (e.g., 000042)

Start number

The first number to use.

  • Default: 1

Annual reset

When on, the counter resets to Start number on the first order of each calendar year. Combined with the {YYYY} placeholder, this produces year-scoped sequences.

  • Default: Off

Next number display + manual override

Shows the number that will be assigned to the next invoice. Click Override to set a specific value with a confirmation dialog.

The override has a uniqueness check — you can't set it to a number already in use by an existing order. Use carefully; setting the next number lower than already-issued numbers can break tax compliance.

Credit note numbering

Same fields as invoice numbering, but for credit notes. Independent counter so credit note numbers don't collide with invoice numbers.

  • Default prefix: CN-

Emails tab

Per-email toggles

Toggle attachment on or off for each WooCommerce email type:

EmailDefault
Customer Processing OrderOn
Customer Completed OrderOn
Customer Refunded OrderOn
Customer Partially Refunded OrderOn
Customer Invoice / Order DetailsOff
New Order (admin)On
Scroll to see all columns →
Toggling off means the PDF is neither generated for that email nor attached.

Attachment method

Controls how the PDF gets to the customer.

  • Attachment — file attached to the email.
  • Link — download link in the email body, no attachment.
  • Both — file attached and link in the body.
  • None — neither.
  • Default: Attachment

Download link position

When the attachment method is link or both, controls where the link appears in the email body.

  • Before order table — top of the body.
  • After order table — bottom of the body.
  • Default: After order table

Advanced tab

PDF storage directory

Filesystem path where generated PDFs are stored.

  • Default: wp-content/uploads/easy-pdf-invoices/
  • Each PDF lives in a year/month subdirectory: easy-pdf-invoices/2026/04/.
  • Filenames include a random hash to defeat URL guessing.
  • Directory is created on activation with .htaccess, web.config, and index.php to block direct access.
You can override this via the epdi_storage_dir filter, but this is rarely needed.

Auto-cleanup old PDFs

Delete PDF files older than X days. The plugin can regenerate them on demand if a customer downloads later.

  • 0 = never (default).
  • Useful for stores with strict storage budgets and high order volume.

Enable REST API

Off by default. When on, three endpoints become available under /wp-json/epdi/v1/documents/:

  • GET /documents/{order_id} — invoice metadata.
  • GET /documents/{order_id}/pdf — PDF binary.
  • POST /documents/{order_id}/regenerate — force regeneration.
All endpoints require the manage_woocommerce capability. See REST API for the full spec.
  • Default: Disabled

Debug mode

When on, the plugin logs info events to WooCommerce > Status > Logs under the easy-pdf-invoices source: number assignments, PDF generation, attachments, downloads.

By default, only errors are logged.

  • Default: Disabled

Uninstall behaviour

What happens when the plugin is deleted from the Plugins screen.

  • Keep data — counters, settings, order meta, and PDF files are preserved. Reinstalling restores everything.
  • Delete everything — counters, settings, order meta, and PDF files are removed.
The uninstall.php script honours this setting.
  • Default: Keep data

Tools panel

The Advanced tab also exposes admin tools as form embeds:

CSV export

Filter by date range and document type, then download as CSV with UTF-8 BOM (Excel-friendly).

Backfill past orders

Generate PDFs for past orders within a date range. Optional Force checkbox regenerates existing PDFs too.

Backfill queues each order via Action Scheduler. Monitor progress under Tools > Scheduled Actions.

See Admin Tools for full documentation on these tools.

Programmatic access

Read settings:

$settings = get_option( 'epdi_settings', array() );
$prefix   = $settings['numbering']['invoice_prefix'] ?? 'INV-';

Or use the SettingsRepository facade for typed access:

$repo   = \EasyPDFInvoices\Settings\SettingsRepository::instance();
$prefix = $repo->get( 'numbering.invoice_prefix', 'INV-' );
$enabled = $repo->is_enabled( 'enable_pdf_generation' );

Update settings (use sparingly — prefer the settings UI):

$repo->update( 'branding.accent_color', '#0073aa' );

Defaults summary

The full default settings array on a fresh install:

array(
    'enable_pdf_generation' => 'yes',
    'document_type_mode'    => 'auto',
    'paper_size'            => 'auto',
    'date_format'           => 'wordpress',
    'language'              => 'inherit',
    'branding' => array(
        'logo_id'           => 0,
        'company_name'      => '', // falls back to WC store name
        'company_address'   => '', // falls back to WC store address
        'template_variant'  => 'modern',
        'accent_color'      => '#2c3338',
        'footer_text'       => '',
        'qr_on_packing'     => 'no',
    ),
    'legal' => array(
        'tax_number'         => '',
        'registration_number'=> '',
        'registered_name'    => '',
        'registered_address' => '',
        'terms_text'         => '',
    ),
    'numbering' => array(
        'invoice_prefix'  => 'INV-',
        'invoice_suffix'  => '',
        'invoice_padding' => 6,
        'invoice_start'   => 1,
        'invoice_annual_reset' => 'no',
        'credit_prefix'   => 'CN-',
        'credit_suffix'   => '',
        'credit_padding'  => 6,
        'credit_start'    => 1,
        'credit_annual_reset' => 'no',
    ),
    'emails' => array(
        'attach_to_new_order'         => 'yes',
        'attach_to_processing'        => 'yes',
        'attach_to_completed'         => 'yes',
        'attach_to_refunded'          => 'yes',
        'attach_to_partially_refunded'=> 'yes',
        'attach_to_customer_invoice'  => 'no',
        'attachment_method'           => 'attachment',
        'download_link_pos'           => 'after',
    ),
    'advanced' => array(
        'storage_dir'         => '', // computed at runtime
        'auto_cleanup_days'   => 0,
        'rest_api_enabled'    => 'no',
        'debug_mode'          => 'no',
        'uninstall_behaviour' => 'keep',
    ),
);