WP Manifestindependent plugin directory
manifest / ecommerce / woocommerce-printnode-mpdf

WooCommerce PrintNode mPDF engine WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Make WooCommerce automatic order printing (PrintNode) use the mpdf engine (e.g. for RTL language support)

★ 2stars
135release downloads
≈20active sites
v1.3.0latest · 1 year ago

Install

Download woocommerce-printnode-mpdf.zip From the v1.3.0 release on GitHub, Oct 9, 2025

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/davidanderson684/woocommerce-printnode-mpdf/releases/download/v1.3.0/woocommerce-printnode-mpdf.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WooCommerce Print Orders mPDF engine for PrintNode

Description

This plugin makes "WooCommerce Automatic Order Printing (PrintNode)" (https://www.simbahosting.co.uk/s3/product/woocommerce-printnode-automatic-order-printing/) to use mPDF to produce its PDF output, instead of the default DomPDF (at least version 1.4.0 of that plugin is required). It is thus useful for cases that DomPDF has problems with or does not handle, such as right-to-left (RTL) languages.

N.B. This only affects PDFs that the automatic order printing plugin produces internally. For PDFs that were supplied by a separate plugin, you will want to use their accompanying solution (e.g. https://github.com/wpovernight/woocommerce-pdf-ips-mpdf/releases).

PHP >= 5.6.0 is required (reflecting the versions supported by the mPDF library).

Installation

  1. Install and then activate this plugin via uploading it into WordPress's plugin installer (use the "Upload" tab). That is all. Once it is active, it is in use (you should be able to see this mentioned in the "Simple summary" section in the PrintNode settings).

Changelog

1.3.0 - 2025/10/09

  • TWEAK: Update to mPDF 8.2.6, which includes PHP 8.4 + 8.5 support
  • TWEAK: Mark as supporting WP 6.8

1.2.0 - 2024/06/06

  • TWEAK: Update to mPDF 8.2.3, which adds PHP 8.3 support

1.1.0 - 2023/01/25

  • TWEAK: Update to mPDF 8.1.4, which adds PHP 8.2 support

1.0.5 - 2021/03/25

  • TWEAK: De-activate composer 2.0 run-time platform check
  • TWEAK: Update bundled dependencies to current versions

1.0.4 - 2021/01/27

  • TWEAK: Update bundled dependencies to current versions

1.0.3 - 2020/10/30

  • TWEAK: Include afragen/wp-dependency-installer to advise installing Github updater; exclude incorrectly bundled updater plugin
  • TWEAK: Do not exclude FreeSans.ttf from build artifact
  • TWEAK: Fix some Github build issues

1.0.0 - 2020/10/28

  • RELEASE: First version

License

Copyright 2020- David Anderson

MIT License:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Releases

7 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.3.0 latest
Oct 9, 2025 1 year ago
woocommerce-printnode-mpdf.zip
10
Jun 6, 2024 2 years ago
woocommerce-printnode-mpdf.zip
10
Jan 25, 2023 3 years ago
woocommerce-printnode-mpdf.zip
23
Mar 25, 2021 5 years ago
woocommerce-printnode-mpdf.zip
40
Jan 27, 2021 5 years ago
woocommerce-printnode-mpdf.zip
16
Oct 30, 2020 5 years ago
woocommerce-printnode-mpdf.1.0.3.zip
23
Oct 28, 2020 5 years ago
woocommerce-printnode-mpdf.1.0.0.zip
13

Active-site estimate ≈20 comes from the median of recent superseded releases. Method.

D+ grade

Security

WooCommerce PrintNode mPDF engine 1.3.0 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.3.0
Findings
2
Worst severity
high
Content hash
6fdec4e47e89fd88da839f47…

Findings

  • high Subscriber+ arbitrary plugin activation via wp_ajax_dependency_installer

    missing_capability

    The plugin constructor always runs WP_Dependency_Installer::instance(__DIR__)->run(), which loads wp-dependencies.json and registers wp_ajax_dependency_installer → ajax_router. ajax_router reads unsanitized $_POST['method'] and $_POST['slug'] with no wp_verify_nonce/check_ajax_referer (phpcs explicitly disables NonceVerification) and dynamically calls $this->$method($slug) for method in {install, activate, dismiss}. activate() immediately calls activate_plugin($slug) (or network-wide activate_plugin when is_network_admin()) with no current_user_can('activate_plugins') and without requiring $slug to be a configured dependency — the config lookup is only used afterward to build a success message. WordPress core activate_plugin() does not check capabilities. wp_ajax_ fires for every authenticated user, including WooCommerce Customer (read-only, equivalent to Subscriber) posting to admin-ajax.php from the storefront; the admin_notices UI gate (update_plugins) does not apply to the AJAX action. Observable: POST action=dependency_installer&method=activate&slug=hello.php (or any installed plugin file) as a customer activates that plugin and runs its activation hooks. This is the unfixed WP Dependency Installer 3.1.0 issue disclosed in 2022 and patched upstream in 4.3.1 (nonce plus current_user_can('activate_plugins')). This plugin's 1.3.0 release (2025-10-09) still vendors 3.1.0.

    vendor/afragen/wp-dependency-installer/wp-dependency-installer.php:91-97,346-358,499-516

    Recommendation

    Upgrade afragen/wp-dependency-installer to >= 4.3.1 (adds wp_verify_nonce('wp-dependency-installer_'.$slug) and current_user_can('activate_plugins') in activate()). Alternatively stop calling WP_Dependency_Installer::run() — GitHub Updater is only an optional notice. Until then, reject ajax_router unless current_user_can('activate_plugins') / 'install_plugins', verify a nonce, and allowlist $slug against $this->config before activate_plugin().

  • medium CSRF can install GitHub Updater from the develop branch

    csrf

    The same ajax_router has no CSRF nonce. install($slug) does check current_user_can('update_plugins') but that only stops low-privilege callers; a logged-in administrator who visits an attacker page can be forced to POST action=dependency_installer&method=install&slug=github-updater/github-updater.php. admin_footer prints jQuery that posts those fields with no nonce. install() then Plugin_Upgrader->install()s $this->config[$slug]['download_link'], which apply_config() sets to https://api.github.com/repos/afragen/github-updater/zipball/develop for the shipped wp-dependencies.json (optional GitHub Updater from the develop branch). The 'nonce' passed into WPDI_Plugin_Installer_Skin is wp_nonce_url(download_link) — a query-arg on the GitHub URL, not a verified request nonce. Combined with finding 1, a customer can then activate the newly installed plugin. Observable: after the admin CSRF, github-updater appears under wp-content/plugins/ from the GitHub develop zipball.

    vendor/afragen/wp-dependency-installer/wp-dependency-installer.php:312-327,346-358,417-432

    Recommendation

    Same fix as finding 1: WPDI >= 4.3.1 verifies a per-slug nonce before install/activate. Pin GitHub Updater to a tagged release instead of branch develop, or drop the optional dependency installer entirely if the notice is not needed.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.