mPDF 8.0.x
===========================
* Ability to customize User-Agent header in the HTTP requests sent by cURL (@samuelecat, #1229)
* Add Page Number Myanmar Language Support (@MinKyawNyunt, #1201)
* new `Mpdf\Exception\FontException` extending base `MpdfException` was introduced and is thrown on Font manipulation
* A bit cleaner exception messages for font-related errors
* Use atomic cache writing. (@PATROMO, #1186)
* Fix: "Undefined index: group" when calling MultiCell when using font without OTL data (@Kekos, #1213, #941)
* Add C128RAW barcode type to create any barcode (ex: subtype change in middle of barcode) (#1124)
* Add proxy support to curl
* Fixed date and time format in the informations dictionary (#1083, @peterdevpl)
* Checking allowed stream wrappers in CssManager
* PHP 7.4 support (until final 7.4 release with composer --ignore-platform-reqs)
* Improve debugging of remote content issues (@ribeirobreno)
* Added `exposeVersion` configuration variable allowing to hide mPDF version from Producer tag and HTTP headers
* Added the check for JPEG SOF header 0xFF 0xC1 (extended) (@jamiejones85)
* Allows setting `none` as zoom mode in `SetDisplayMode` method, so that OpenAction is not written (#602)
* Allowed image stream whitelist to be customised (#1005, thanks @jakejackson)
* Fixed parsing of top-left-bottom-right CSS rules with !important (#1009)
* Fixed skipping ordered list numbering with page-break-inside: avoid (#339)
* Compound classes selector support, like `.one.two` or `div.message.special` (#538, @peterdevpl)
* Fixed CMYK colors in text-shadow (#1115, @lexilya)
* Skip non supported wrappers when resolving paths (#1204, @MarkVaughn)
* Fixed SVGs using a style tag, has styles ignored ( Requires ext-dom ) (#450, @antman3351)
* Allows `{nb}`, `{nbpg}`, `{PAGENO}` and `{DATE ...}` substitution in body (#172 and #267, @Dasc3er)
* Cache now creates a dedicated subdirectory `/mpdf`.
* It is possible to disable automatic cache cleanup with `cacheCleanupInterval` config variable
* PHP 8.0 is supported since 8.0.10 (#1263)
* Fix: First header of named page is added twice (@antman3351, #1320)
* Added `curlExecutionTimeout` configuration variable allowing to `CURLOPT_TIMEOUT` when fetching remote content
* Fix: Not all combinations were generated for more than three compound classes (@JeppeKnockaert)
* Added `quiet_zone_left` and `quiet_zone_right` to barcodes which support quiet zones in order to customize its width
* Updated `CssManager` to use the `RemoteContentFetcher` class instead of `curl` natively (@greew)
* Added optional `continue2pages` parameter to `SetDocTemplate` method, allowing a template to continue the last 2 pages alternately (@bmg-ruudv)
* Ensure that all digits of a string are hexadecimal before decoding in ColorConverter (@derklaro)
* Fix: Using mpdf in phar package leads to weird errors (#1504, @sandreas)
* WEBP images support (#1525)
mPDF 8.0.0
===========================
### 15/03/2019
* Updated FPDI dependency to version 2 (thanks a lot, @JanSlabon)
- removed `SetImportUse` method
- case of `ImportPage` method changed to `importPage`
- similarly, case of `setSourceFile` and `useTemplate` was changed to a lowercase first letter.
- signature of `importPage` changed
- returned value of `useTemplate` changed
* Moved QRCode generating code portions to external package _mpdf/qrcode_
- This reduced package size considerably (ca 6MB)
* Fraction sizes without leading zeros allowed for font sizes (#973, thanks @peterdevpl)
* WriteHTML is now strict about used `$mode` parameter (#915, thanks, @tomtomau)
* Fixed regression in nested tables (#860, thanks, @machour)
* Scientific notation handling in CSS font sizes (#753, thanks, @peterdevpl)
mPDF 7.1.x
===========================
* PHAR security issue fixed (thanks, @jakejackson)
* Font temporary data saved as JSON instead of generating PHP files (thanks, @jakejackson)
* cURL handling enhancements (thanks, @jakejackson)
* SVG parsing fixes (thanks, @achretien)
* Write PDF content with *Writer service classes
* PHP 7.3 is supported
* Added myclabs/deepcopy dependency, fixed TOC page numbering (thanks, @jakejackson)
* Custom color for QR codes
* Added support for orientation config key
* Code and tests cleanups and enhancements
- PHPUnit dedicated assertions (thanks, @carusogabriel)
- WriteHTML part constants (thanks, @tomtomau)
- Various notice fixes (kudos to all respective authors)
mPDF 7.0.x
===========================
* Allow passing file content or file path to `SetAssociatedFiles` (#558)
* Allowed ^1.4 and ^2.0 of paragon/random_compat to allow wider usage
* Fix of undefined _getImage function (#539)
* Code cleanup
* Better writable rights for temp dir validation (#534)
* Fix displaying dollar character in footer with core fonts (#520)
* Fixed missed code2utf call (#531)
* Refactored and cleaned-up classes and subnamespaces
mPDF 7.0.0
===========================
### 19/10/2017
Backward incompatible changes
-----------------------------
- PHP `^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0` is required.
- Entire project moved under `Mpdf` namespace
- Practically all classes renamed to use `PascalCase` and named to be more verbose
- Changed directory structure to comply to `PSR-4`
- Removed explicit require calls, replaced with Composer autoloading
- Removed configuration files
- All configuration now done via `__construct` parameter (see below)
- Changed `\Mpdf\Mpdf` constructor signature
- Class now accepts only single array `$config` parameter
- Array keys are former `config.php` and `config_fonts.php` properties
- Additionally, former constructor parameters can be used as keys
- `tempDir` directory now must be writable, otherwise an exception is thrown
- ICC profile is loaded as entire path to file (to prevent a need to write inside vendor directory)
- Moved examples to separate repository
- Moved `TextVars` constants to separate class
- Moved border constants to separate class
- `scriptToLang` and `langToFont` in separate interfaced class methods
- Will now throw an exception when `mbstring.func_overload` is set
- Moved Glyph operator `GF_` constants in separate `\Mpdf\Fonts\GlyphOperator` class
- All methods in Barcode class renamed to camelCase including public `dec_to_hex` and `hex_to_dec`
- Decimal conversion methods (to roman, cjk, etc.) were moved to classes in `\Mpdf\Conversion` namespace
- Images in PHP variables (``) were moved from direct Mpdf properties to `Mpdf::$imageVars` public property array
- Removed global `_SVG_AUTOFONT` and `_SVG_CLASSES` constants in favor of `svgAutoFont` and `svgClasses` configuration keys
- Moved global `_testIntersect`, `_testIntersectCircle` and `calc_bezier_bbox` fucntions inside `Svg` class as private methods.
- Changed names to camelCase without underscores and to `computeBezierBoundingBox`
- Security: Embedded files via `` custom tag must be explicitly allowed via `allowAnnotationFiles` configuration key
- `fontDir` property of Mpdf class is private and must be accessed via configuration variable with array of paths or `AddFontDirectory` method
- QR code `` element now treats `\r\n` and `\n` as actual line breaks
- cURL is prefered over socket when downloading images.
- Removed globally defined functions from `functions.php` in favor of `\Mpdf\Utils` classes `PdfDate` and `UtfString`.
- Unused global functions were removed entirely.
Removed features
----------------
- Progressbar support
- JpGraph support
- `error_reporting` changes
- Timezone changes
- `compress.php` utility
- `_MPDF_PATH` and `_MPDF_URI` constants
- `_MPDF_TEMP_PATH` constant in favor of `tempDir` configuration variable
- `_MPDF_TTFONTDATAPATH` in favor of `tempDir` configuration variable
- `_MPDFK` constant in favor of `\Mpdf\Mpdf::SCALE` class constant
- `FONT_DESCRIPTOR` constant in favor of `fontDescriptor` configuration variable
- `_MPDF_SYSTEM_TTFONTS` constant in favor of `fontDir` configuration variable with array of paths or `AddFontDirectory` method
- HTML output of error messages and debugs
- Formerly deprecated methods
Fixes and code enhancements
----------------------------
- Fixed joining arab letters
- Fixed redeclared `unicode_hex` function
- Converted arrays to short syntax
- Refactored and tested color handling with potential conversion fixes in `hsl*()` color definitions
- Refactored `Barcode` class with separate class in `Mpdf\Barcode` namespace for each barcode type
- Fixed colsum calculation for different locales (by @flow-control in #491)
- Image type guessing from content separated to its own class
New features
------------
- Refactored caching (custom `Cache` and `FontCache` classes)
- Implemented `Psr\Log\LoggerAware` interface
- All debug and additional messages are now sent to the logger
- Messages can be filtered based on `\Mpdf\Log\Context` class constants
- `FontFileFinder` class allowing to specify multiple paths to search for fonts
- `MpdfException` now extends `ErrorException` to allow specifying place in code where error occured
- Generating font metrics moved to separate class
- Added `\Mpdf\Output\Destination` class with verbose output destination constants
- Availability to set custom default CSS file
- Availability to set custom hyphenation dictionary file
- Refactored code portions to new "separate" classes:
- `Mpdf\Color\*` classes
- `ColorConvertor`
- `ColorModeConvertor`
- `ColorSpaceRestrictor`
- `Mpdf\SizeConvertor`
- `Mpdf\Hyphenator`
- `Mpdf\Image\ImageProcessor`
- `Mpdf\Image\ImageTypeGuesser`
- `Mpdf\Conversion\*` classes
- Custom watermark angle with `watermarkAngle` configuration variable
- Custom document properties (idea by @zarubik in #142)
- PDF/A-3 associated files + additional xmp rdf (by @chab in #130)
- Additional font directories can be added via `addFontDir` method
- Introduced `cleanup` method which restores original `mb_` encoding settings (see #421)
- QR code `` element now treats `\r\n` and `\n` as actual line breaks
- Customizable following of 3xx HTTP redirects, validation of SSL certificates, cURL timeout.
- `curlFollowLocation`
- `curlAllowUnsafeSslRequests`
- `curlTimeout`
- QR codes can be generated without a border using `disableborder="1"` HTML attribute in `` tag
Git repository enhancements
---------------------------
- Added contributing guidelines
- Added Issue template
mPDF 6.1.0
===========================
### 26/04/2016
- Composer updates
- First release officially supporting Composer
- Updated license in composer.json
- Chmod 777 on dirs `ttfontdata`, `tmp`, `graph_cache` after composer install
- Requiring PHP 5.4.0+ with Composer
- Code style
- Reformated (almost) all PHP files to keep basic code style
- Removed trailing whitespaces
- Converted all txt, php, css, and htm files to utf8
- Removed closing PHP tags
- Change all else if calls to elseif
- Added base PHPUnit tests
- Added Travis CI integration with unit tests
- Changed all `mPDF::Error` and `die()` calls to throwing `MpdfException`
- PDF Import changes
- FPDI updated to 1.6.0 to fix incompatible licenses
- FPDI loaded from Composer or manually only
- Removed iccprofiles/CMYK directory
- Renamed example files: change spaces to underscores to make scripting easier
- Fixed `LEDGER` and `TABLOID` paper sizes
- Implemented static cache for mpdf function `ConvertColor`.
- Removed PHP4 style constructors
- Work with HTML tags separated to `Tag` class
- Fixed most Strict standards PHP errors
- Add config constant so we can define custom font data
- HTML
- fax & tel support in href attribute
- Check $html in `$mpdf->WriteHTML()` to see if it is an integer, float, string, boolean or
a class with `__toString()` and cast to a string, otherwise throw exception.
- PHP 7
- Fix getting image from internal variable in PHP7 (4dcc2b4)
- Fix PHP7 Fatal error: `'break' not in the 'loop' or 'switch' context` (002bb8a)
- Fixed output file name for `D` and `I` output modes (issue #105, f297546)
mPDF 6.0
===========================
### 20/12/2014
New features / Improvements
---------------------------
- Support for OpenTypeLayout tables / features for complex scripts and Advances Typography.
- Improved bidirectional text handling.
- Improved line-breaking, including for complex scripts e.g. Lao, Thai and Khmer.
- Updated page-breaking options.
- Automatic language mark-up and font selection using autoScriptToLang and autoLangToFont.
- Kashida for text-justification in arabic scripts.
- Index collation for non-ASCII characters.
- Index mark-up allowing control over layout using CSS.
- `{PAGENO}` and `{nbpg}` can use any of the number types as in list-style e.g. set in `` using pagenumstyle.
- CSS support for lists.
- Default stylesheet - `mpdf.css` - updated.
Added CSS support
-----------------
- lang attribute selector e.g. :lang(fr), [lang="fr"]
- font-variant-position
- font-variant-caps
- font-variant-ligatures
- font-variant-numeric
- font-variant-alternates - Only [normal | historical-forms] supported (i.e. most are NOT supported)
- font-variant - as above, and except for: east-asian-variant-values, east-asian-width-values, ruby
- font-language-override
- font-feature-settings
- text-outline is now supported on TD/TH tags
- hebrew, khmer, cambodian, lao, and cjk-decimal recognised as values for "list-style-type" in numbered lists and page numbering.
- list-style-image and list-style-position
- transform (on `` only)
- text-decoration:overline
- image-rendering
- unicode-bidi (also `` tag)
- vertical-align can use lengths e.g. 0.5em
- line-stacking-strategy
- line-stacking-shift
mPDF 5.7.4
================
### 15/12/2014
Bug Fixes & Minor Additions
---------------------------
- SVG images now support embedded images e.g. ``
- SVG images now supports `` element e.g. ``, and also ``
- SVG images now can use Autofont (see top of `classes/svg.php` file)
- SVG images now has limited support for CSS classes (see top of `classes/svg.php` file)
- SVG images - style inheritance improved
- SVG images - improved handling of comments and other extraneous code
- SVG images - fix to ensure opacity is reset before another element
- SVG images - font-size not resetting after a `` element
- SVG radial gradients bug (if the focus [fx,fy] lies outside circle defined by [cx,cy] and r) cf. pservers-grad-15-b.svg
- SVG allows spaces in attribute definitions in `