PageMint PDF Suite
Version 1.0.0 · by 007AJ · GPLv2 or later
1. Requirements
- WordPress 6.3 or newer (tested up to 7.1).
- PHP 7.4 or newer with
mbstring. GD is recommended (transparent PNG/GIF logos, image scaling).
- MySQL or MariaDB with InnoDB tables.
- 128 MB PHP memory is recommended.
- A working WP-Cron (or a real cron job) for background generation.
- Optional: WooCommerce, WooCommerce Subscriptions, Contact Form 7, WPForms, Fluent Forms, Gravity Forms, Tutor LMS, LifterLMS, Client Lockbox Membership. None of them is required. Each integration switches on only when its plugin is active.
2. Installation
- In WordPress go to Plugins › Add New › Upload Plugin.
- Choose
pagemint-pdf-suite-1.0.0.zip. If you downloaded the Codester package, unzip it first: the installable plugin is the zip inside it.
- Click Install Now, then Activate.
- Open PageMint › Diagnostics and check that everything passes, then click Generate test PDF.
There is no license key or activation step. The plugin makes no calls to 007aj.com or any other service.
If you used the free PageMint PDF before: it pauses itself while the Suite is active, and both share the same templates and documents. You can deactivate and delete the free plugin. Data is kept unless you opted in to deletion.
3. Quick start (fresh site)
Each step below works on its own. You never need to create one thing before another.
- Brand kit. Open any template in PageMint › Templates (the builder) and use the Brand tab. Set your logo, colours and fonts. (Optional, because sensible defaults are used.)
- Seller details. Fill in PageMint › Settings › Seller (legal name, address, VAT ID, bank, footer). Empty fields stay empty on documents.
- Templates. Pick a starter from the gallery, or just continue. When a document needs a template and none exists, PageMint creates one from the matching starter automatically.
- WooCommerce. In PageMint › Settings › Invoices and Packing slips, choose the order statuses that create each document and the e-mails to attach it to.
- Integrations. Switch on the integrations you use (Form PDFs, Contact Form 7 "PDF" tab, Certificates). Each uses an automatic template unless you choose one.
4. Template builder
Go to PageMint › Templates. Create a template from a starter, then:
- Page: A4, Letter, Legal, A5 or custom size; portrait or landscape; margins; snap grid; zoom.
- Bands: header, body, footer. You can turn on different first-page and last-page headers and footers.
- Elements: text, image, shape, line, divider, spacer, columns, address, date, page number, line-items table, totals, QR code, barcode (Code 128, EAN-13, UPC-A, Code 39) and signature.
- Merge tags: open the merge-tag panel, search, click to insert. Filters:
{{order.date|date:"d.m.Y"}}, {{order.total|money}}, {{customer.name|upper}}, {{order.note|default:"–"}}.
- Conditions: in the inspector, "Show only when a condition is met": choose a merge tag and an operator (equals, not equals, empty, not empty, greater than, less than).
- Data source: choose which data the preview uses (sample, post, WooCommerce order, credit note, quote, certificate, form entry, Contact Form 7 entry, membership). You can pick a real order to preview.
- Preview: renders the real PDF with the same engine as final documents.
- Keyboard: Tab selects elements, arrow keys move them (Shift = 10 mm), and Alt + arrow resizes.
- Import/Export: templates export as JSON and can be imported on another site.
5. WooCommerce invoices and packing slips
Settings: PageMint › Settings, tabs Seller, Invoices, Packing slips and Checkout.
- Numbering: prefix/suffix placeholders
{Y} {y} {m} {d} {number:N}, digits, start number, yearly or monthly restart.
- Automatic creation: choose the order statuses. Documents are made in the background, never during checkout. Optionally only for orders where "I need an invoice" was ticked.
- E-mails: choose the WooCommerce e-mails each document is attached to. Attachments and failures are written to the order notes.
- Order screen: the "PDF documents" box lets you create, view, download, copy the customer link, regenerate (as a new version), void, and edit the number or dates. Changes need a reason, which is audit-logged.
- My Account: customers download their documents from Orders, from the Documents page and from the order details page.
- Checkout fields: VAT ID, company and "I need an invoice", on block checkout and classic checkout.
- Tax: per-line tax rate, tax summary per rate, reverse-charge note (order meta
_pagemint_reverse_charge = yes), VAT-exempt note.
- HPOS (High-Performance Order Storage) and legacy order storage are both supported.
6. Credit notes
- Saving a refund in WooCommerce creates a credit note (series
CN-00001 by default; change it in Settings › Credit notes and quotes).
- Amounts are negative. The refund reason and the original invoice number and date are printed. If the invoice was not issued yet, it is issued first.
- Option: attach to the "Refunded order" e-mail. Credit notes appear in My Account.
- Order screen box "Credit notes and quotes": "Create credit note" for older refunds.
7. Quotes and proforma invoices
- PageMint › Quotes › Add new: customer details, lines (price excluding tax, tax rate per line), validity date. No order or customer account is needed. You can also "Start from an order".
- Issuing gives a number (
QUO- or PF-) and a PDF. Issued quotes are locked; use Duplicate to make changes.
- Mark a quote as accepted or declined.
8. Contact Form 7 PDFs
- Go to Contact › Contact Forms, edit a form and open the PDF tab.
- Tick "Create a PDF when this form is submitted".
- Choose a template, or leave "Automatic": a template is created from the "Contact form entry" starter.
- Choose Attach to Mail, Attach to Mail (2) or both, then save the form.
Merge tags: {{form.title}}, {{form.date}}, {{form.time}}, {{fields.your_name}} (the field name, with dashes written as underscores), and the list form.lines for a two-column table. File, CAPTCHA, quiz, acceptance and submit fields are skipped.
The PDF is deleted right after the e-mail is sent. PageMint stores nothing from Contact Form 7 submissions.
- PageMint › Form PDFs lists your forms. Switch a form on, pick a template (or automatic) and optionally "attach to notification e-mails".
- Each entry becomes a stored PDF document (reference
FORM-000001) under Form PDFs and Documents, with a signed link to copy.
- Merge tags:
{{fields.<label>}} (label in lower case with underscores), {{fields.field_<id>}}, form.lines, {{form.signature}} (an image when the form has a signature field).
10. Course certificates and verification
- With Tutor LMS or LifterLMS active, completing a course creates a certificate. Settings: PageMint › Certificates (on/off per LMS, template, lookup limit).
- The verification page (shortcode
[pagemint_verify]) is created automatically. The QR code on each certificate opens it with the certificate ID.
- The page shows the name, course, date, ID and status only. It allows 20 lookups per 10 minutes per visitor by default.
- Revoke a certificate in PageMint › Certificates with an internal reason. Its links stop working, and the page shows "revoked".
- Learners: put
[pagemint_certificates] on any page to list their certificates.
11. Membership cards and receipts
With Client Lockbox Membership active, place [pagemint_membership] on a members page. Members see their card (active or trialing memberships) and a receipt per paid invoice. Each PDF is created on first download.
12. Bulk generation, ZIP and merged PDF
- In WooCommerce › Orders, select orders and choose a PageMint bulk action: create invoice or packing-slip PDFs, download them as a ZIP, or download them as one PDF.
- Up to 2,000 orders per batch. Progress, documents and history are shown in PageMint › Bulk batches. An interrupted batch resumes by itself, or at once with Resume.
- ZIP and merged files can be downloaded only by the user who started the batch, for 24 hours.
13. REST API
All endpoints need WordPress authentication (application passwords or cookie + REST nonce) and a PageMint capability.
| Endpoint | Purpose |
GET /wp-json/pagemint/v1/… | Read templates and documents. |
POST /wp-json/pagemint/v1/documents | Queue a document for background generation. |
GET /batches, GET /batches/<id>, POST /batches/<id>/resume, /cancel | Bulk batches. |
POST /wp-json/pagemint/v1/generate | Create a PDF now. Body: template_id + data (JSON object, ≤ 256 KB, ≤ 6 levels) or order_id + doc_type (invoice/packing_slip). Optional: reference, email. Returns the id, number and a signed link. 30 requests/min per user (filter pagemint_rest_generate_limit). |
curl -u admin:APPLICATION-PASSWORD -H "Content-Type: application/json" \
-d '{"template_id":123,"data":{"customer":{"name":"Alex"}}}' \
https://example.com/wp-json/pagemint/v1/generate
14. Storage, links and nginx
- PDFs are stored in
wp-content/uploads/pagemint-<random>/ with deny rules for Apache, LiteSpeed and IIS.
- nginx ignores
.htaccess. Add the rule shown in PageMint › Diagnostics:
location ^~ /wp-content/uploads/pagemint-<random>/ { deny all; return 403; }
- To store outside the web root, add to
wp-config.php: define( 'PAGEMINT_STORAGE_DIR', '/absolute/path' );
- Signed links expire after 7 days (1–90, Settings › General) and can be revoked per document.
- Behind a reverse proxy, pass the real visitor address with the
pagemint_client_ip filter.
- Remote images are blocked; allow hosts with the
pagemint_remote_image_hosts filter.
15. Privacy and uninstall
- Tools › Export/Erase Personal Data cover every PageMint document type. Issued invoices and credit notes are retained for accounting, and can optionally be anonymized after a retention period (Settings › Privacy).
- Contact Form 7 submissions are not stored.
- Uninstall removes data only if you first tick "Delete all PageMint data" (Settings › General). The verification page is an ordinary page and is kept.
16. Fonts and languages
- Bundled: Noto Sans (Latin, Cyrillic, Greek), Noto Sans Arabic and Noto Sans Hebrew, with right-to-left support.
- Chinese or Japanese: copy
NotoSansSC-Regular.ttf and NotoSansSC-Bold.ttf into the fonts folder inside the PageMint storage folder.
- Translations:
languages/pagemint-pdf-suite.pot.
17. Diagnostics and troubleshooting
- PageMint › Diagnostics: engine, PHP extensions, memory, fonts, folders, database engine, queue health, storage privacy test, test PDF and support report download.
- Documents stay pending: WP-Cron is not running. Visit the site or set up a real cron job. Stuck batches can be resumed in Diagnostics.
- "InnoDB required": convert the PageMint tables to InnoDB.
- Upload fails ("exceeds the maximum upload size"): the plugin zip is about 5 MB. Raise
upload_max_filesize or upload it via FTP to wp-content/plugins/.
18. Support and author
PageMint PDF Suite is made by 007AJ, https://007aj.com. For support, use the support channel of the marketplace where you bought the plugin. Please include the support report from PageMint › Diagnostics.
License: GPLv2 or later. Bundled libraries: mPDF (GPL-2.0), mpdf/qrcode (LGPL-2.1+), Action Scheduler (GPL-3.0+), setasign/FPDI and others (MIT), Noto fonts (SIL OFL 1.1).