PDF Invoice and Packing Slip for WooCommerce
Generate professional PDF invoices, packing slips, and delivery notes for every WooCommerce order — automatically, in bulk, or on demand.
Quick Start
Get your first invoice generated in under a minute.
- Install and activate the plugin. WooCommerce must already be active — the plugin will not load without it.
- Go to WPWing → Invoice Settings in the WordPress admin menu.
- Open the Template tab. Upload your company logo and fill in your company name, address, and VAT/Tax ID.
- Open the General tab. Under Auto-generate invoice on status, tick the order statuses that should trigger automatic invoice creation — for example Processing.
- Open any existing order. The PDF Invoice by WPWing metabox appears in the right sidebar. Click Create next to Invoice.
- Click View to confirm the PDF renders correctly. Done.
General Settings
Found at WPWing → Invoice Settings → General tab.
| Setting | Default | Description |
|---|---|---|
| Next invoice number | 1 | The serial number assigned to the next invoice. Increase this if you are migrating from another plugin or need to align with an external accounting system. |
| Invoice number format | {number} |
Tokens: {number} = serial, {year} = 4-digit year, {month} = 2-digit month, {day} = 2-digit day. Example: INV-{number}/{year} produces INV-42/2026. |
| Invoice date format | d/m/Y |
Any valid PHP date format string. This controls how the date appears on the invoice itself. |
| Invoice due date (days) | 0 | Number of days after the order creation date before payment is due. Leave at 0 to hide the field. When set to any positive number, a "Payment due date" row appears on every invoice automatically. |
| Reset invoice number yearly | Off | When on, the serial counter resets to 1 on January 1 each year. Useful for compliance in some countries. |
| PDF button behaviour | Download PDF | Download PDF triggers a browser file download. Open in Browser renders the PDF inline in a new tab. |
| Paper size | A4 | Sets the physical page dimensions of every generated PDF. Choose A4 (210 × 297 mm) or Letter (216 × 279 mm). |
| Disable invoice for free orders | Off | When on, invoices are never created for orders with a zero grand total. Applies to both manual and automatic creation. |
| Auto-generate invoice on status | None | Tick the order statuses that should trigger automatic invoice creation (e.g. Processing, Completed). An invoice is created only once per order — subsequent status changes to a ticked status are ignored. |
| Auto-generate packing slip on status | None | Same as above but for packing slips. |
| Auto-generate delivery note on status | None | Same as above but for delivery notes. |
| Attach invoice PDF to emails | None | The invoice PDF is attached to the selected WooCommerce transactional emails. If no invoice exists yet it is automatically generated at send time. Options: Processing Order, Completed Order, Customer Invoice / Order Details, Order On-Hold. |
Template Settings
Found at WPWing → Invoice Settings → Template tab. Click Preview Invoice at any time to see how your current (unsaved) choices will look — the preview uses your most recent order.
| Setting | Default | Description |
|---|---|---|
| Invoice template | Default | Choose between Default (clean white layout) and Modern (dark navy accents). Both templates are print-ready. |
| Packing slip template | Default | Same choice applied independently to packing slips. |
| Delivery note template | Default | Same choice applied independently to delivery notes. |
| Show customer order note on delivery note | Off | Prints the note the customer entered at checkout in a shaded box on the delivery note. |
| Show QR code on invoice | Off | Prints a QR code on every invoice. Reveals the two QR settings below when enabled. The code is generated at PDF creation time - no external service is contacted. |
| QR code content | Order view URL | Order view URL encodes a link to the customer's order page in My Account - scanning the code opens the order. Custom text lets you encode your own content instead. |
| QR custom text | Empty | Used when QR code content is set to Custom text. Supports the placeholders {order_number} and {invoice_number} - for example Order {order_number}. |
| Show company name | Off | Displays your company name in the invoice header. Reveals the Company name text field when enabled. |
| Show company logo | Off | Displays an image in the top-right of the invoice header. Use the Upload Logo button to choose from the Media Library. Recommended size: no wider than 200 px and no taller than 100 px. |
| Show company details | Off | Reveals address, city, ZIP, country, phone, email, and VAT/Tax ID fields. Leave any field blank to omit it from the invoice. |
| Show notes | Off | Adds a shaded notes box to every invoice — useful for payment terms, bank details, or a thank-you message. |
| Show footer | Off | Adds a footer line at the bottom of every invoice page. |
| Show shipping address | Off | Prints the shipping address alongside the billing address when the two differ. |
| Show product SKU | Off | Adds a SKU column to the product line-items table. |
| Show customer order note | Off | Prints the note the customer entered at checkout in a shaded box below the product table. |
| Show tax breakdown | On | When on, each tax class (e.g. GST 10%, PST 7%) appears as its own row in the invoice totals. When off, a single combined Tax row is shown instead. |
| Custom CSS | Empty | Your own CSS rules, applied to the invoice, packing slip, and delivery note after the template styles - so your rules always win. Example: .company-name { font-size: 18px; }. Use the Preview Invoice button to test rules before saving. No template files need to be edited. |
Invoice
An invoice is a legally-numbered document recording the sale. It contains your company details, the customer's billing address, a product line-items table with quantities and prices, tax and discount lines, and the order total.
Creating an invoice
Open any order in WooCommerce. In the PDF Invoice by WPWing metabox on the right, click Create next to Invoice. The PDF is generated immediately and stored in the uploads folder.
Viewing and downloading
Once an invoice exists, click View in the metabox. Whether it downloads or opens inline depends on the PDF button behaviour setting.
Previewing as HTML
Click the small code icon next to the View button to open the invoice, packing slip, or delivery note as a plain HTML page in a new tab. This lets you check the layout instantly without generating a PDF - useful when fine-tuning a custom template.
Cancelling an invoice
Click Cancel (red button) in the metabox. This deletes the stored PDF and removes the invoice metadata from the order. The order itself is not affected — only the invoice document is removed. You can create a new invoice for the same order afterwards.
Packing Slip
A packing slip is an internal fulfilment document. It lists the items in the order and the shipping address — no prices, taxes, or totals. It is intended to travel with the shipment so the recipient can verify the contents.
Creating, viewing, and cancelling
The workflow is identical to invoices: use the Create, View, and Cancel buttons in the PDF Invoice by WPWing metabox, in the Packing Slip row.
Delivery Note
A delivery note is a price-free document made to travel with the parcel. It lists the ordered items with quantities and the shipping address — no prices, taxes, or totals — so the recipient can check the delivery against its contents. Optionally, the customer's checkout note can be printed on it.
Creating, viewing, and cancelling
The workflow is identical to invoices and packing slips: use the Create, View, and Cancel buttons in the PDF Invoice by WPWing metabox, in the Delivery Note row. Delivery notes can also be generated automatically (see Auto-Generation) or in bulk from the Orders list.
Auto-Generation
When an order transitions to a status you have ticked in the General Settings, the plugin automatically creates the corresponding document — no manual action required.
How it works
- The check fires on the
woocommerce_order_status_changedaction. - If an invoice (or packing slip, or delivery note) already exists for the order, a new one is not created — auto-generation is idempotent.
- If Disable invoice for free orders is on, free orders are skipped even if the status matches.
- Auto-generation and email attachment can both be active at the same time. Only one invoice is ever created per order regardless of how many triggers fire.
Email Attachments
The plugin can attach the invoice PDF automatically to outgoing WooCommerce transactional emails. Enable this under Attach invoice PDF to emails in the General tab.
| Sent when | |
|---|---|
| Processing Order | Order status changes to Processing (payment confirmed) |
| Completed Order | Order status changes to Completed |
| Customer Invoice / Order Details | Manually sent from the order edit page, or triggered by a status change for certain payment gateways |
| Order On-Hold | Order status changes to On-Hold (e.g. bank transfer awaiting payment) |
Invoice Numbers
Invoice numbers follow a configurable format using tokens. You set the format under Invoice number format in the General tab.
Available tokens
| Token | Replaced with | Example |
|---|---|---|
{number} | Sequential serial number | 42 |
{year} | 4-digit year of invoice date | 2026 |
{month} | 2-digit month of invoice date | 06 |
{day} | 2-digit day of invoice date | 15 |
Format examples
| Format string | Result (invoice 42, June 2026) |
|---|---|
{number} | 42 |
INV-{number} | INV-42 |
{year}-{number} | 2026-42 |
INV-{number}/{year}{month} | INV-42/202606 |
{year}/{month}/{number} | 2026/06/42 |
GET_LOCK) so two simultaneous orders can never receive the same number, even on busy stores.
Orders List & Bulk Actions
The WooCommerce → Orders list is the hub for working with many documents at once: generate or download in bulk, see invoice status at a glance, and find orders by invoice number.
Generating documents in bulk
Useful when migrating from another plugin or backfilling documents for existing orders.
- Go to WooCommerce → Orders.
- Select the orders you want to process using the checkboxes on the left.
- Open the Bulk actions dropdown and choose Generate Invoices, Generate Packing Slips, or Generate Delivery Notes.
- Click Apply. A summary notice will tell you how many documents were created and how many were skipped (because a document already existed).
Downloading documents in bulk
The same dropdown offers six download actions:
| Bulk action | What you get |
|---|---|
| Download Invoices (ZIP) | One ZIP archive containing each selected order's invoice as a separate PDF file. |
| Download Invoices (Merged PDF) | A single PDF with all selected invoices, one after another with page breaks - ready to print in one go. |
| Download Packing Slips (ZIP) | Same as above, for packing slips. |
| Download Packing Slips (Merged PDF) | Same as above, for packing slips. |
| Download Delivery Notes (ZIP) | Same as above, for delivery notes. |
| Download Delivery Notes (Merged PDF) | Same as above, for delivery notes. |
Any selected order that does not have the document yet gets one generated automatically before the download starts - you never have to generate first and download second.
Invoice status column
The orders list has an Invoice column: a green check mark means the order already has an invoice; a Create link generates one with a single click.
Search orders by invoice number
Type an invoice number into the search box above the orders list and the matching order appears - on both the classic and HPOS orders screens.
42), not the formatted number. If your format is INV-{number}/{year} and the invoice reads INV-42/2026, search for 42.
Customer Account
Customers can download their own invoices directly from their account, without needing to contact you.
Where the link appears
An Invoice button appears in the order actions column of the My Account → Orders table — but only for orders that already have an invoice. If no invoice has been generated yet, no button is shown.
Access control
Customers can only view invoices for their own orders. Attempting to access another customer's invoice URL will fail the ownership check. The PDF button behaviour setting (download vs. open) applies to customer downloads too.
Shortcode
Drop [wpwing_invoice] on any page or in any block that renders shortcodes to show a secure invoice download link.
Attributes
| Attribute | Default | Description |
|---|---|---|
order_id |
Auto-detected | The order to link to. When omitted, the shortcode detects the order from the page context: on the Thank You page it uses the order just placed, and on the My Account → View order page it uses the order being viewed. |
label |
Download Invoice | The link text. |
Examples
[wpwing_invoice]- auto-detects the order on the Thank You or View-order page.[wpwing_invoice label="Get your invoice (PDF)"]- custom link text.[wpwing_invoice order_id="1234"]- link to a specific order.
FAQ
Does the plugin work with WooCommerce HPOS (High-Performance Order Storage)?
Yes. The plugin is fully compatible with HPOS. All document metadata is stored using WooCommerce's order meta API, so it works correctly whether orders are stored in the traditional wp_posts table or in the newer HPOS custom tables. Bulk actions and the invoice status column on the Orders list work on both screens.
Can I customise the invoice template?
Yes. Copy the template folder from wp-content/plugins/wpwing-pdf-invoice-packing-slip-for-woocommerce/templates/{template-name}/ into your theme at wp-content/themes/{your-theme}/wpwing-wcpdf/{template-name}/. Edit the copied files freely. Plugin updates will never overwrite theme-level templates.
Where are the PDF files stored?
PDFs are saved to wp-content/uploads/wpwing-pdf-invoices/, organised by year and month. An .htaccess file (Apache) is written automatically on activation to prevent direct URL access. To serve a PDF you must use the plugin's View action, which checks permissions before streaming the file.
Why did my invoice number jump by more than 1?
This usually happens when both auto-generation on status and email attachment are active for the same order. Even though only one invoice is created per order, the number counter increments once for each attempted generation. Check your settings and ensure only one trigger is active for the same status if gapless numbering is required.
The PDF is blank or shows garbled characters — what do I do?
This is typically a font cache problem. The plugin detects and repairs a stale font cache automatically on the next generation, so first simply regenerate the document. If the problem persists, delete the folder wp-content/uploads/wpwing-pdf-fonts/ via FTP or your hosting file manager and regenerate again - the fonts will be re-registered. Also check that your server's PHP memory limit is at least 128 MB.
My currency symbol prints as an empty box — how do I fix it?
You don't have to - this is handled automatically. The plugin bundles a currency font covering every WooCommerce currency symbol, including ones missing from common PDF fonts such as the Bangladeshi Taka (৳), Georgian Lari (₾), and Cambodian Riel (៛). If you still see a box on an old invoice, it was generated by an older plugin version - cancel and recreate the invoice and the symbol will render correctly.
How can customers download their invoice from a custom page?
Use the [wpwing_invoice] shortcode. Place it on any page - it automatically detects the order on the Thank You page and in My Account, or accepts an explicit order_id attribute. See the Shortcode section for all options.
Can I reset all plugin settings?
Yes. At the bottom of the settings page there is a Reset all link. Click it and confirm the prompt. This deletes all saved settings — invoice number, company details, templates, and all other options. The stored PDF files and invoice metadata on orders are not affected.
How do I stop invoices being attached to a specific email type?
Go to WPWing → Invoice Settings → General tab, find Attach invoice PDF to emails, and uncheck the email type you want to exclude. Save changes. Future emails of that type will no longer include the PDF attachment.
Can I use a different invoice numbering sequence per year?
Enable Reset invoice number yearly in the General tab. On January 1 each year the serial counter automatically resets to 1. You can combine this with a year token in the format — for example {year}-{number} — so each year's invoices are clearly identifiable: 2025-199, 2026-1, 2026-2, etc.