feat: package fonts for more invoice PDF languages (Hebrew, Thai, Lao, Khmer, Myanmar, Sinhala, Kannada, Telugu, Sindhi)
I maintainer di solito rispondono entro 1 giorno
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
Package fonts so invoice PDFs render Hebrew, Thai, Lao, Khmer, Myanmar, Sinhala, Kannada, Telugu and Sindhi. Fonts stay packaged in the plugin. There are no on-demand downloads in this issue.
Follow-up to #1925, #2030 (PR #2035) and #2037 (PR #2038). #2038 added a pre-render check, Invoice::get_unsupported_scripts(). It uses mPDF's own script database and font mapping, and fails early with a clear, admin-visible error when the font mPDF would select for a script is not on disk. Once a font file is retained, that script passes the check with no code change. So this issue is mainly about which mPDF font files to stop stripping.
Background (verified against mPDF 8.3.1)
scripts/remove-mpdf-fonts.php deletes mPDF's non-Latin fonts. It runs from the composer post-install-cmd and post-update-cmd hooks. Every build path goes through it: package.json prebuild (composer install -o --no-dev), release.yml, CI and bin/deploy.sh. Editing its $fonts list is the single control point.
The original mPDF package, as cached by composer, gives exact sizes. Today the plugin ships about 2.9 MB of fonts (DejaVu Sans/Serif Condensed regular and bold, FreeMono, Eeyek).
Scope: fonts to retain (from mPDF's own bundle, about 1.76 MB uncompressed in total)
| Script | mPDF font name | Files to keep | Size |
|---|---|---|---|
| Hebrew | taameydavidclm |
TaameyDavidCLM-Medium.ttf, TaameyDavidCLM-LICENSE.txt |
96 KB |
| Thai | garuda |
Garuda.ttf, Garuda-Bold.ttf |
113 KB |
| Lao | dhyana |
Dhyana-Regular.ttf, Dhyana-Bold.ttf, DhyanaOFL.txt |
134 KB |
| Khmer | khmeros |
KhmerOS.ttf, KhmerOFL.txt |
266 KB |
| Myanmar (and Tai Le) | tharlon |
Tharlon-Regular.ttf, TharlonOFL.txt |
353 KB |
| Sinhala | kaputaunicode |
kaputaunicode.ttf |
160 KB |
| Kannada | lohitkannada |
Lohit-Kannada.ttf, LohitKannadaOFL.txt |
198 KB |
| Telugu | pothana2000 |
Pothana2000.ttf |
194 KB |
| Sindhi | lateef |
LateefRegOT.ttf, Lateef font OFL.txt |
246 KB |
Notes:
- mPDF's
fontdatafor most of these defines only the regular style. Garuda has regular, bold, oblique and bold-oblique, and Dhyana has regular and bold. The invoice template uses<strong>(company name, headings), so bold and italic markup must not throwFont "..." is not supported. For each retained family, check which ofR/B/I/BImPDF'sfontdatadefines. Where a style is missing, or its file is not retained, add a remap inInvoice::get_missing_fontdata()to a retained file. Use the existingdejavusansmono,dejavusansanddejavuserifentries as the pattern. Do not retain Garuda's two oblique files (57 KB each); remapIandBItoRandB. - Keep the licence texts listed above next to the fonts they cover. Before retaining each font, confirm it may be redistributed. mPDF already distributes these files, but Garuda,
kaputaunicodeandPothana2000ship without a licence text inttfonts/. If redistribution terms are unclear for any font, leave it stripped and say so in the PR.
Files
scripts/remove-mpdf-fonts.php: remove the listed font and licence file names from$fonts. Add a comment pointing to this issue. Keep a note that retained fonts must keep all fourfontdatastyles resolvable.inc/invoices/class-invoice.php: remaps inget_missing_fontdata()for missing styles only.tests/WP_Ultimo/Invoices/Invoice_Test.php: extend the existing tests. #2038 addedtest_get_unsupported_scriptsandtest_pdf_with_unsupported_script_throws_clear_error. Hebrew and Thai are in those tests as examples of unsupported scripts, so move them to a "supported" assertion and pick a still-unsupported script (for example Devanagari) for the failure case.
Reference patterns: Invoice::get_missing_fontdata() and Invoice::get_unsupported_scripts().
Out of scope (separate decisions, not part of this issue)
- Devanagari, Bengali, Gujarati, Gurmukhi, Tamil, Malayalam, Oriya, Thaana: mPDF selects
freeserif, which is 3.3 MB regular plus 1.3 MB bold (about 4.6 MB for regular and bold). This needs a size decision, or a spike on smaller per-script fonts. Noto per-script fonts are a candidate but have not been tested with mPDF's OpenType shaper. - CJK: with
+aCJK, mPDF uses non-embedded Adobe CJK fonts, so most viewers and phones show blanks. Embedded fonts are large (Sun-ExtAis 23 MB,UnBatangis 6.9 MB). This is its own decision. - Tibetan (
jomolhari, 2.3 MB), Syriac (OTF file), Ethiopic (619 KB) and historical scripts. - On-demand or downloadable font packs.
Verification
- For each script in the table, generate a PDF through the real
WP_Ultimo\Invoices\Invoiceclass with sample text in the company name (bold via<strong>) and in a line item title. Render it withpdftoppmand inspect the image for correct glyph shaping, joining and ordering. A PDF header alone is not evidence. Suggested samples are in the #2037 PR body andInvoice_Test. Invoice::get_unsupported_scripts()returns[]for each of these scripts.- Bold and italic markup does not throw for any retained family.
vendor/bin/phpunit --filter 'Invoice_Test|Email_Manager_Test|Payment_Manager_Test',vendor/bin/phpcson the changed files,vendor/bin/phpstan analyse, andgit diff --check.- Measure the packaged size change (
duofvendor/mpdf/mpdf/ttfonts/before and after, and the built ZIP if practical) and record it in the PR. The expected increase is about 1.8 MB uncompressed. composer install --no-devstill ends with only the intended fonts present.
- Lingua principale
- PHP
- Stelle
- 218
- Fork
- 87
- Merge medio
- 1g 2h
- PR unite (30g)
- 109
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Ultimate-Multisite/ultimate-multisite
-
fix: send payment_received receipt after manual payment confirmation and email verificationForse già presa @superdav42 l’ha presa 1 giorno fa. Apertabug origin:interactive status:in-review tier:standard
Ultimate-Multisite/ultimate-multisite#2055 · 12 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
perf: lazy-load the top My Sites toolbar and defer initial site-list hydrationForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertaenhancement origin:worker priority:medium source:conflict-feedback status:available tier:standard
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Ultimate-Multisite/ultimate-multisite#2015 · 65 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
auto-dispatch needs-investigation origin:worker security status:available tier:standard type:bug
Difficoltà 3/5 Mezza giornata Idoneità per principianti 30/100
Ultimate-Multisite/ultimate-multisite#1930 ·
I maintainer di solito rispondono entro 1 giorno
-
hold-for-review no-auto-dispatch origin:interactive status:available type:bug
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Ultimate-Multisite/ultimate-multisite#1892 ·
I maintainer di solito rispondono entro 1 giorno
-
auto-dispatch hold-for-review origin:worker review-followup source:review-scanner status:available tier:standard
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
Ultimate-Multisite/ultimate-multisite#1867 · 7 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Ultimate-Multisite/ultimate-multisite
Issue simili
-
bug review needed
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
OpenMage/magento-lts#5816 ·
I maintainer di solito rispondono entro 2 giorni
-
priority:low type:docs
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
crazy-goat/rabbit-stream#958 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
nextcloud/richdocuments#6250 ·
I maintainer di solito rispondono entro 1 giorno
-
sync-en
Difficoltà 1/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
sync-en
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno