Plugin Directory

Test out the new Plugin Directory and let us know what you think.

WooCommerce PDF Invoices & Packing Slips

Create, print & automatically email PDF invoices & packing slips for WooCommerce orders.


  • Feature: new template action hooks wpo_wcpdf_before_document & wpo_wcpdf_after_document
  • Tweak: In totals, emphasize order total rather than last item
  • Fix: User deprecation notices
  • Translations: Updated Slovenian


  • Fix: Thumbnail path fallback
  • Fix: Edge/IE hour & minute pattern
  • Fix: Skip over non-order objects
  • Tweak: Let shop manager view My Account links
  • Dev: added wpo_wcpdf_before_attachment_creation action
  • Translations: Updated POT, Swedish, Dutch & Norwegian


  • Feature: Added support for third party invoice numbers
  • Feature: Enable pre-invoice number click-to-edit
  • Fix: Review link for custom admins
  • Fix: PHP7 compatibility
  • Fix: Invoice date hour/minute pattern
  • Tweak: Multisite WooCommerce check optimization


  • Translations: Fixed Romanian (incorrect "Factură Proforma" translation for "Invoice")


  • Translations: Fixed "Includes %s" string for WC2.6+


  • Fix: Document check that was introduced in 1.5.33 for disable free setting


  • Tweak: Don't apply 'disable free' setting to packing slip attachment
  • Translations: Updated Romanian


  • Fix: Updated currency font with Indian Rupee symbol
  • Translations: added Formal German (currently a copy of informal German)


  • Feature: [invoice_day] or [order_day] in invoice number format
  • Fix: Link to hide all ads when premium extensions active


  • Feature: Enable currency font for extended currency support
  • Fix: Font sync on plugin update


  • Translations: Added Croation (Thanks Neven/Spine ICT!), updated French (Thanks Sabra!)
  • Tweak: filter shop address before checking if it's empty
  • Dev: added $order to wpo_wcpdf_template_file filter


  • Tweak: the 'Next invoice number' is now stored separately in the database for faster and more reliable retrieval. Circumventing any caching, this should prevent duplicate invoice numbers.
  • Fix: Bulk actions plugin conflicts
  • Experimental: page numbers (use {{PAGE_NUM}} / {{PAGE_COUNT}} in your template)


  • Feature: Use [invoice_year] and [invoice_month] placeholders in invoice number prefix/suffix
  • Feature: WooCommerce Order Status & Actions Manager emails compatibility
  • Feature: Add invoice number to WC REST API
  • Fix: Allow positive 'discounts' (price corrections)
  • Fix: Discounts rounding
  • Translations: Updated Finnish & Portugese & POT


  • Feature: Automatically list all emails registered in WooCommerce
  • Feature: Reset invoice number yearly
  • Feature: WooCommerce Chained Products compatibility
  • Feature: WooCommerce Product Bundles visibility settings taken into account in invoice
  • Fix: Disable PDF creation from trashed order_ids
  • Tweak: Alert when no orders selected for bulk export (Props to Dartui!)
  • Tweak: PDF invoice settings always under WooCommerce menu (also for premium users)
  • Tweak: extra $item_id passed in row class filter
  • Translations: Updated Slovenian, Spanish, Dutch & POT file


  • Hotfix: Subscriptions renewal filter arguments


  • Fix: WooCommerce Subscriptons 2.0 deprecation notice.
  • Tweak: better qTranslate-X support
  • Tweak: filter for user privileges check (wpo_wcpdf_check_privs)
  • Translations: French translations fix


  • Fix: Workaround for bug in WPML (which cleared all settings)
  • Translation: fixed Polish translation for invoice


  • Translations: Added Estionan (thanks Tanel!)
  • Tweak: WC2.4 compatibility


  • Feature: Option to 'never' display My Account invoice link
  • Fix: Order total for refunds in WC2.4
  • Fix: notice when no custom statuses selected for My Account display
  • Tweak: Product bundles styles


  • Fix: Invoice number search (broke other custom searches)


  • Fix: wpo_wcpdf_item_row_class packing slip filter arguments


  • Feature: WooCommerce Product Bundles compatibility styles
  • Tweak: wpo_wcpdf_item_row_class as filter instead of action


  • Feature: Search orders by invoice number (note: search on formatted invoice number only works for new orders)
  • Feature: Formatted invoice number stored in order
  • Tweak: Function parameters added to some of the filters
  • Tweak: WooCommerce 2.4 compatibility
  • Dev feature: action to add class to items table row (wpo_wcpdf_item_row_class)
  • Translations: Swedish updated (thanks Conney!)
  • Translations: Norwegian updated


  • Fix: invoice number padding didn't work for values lower than 3
  • Tweak: WPML compatibility filter
  • Translations: Updated French (Thanks Nicolas!)


  • Tweak: Invoice number & date edit fields moved to separate box on order edit page
  • Translations: Updated POT & Dutch


  • Fix: Better address comparison to determine when to display alternate address
  • Tweak: Filter N/A addresses
  • Tweak: Use WooCommerce function for 2.3 discounts
  • Translations: Czech Updated (Thanks Ivo!)
  • Translations: French (minor fixes)


  • Translations: added Danish, Updated POT & Italian


  • Fix: Product text attributes (now checks key too)
  • Fix: Status page upload explanation typos


  • Fix: Double check to make sure plugin doesn't attach to user emails


  • Feature: Shorthand function to display product attributes: $wpo_wcpdf->get_product_attribute( $attribute_name, $product )


  • Feature: disable invoice for free orders
  • Feature: action to insert data before & after item meta
  • Tweak: Added classes to sku & weight
  • Tweak: Hide payment method from totals (already shown in template)
  • Translations: Updated POT & Dutch


  • Feature: Setting to show email address & phone number on invoice or packing slip (does not work on custom templates based on previous versions!)


  • Feature: Setting to show shipping address on invoice (does not work on custom templates based on previous versions!)
  • Feature: My Account invoice download setting
  • Feature: several new template actions
  • Tweak: WooCommerce Bookings compatibility
  • Tweak: Gerenal stylesheet cleanup
  • Fix: temp path check/error on settings page
  • Fix: Document titles for credit notes and proforma (Pro)
  • Fix: Discount including tax
  • Fix: Special characters on item meta (requires WooCommerce 2.3.6)
  • Translations: Missing text domain on several strings
  • Translations: Updated POT & Dutch


  • Fix: Check for incomplete line tax data (Subscriptions compatibility)
  • Fix: More precise template path instructions
  • Fix: duplicate stylesheet filter
  • Fix: Always prefer original order's billing address for refunds (WooCommerce EU VAT Number compatibility)
  • Translations: Updated German (MwSt. instead of formal Ust.)
  • Translations: Updated Dutch


  • Tweak: include plugin version in style/script includes
  • Tweak: upload code cleanup
  • Fix: Parent invoice number (for Credit Notes in professional extension)


  • Feature: add original order date value to order date filter
  • Feature: Work with line_tax_data when available
  • Feature: pass item_id to items
  • Tweak: later check for woocommerce active
  • Fix: do not try to validate empty settings (Status page settings)
  • Translations: Fixed Dutch typo


  • Fix: fatal error when trying to activate with WooCommerce not installed yet.
  • Tweak: indentation fix on the Simple template


  • Fix: prevent errors when upgrading


  • Feature: All temporary files are now stored centrally in the WP uploads folder.
  • Feature: Debug settings in status panel (output errors & output to HTML)
  • Feature: Compatibility filter for WooCommerce Subscriptions (prevents duplicate invoice numbers)
  • Tweak: Pass order to totals filters
  • Translations: Updated POT
  • Translations: Updated Italian (Thanks Astrid!)
  • Translations: Updated Dutch
  • FAQ: instructions for placing a link on the thank you page


  • Fix: fatal error when user registers at checkout (applies to credit notes only)
  • Translations: Updated German (Thanks Dietmar!)
  • Translations: Place your custom translations in wp-content/languages/woocommerce-pdf-invoices-packing-slips/wpo_wcpdf-LOCALE.mo to protect them from being overwritten by plugin updates.


  • Feature: use separate file for all your template specific functions (template-functions.php)
  • Translations: Added Slovenian (thanks gregy1403!)
  • Translations: Updated Norwegian & Dutch.
  • Translations: Added Japanese - needs custom font!
  • FAQ: instructions on how to use custom fonts


  • Fix: issues with post parent objects (WC2.1 and older)


  • Small fix: bulk actions for specific i18n configurations
  • Tweak: total row key used as class in Simple template


  • Fix: Invoice not attaching
  • Translations: Updated POT file
  • Translations: Updated Dutch, Norwegian, Polish, Brazilian Portugese, Romanian, Russian, Slovak, Spanish & Ukrainian (Many thanks to all the translators!)
  • Templates: added action hooks for easier customizations (wpo_wcpdf_before_order_details, wpo_wcpdf_after_order_details, wpo_wcpdf_invoice_title & wpo_wcpdf_packing_slip_title)


  • Feature: Order number and date are now displayed by default in the Simple template (invoice number and date still optional)
  • Feature: Display Customer/Order notes with a simple shorthand (see FAQ)
  • Translations: Added Brazilian Portugese (thanks Victor Debone!)
  • Tweak: Fail more gracefully when there are errors during PDF generation
  • Tweak: added template type class to template output body
  • Tweak: cleaned up Simple template style.css


  • Translations: Added Finnish (Thanks Sami Mäkelä/Contrast.fi!)


  • Fix: check if image file exists locally, fallback to url if not (CDN compatibility)
  • Fix: make deleting invoice date possible
  • Fix: correct tmp folder check on status page
  • Translations: updated po/mo files
  • Tweak: changed settings capability requirement to manage_woocommerce (was: manage_options)
  • Tweak: better email attachment function
  • Tweak: prevent footer overlap (Simple template)
  • Tweak: fallback if glob() is not allowed on the server
  • Tweak: better custom template instructions (reflects path to actual (child-)theme)


  • HOTFIX: WooCommerce 2.2 compatibility fix
  • Filter for PDF temp folder (wpo_wcpdf_tmp_path)


  • Fix: Double date conversion for order date on invoice number filter (to avoid i18n date issues)
  • Fix: Template selector reset after update
  • Translations: added Norwegian (Thanks Aleksander!)


  • Feature: Editable invoice date per order/invoice.
  • Feature: HTML is now allowed in footer and other settings fields.
  • Translations: Updated German (Thanks Nadine!)
  • Fix: template paths are now saved relative to the site base path (ABSPATH) to prevent errors when moving to another server
  • Tweak: Changed bulk action hook for better theme compatibility
  • Tweak: Newlines in custom checkout fields


  • Feature: Added function to call custom fields more easily (see FAQ)
  • Feature: Change the my account button text via a filter (wpo_wcpdf_myaccount_button_text)
  • Translations: Added Danish (Thanks Mads!)
  • Tweak: only load PDF engine if it's not already loaded by another plugin


  • Fix: Don't create invoice number when exporting packing slips
  • Fix: Division by zero for 0 quantity items


  • Translations: Added Polish (Thanks Mike!)
  • Fix: Invoice number formatting notices in debug mode


  • Feature: Invoice numbers can now be given a prefix, suffix or padding on the settings page!
  • Filter: wpo_wcpdf_email_allowed_statuses to attach pdf to custom order status emails
  • Tweak: Sequential Order Numbers Pro compatibility
  • Tweak: Filenames are now automatically sanitized to prevent issues with illegal characters


  • Fix: error on wpo_wcpdf_email_attachment filter when $pdf_path not set


  • Fix: invoice number was cleared when Order Actions were being used when an invoice number was not set
  • Translations: Updated Slovak (Thanks Jozef!)
  • Translations: Added Czech (Thanks CubiQ!)


  • Feature: Added 'status' panel for better problem diagnosis
  • Tweak: split create & get invoice number calls to prevent slow database calls from causing number skipping
  • Translations: Added Romanian (Thanks Leonardo!)
  • Translations: Added Slovak (Thanks Oleg!)


  • Feature: added filter for custom email attachment condition (wpo_wcpdf_custom_email_condition)
  • Fix: warning for tax implode


  • Fix: hyperlink underline (was more like a strikethrough)


  • Translations: Fixed German spelling error
  • Translations: Updated Swedish (Thanks Fredrik!)


  • Translations: Added Swedish (Thanks Jonathan!)
  • Fix: Line-height issue (on some systems, the space between lines was very high)


  • Fix: bug where 'standard' tax class would not display in some cases
  • Fix: bug that caused the totals to jump for some font sizes
  • Fix: WC2.1 deprecated totals function
  • Fix: If multiple taxes were set up with the same name, only one would display (Simple template was not affected)


  • Template: Body line-height defined to prevent character jumping with italic texts
  • Fix: Open Sans now included in plugin package (fixes font issues for servers with allow_url_fopen disabled)


  • Translations: POT, DE & NL updated
  • Fix: Removed stray span tag in totals table


  • Translations: Spanish update (thanks prepu!)
  • Fix: More advanced checks to determine if a customer can download the invoice (including a status filter)


  • Feature: Optional Invoice Number column for the orders listing
  • Feature: Better support for international characters
  • Translations: Added Russian & Ukrainian translation (thanks Oleg!)
  • Translations: Updated Spanish (Thanks Manuel!) and Dutch translations & POT file
  • Tweak: Memory limit notice
  • Tweak: Filename name now includes invoice number (when configured in the settings)


  • Feature: Set which type of emails you want to attach the invoice to


  • Feature: Manually edit invoice number on the edit order screen
  • Feature: Set the first (/next) invoice number on the settings screen
  • Fix: Bug where invoice number would be generated twice due to slow database calls
  • Fix: php strict warnings


  • Feature: Simple template now uses Open Sans to include more international special characters
  • Feature: Implemented filters for paper size & orientation (read here)
  • Tweak: PDF engine updated (dompdf 0.6.0)
  • Tweak: Download PDF link on the my account page is now only shown when an invoice is already created by the admin or automatically, to prevent unwanted invoice created (creating problems with european laws).


  • Fix: shipping & fees functions didn't output correctly with the tax set to 'incl'


  • Feature: Sequential invoice numbers (set upon invoice creation).
  • Feature: Invoice date (set upon invoice creation).


  • Feature: Hungarian translations added - thanks Joseph!
  • Tweak: Better debug code.
  • Tweak: Error reporting when templates not found.
  • Fix: tax rate calculation for free items.


  • Feature: German translations added - thanks Christian!
  • Fix: dompdf 0.6.0 proved to be less stable, so switching back to beta3 for now.


  • Fix: Template paths on windows servers were not properly saved (stripslashes), resulting in an empty output.


  • Feature: PDF engine (dompdf) updated to 0.6.0 for better stability and utf-8 support.
  • Tweak: Local server path is used for header image for better compatibility with server settings.
  • Fix: several small bugs.


  • Feature: Totals can now be called with simpler template functions
  • Feature: Italian translations - thanks max66max!
  • Tweak: improved memory performance


  • Feature: French translations - thanks Guillaume!


  • Feature: Fees can now also be called ex. VAT
  • Feature: Invoices can now be downloaded from the My Account page
  • Feature: Spanish translation & POT file included
  • Fix: ternary statements that caused an error


  • Tweak: Packing slip now displays shipping address instead of billing address
  • Tweak: Variation data is now displayed by default


  • First release

Requires: 3.5 or higher
Compatible up to: 4.7.2
Last Updated: 2 weeks ago
Active Installs: 60,000+


5 out of 5 stars


46 of 74 support threads in the last two months have been marked resolved.

Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,1,1 100,1,1 100,1,1 100,1,1 100,1,1 67,3,2 100,1,1
100,1,1 100,2,2
100,2,2 100,1,1 100,1,1 100,1,1 100,1,1
100,2,2 100,1,1 100,1,1 100,1,1
100,1,1 100,1,1
100,2,2 100,1,1