PDF Invoices & Packing Slips for WooCommerce
This WooCommerce extension automatically adds a PDF or XML invoice (e-invoicing) to the order confirmation emails sent out to your customers. Includes a basic template (additional templates are available from WP Overnight) as well as the possibility to modify/create your own templates. In addition, you can choose to download or print invoices and packing slips from the WooCommerce order admin. Main features Automatically attach invoice PDF or XML to WooCommerce emails of your choice Download the PDF or XML Invoice / PDF Packing Slip from the order admin page Choose from a range of e‑document formats: UBL 2.1, Peppol BIS 3.0, CII D16B, Factur‑X 1.0, ZUGFeRD 1.0, and ZUGFeRD 2.0. Generate PDF invoices / packing slips in bulk Fully customizable HTML/CSS invoice templates Download invoices from the My Account page Sequential invoice numbers Available in: Czech, Dutch, English, Finnish, French, German, Hungarian, Italian, Japanese (see FAQ for adding custom fonts!), Norwegian, Portuguese, Polish, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish & Ukrainian Free extensions The following free extensions are available to add additional features to the plugin: PDF Invoices & Packing Slips for WooCommerce – mPDF: Adds support for RTL layout and Arabic script. PDF Invoices & Packing Slips for WooCommerce – mPDF CJK: Provides support for Chinese, Japanese, and Korean (CJK) fonts for the mPDF extension. PDF Invoices & Packing Slips for WooCommerce – Unicode Language Pack: Adds support for Chinese, Japanese, and Korean scripts. PDF Invoices & Packing Slips for WooCommerce – Taxes Summary: Adds a taxes summary table after the order details. Premium extensions In addition to this, we offer several premium extensions: Create/email PDF Proforma Invoices, Credit Notes (for Refunds), email Packing Slips, automatic upload to Dropbox, Google Drive & more with PDF Invoices & Packing Slips for WooCommerce Professional Get the complete feature set, including Professional, Premium Templates, and additional features with the WooCommerce PDF Invoices & Packing Slips Plus Bundle Add Peppol network delivery for WooCommerce invoices and credit notes right inside your invoicing workflow. eDocuments for WooCommerce: Peppol Automatically send new orders or packing slips to your printer as soon as the customer orders! WooCommerce Automatic Order Printing (PrintNode) Enable EU VAT number collection, automatic validation and reverse-charge logic right in your WooCommerce store. WooCommerce European (EU/UK/Norway/Switzerland) VAT Compliance Fully customizable In addition to a number of default settings (including a custom header/logo) and several layout fields that you can use out of the box, the plugin contains HTML/CSS-based templates that allow for customization & full control over the PDF output. Copy the templates to your theme folder and you don’t have to worry that your customizations will be overwritten when you update the plugin. Insert customer header image/logo Modify shop data / footer / disclaimer etc. on the invoices & packing slips Select paper size (Letter or A4) Translation ready
Top keywords
- woocommerce14×3.00%
- pdf13×2.79%
- invoices12×2.58%
- packing12×2.58%
- packing slips11×2.36%
- slips11×2.36%
- invoices packing8×1.72%
- invoices packing slips8×1.72%
- pdf invoices7×1.50%
- pdf invoices packing7×1.50%
- templates6×1.29%
- invoice5×1.07%
Zero Blocks Given
Most WooCommerce stores ship 80-150 KB of block CSS and JS that the store never actually renders. The WC BlockPatterns scanner is the one that bugs me most – it hits the filesystem on every request to scan a directory of pattern templates you don’t use. Then add core WP global-styles, wp-block-library and font-faces on top, and you’re loading a Gutenberg frontend you probably switched off a long time ago. Zero Blocks Given turns it off at the source, through WooCommerce’s own dependency injection container. No CSS dequeue band-aid, no UI checkboxes, no PRO upsell. One constant in wp-config.php, pick a tier, done. How it works Here’s the thing – WC registers its block hooks as closures wrapping instance methods on container-managed objects. So you can’t remove_action() them by string. You have to fetch the same instance back from the DI container and pass it in as the callable. That’s what this does: $bp = \Automattic\WooCommerce\Blocks\Package::container()->get( BlockPatterns::class ); remove_action( 'init', [ $bp, 'register_block_patterns' ] ); The DI-container path is the one that survives WC upgrades cleanly. String-callback matching and dequeue tricks tend to drift every release, so I went with the container. Four modes. Three ways to set them. Mode What it turns off When to use it patterns WC BlockPatterns directory scanner only Block-based Cart/Checkout – keeps all blocks rendering, just skips the file-I/O scan blocks patterns + BlockTypesController + Notices styles + wc-blocks-style handle Classic-shortcode WC stores all blocks + WP global-styles pipeline + theme.json + font-faces + head strip Sites with no Gutenberg frontend at all nuclear all + unregister_block_type() for every core block Page-builder sites – strips the editor inserter clean Default is all. Set the mode you want with any of these: The settings – click the Settings link on the Plugins screen. Native HTML dialog, four radios, save. No menu items, nothing else added to your admin. A constant in wp-config.php – define( 'ZEROBLG_MODE', 'patterns' );. This wins over the dialog. Good devops escape hatch. A filter in a theme or mu-plugin – add_filter( 'zeroblg/mode', fn() => 'blocks' );. Used when neither the constant nor the dialog set a value. Resolution order: constant, then settings, then filter, then all. An invalid value at any step just falls through to the next. A few real cases Service-form site on WC. You sell consultations, not products – no cart, no checkout. mode=all strips every block stylesheet across the site. Classic-shortcode WC store. You use [woocommerce_cart] and [woocommerce_checkout], no block UI. mode=blocks turns off the block frontend without touching your classic flow. Block-checkout store with bloated patterns. You run the new Cart/Checkout blocks but never the WC pattern library. mode=patterns skips just the directory scanner – saves the disk hit, leaves your checkout alone. FrankenPHP / worker mode. All hooks are idempotent, no $GLOBALS writes, \Throwable catches around the DI lookups. Safe in a worker. Elementor / Divi WC stores. The page builder renders its own checkout, so mode=all clears the WC and WP block CSS your theme never uses anyway. Why I built it this way Activate it and it works – mode=all is the default, no setup needed. No settings page to learn. One constant or one filter is the whole API. Pure PHP. No database rows, no admin scripts, no frontend JS. No external requests, no tracking, nothing phoning home. GDPR is a non-issue. It uses the same Package::container() lookup as WC core, so it follows WC’s own object lifecycle instead of guessing. Worker-safe – FrankenPHP, Roadrunner, Swoole. No die, no exit, no session writes. mu-plugin friendly. Drop the folder into wp-content/mu-plugins/ and it loads itself. GPL, no upsells. No PRO tier, no Freemius, no admin notice nagging you for a review. From the maker of WP Multitool This plugin handles the frontend block bloat. If you also want the backend cleaned up, that’s what WP Multitool does – slow queries, autoload bloat, the database bottlenecks that caching plugins just hide instead of fixing. Most optimization plugins guess at the problem. WP Multitool runs EXPLAIN and shows you. 14 tools in there – slow-query analyzer, autoload optimizer, index suggestions, fatal-error recovery – and a free site scanner if you want to see what’s slow before paying for anything. If Zero Blocks Given earned a spot in your stack, that one probably will too.