forked from phpclicks/mpdf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG.txt
2895 lines (2322 loc) · 130 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
===========================
mPDF 5.7
14/07/2013
===========================
Files changed
-------------
config.php
mpdf.php
classes/tocontents.php
classes/cssmgr.php
classes/svg.php
includes/functions.php
includes/out.php
examples/formsubmit.php [Important - Security update]
Updated Example Files in /examples/
-----------------------------------
All example files
mpdfstyleA4.css
config.php
----------
Removed:
$this->hyphenateTables
$this->hyphenate
$this->orphansAllowed
Edited:
"hyphens: manual" - Added to $this->defaultCSS
$this->allowedCSStags now includes '|TEXTCIRCLE|DOTTAB'
New:
$this->decimal_align = array('DP'=>'.', 'DC'=>',', 'DM'=>"\xc2\xb7", 'DA'=>"\xd9\xab", 'DD'=>'-');
$this->h2toc = array('H1'=>0, 'H2'=>1, 'H3'=>2);
$this->h2bookmarks = array('H1'=>0, 'H2'=>1, 'H3'=>2);
$this->CJKforceend = false; // Forces overflowng punctuation to hang outside right margin (used with CJK script)
Backwards compatability
-----------------------
Changes in mPDF 5.7 may cause some changes to the way your documents appear. There are two main differences:
1) Hyphenation. To retain appearance compatible with earlier versions, set the CSS property "hyphens: auto" whenever
you previously used $mpdf->hyphenate=true;
2) Table of Contents - appearance can now be controlled with CSS styles. By default, in mPDF 5.7, no styling is applied so you will get:
- No indent (previous default of 5mm) - ($tocindent is ignored)
- Any font, font-size set ($tocfont or $tocfontsize) will not work
- HyperLinks will appear with your default appearance - usually blue and underlined
- line spacing will be narrower (can use line-height or margin-top in CSS)
New features / Improvements
---------------------------
Layout of Table of Content ToC now controlled using CSS styles
Text alignment on decimal mark inside tables
Automatically generated bookmarks and/or ToC entries from H1 - H6 tags
Support for unit of "rem" as size e.g. font-size: 1rem;
Origin and clipping for background images and gradients controlled by CSS i.e. background-origin, background-size, background-clip
Text-outline controlled by CSS (compatible with CSS3 spec.)
Use of <dottab> enhanced by custom CSS "outdent" property
Image HTML attributes <img> added: max-height, max-width, min-height and min-width
Spotcolor can now be defined as it is used e.g. color: spot(PANTONE 534 EC, 100%, 85, 65, 47, 9);
Lists - added support for "start" attribute in <ol> e.g. <ol start="5">
Hyphenation controlled using CSS, consistent with CSS3 spec.
Line breaking improved to avoid breaks within words where HTML tags are used e.g. H<sub>2<sub>0
Line breaking in CJK scripts improved (and ability to force hanging punctuation)
Numerals in a CJK script are kept together
RTL improved support for phrases containing numerals and \ and /
Bidi override codes supported - Right-to-Left Embedding [RLE] U+202B, Left-to-Right Embedding [LRE] U+202A,
U+202C POP DIRECTIONAL FORMATTING (PDF)
Support for <base href=""> in HTML - uses it to SetBasePath for relative URLs.
HTML tag - added support for <wbr> or <wbr /> - converted to a soft-hyphen
CSS now takes precedence over HTML attribute e.g. <table bgcolor="black" style="background-color:yellow">
Added CSS support
-----------------
- max-height, max-width, min-height and min-width for images <img>
- "hyphens: none|manual|auto" as per CSS3 spec.
- Decimal mark alignment e.g. text-align: "." center;
- "rem" accepted as a valid (font)size in CSS e.g. font-size: 1.5rem
- text-outline, text-outline-width and text-outline-color supported everywhere except in tables (blur not supported)
- background-origin, background-size, background-clip are now supported everywhere except in tables
- "visibility: hidden|visible|printonly|screenonly" for inline elements e.g. <span>
- Colors: device-cmyk(c,m,y,k) as per CSS3 spec. For consistency, device-cmyka also supported (not CSS3 spec)
- "z-index" can be used to utilise layers in the PDF document
- Custom CSS property added: "outdent" - opposite of indent
The HTML elements <dottab> and <textcircle> can now have CSS properties applied to them.
Bug fixes
---------
- SVG images - path including e.g. 1.234E-15 incorrectly parsed (not recognising capital E)
- Tables - if a table starts when the Y position on page is below bottom margin caused endless loop
- Float-ing DIVs - starting a float at bottom of page and it causes page break before anything output, second new page is forced
- Tables - Warning notice now given in Table footer or header if <tfoot> placed after <tbody> and table spans page
- Columns - block with border-width wider than the length of the border line, line overflows
- Columns - block with no padding containing a block with borders but no backgound colour, borders not printed
- Table in Columns - when background color set by surrounding block element - colour missing for height of half bottom border.
- TOCpagebreakByArray() when called by function was not adding the pagebreak
- Border around block element - dashed not showing correctly (not resetting linewidth between different edges)
- Double border in table - when background colour set in surrounding block element - shows as black line between the 2 bits of double
- Borders around DIVs - "double" border problem if not all 4 sides equally - fixed
- Borders around DIVs - solid (and double) borders overlap as in tables - now fixed so mitred joins as in browser
[Inadvertently improves borders in Columns because of change in LineCap]
- Page numbering - $mpdf->pagenumSuffix etc not suppressed in HTML headers/footers if number suppressed
- Page numbering - Page number total {nbpg} incorrect - e.g. showing decreasing numbers through document, when ToC present
- RTL numerals - incorrectly reversing a number followed by a comma
- Transform to uppercase/lowercase not working for chars > ASCII 128 when using core fonts
- TOCpagebreak - Not setting TOC-FOOTER
- TOCpagebreak - toc-even-header-name etc. not working
- Parsing some relative URLs incorrectly
- Textcircle - when moved to next page by "page-break-inside: avoid"
- Bookmarks will now work if jump more than one level e.g. 0,2,1 Inserts a new blank entry at level 1
- Paths to img or stylesheets - incorrectly reading "//www.domain.com" i.e. when starting with two /
- data:image as background url() - incorrectly adjusting path on server if MPDF_PATH not specified (included in release mPDF 5.6.1)
- Image problem if spaces or commas in path using http:// URL (included in release mPDF 5.6.1)
- Image URL parsing rewritten to handle both urlencoded URLs and not urlencoded (included in release mPDF 5.6.1)
- <dottab> fixed to allow color, font-size and font-family to be correctly used, avoid dots being moved to new page, and to work in RTL
- Table {colsum} summed figures in table header
- list-style-type (custom) colour not working
- <tocpagebreak> toc-preHTML and toc-postHTML can now contain quotes
===========================
mPDF 5.6
20/01/2013
===========================
Files changed
-------------
mpdf.php
config.php
includes/functions.php
classes/meter.php
classes/directw.php
config.php changes
------------------
$this->allowedCSStags - added HTML5 tags + textcircle AND
$this->outerblocktags - added HTML5 tags
$this->defaultCSS - added default CSS properties
New features / Improvements
---------------------------
CSS support added for for min-height, min-width, max-height and max-width in <img>
Images embedded in CSS
<img src="data:image/gif;base64,...."> improved to make it more robust, and
background: url(data:image... now added to work
HTML5 tags supported
- as generic block elements: <article><aside><details><figure><figcaption><footer><header><hgroup><nav><section><summary>
- as in-line elements: <mark><time><meter><progress>
- <mark> has a default CSS set in config.php to yellow highlight
- <meter> and <progress> support attributes as for HTML5
- custom appearances for <meter> and <progress> can be made by editing classes/meter.php file
- <meter> and <progress> suppress text inside the tags
Textcircle/Circular
font: "auto" added: automatically sizes text to fill semicircle (if both set) or full circle (if only one set)
NB for this AND ALL CSS on <textcircle>: does not inherit CSS styles
attribute: divider="[characters including HTML entities]" added
<textcircle r="30mm" top-text="Text Circular Text Circular" bottom-text="Text Circular Text Circular"
divider=" • " style="font-size: auto" />
» ’ ‚ „ are now included in "orphan"-management at the end of lines
Improved CJK line wrapping (if CJK character at end of line, breaks there rather than previous wordspace)
NB mPDF 5.5 added support for <fieldset> and <legend> (omitted from ChangeLog)
Bug fixes
---------
- embedded fonts: Panose string incorrectly output as decimals - changed to hexadecimal
Only a problem in limited circumstances.
*****Need to delete all ttfontdata/ files in order for fix to have effect.
- <textCircle> background white even when set to none/transparent
- border="0" causing mPDF to add border to table CELLS as well as table
- iteration counter in THEAD crashed in some circumstances
- CSS color now supports spaces in the rgb() format e.g. border: 1px solid rgb(170, 170, 170);
- CJK not working in table following changes made in v5.4
- images fixed to work with Google Chart API (now mPDF does not urldecode the query part of the src)
- CSS <style> within HTML page crashed if CSS is too large (? > 32Kb)
- SVG image nested int eht HTML failed to show if code too large (? > 32Kb)
- cyrillic character p р at end of table cell caused cell height to be incorrectly calculated
===========================
mPDF 5.5
02/03/2012
===========================
Files changed
-------------
mpdf.php
classes/ttfontsuni.php
classes/svg.php
classes/tocontents.php
config.php
config_fonts.php
utils/font_collections.php
utils/font_coverage.php
utils/font_dump.php
Files added
-----------
classes/ttfontsuni_analysis.php
config.php changes
------------------
To avoid just the border/background-color of the (empty) end of a block being moved on to next page (</div></div>)
$this->margBuffer = 0; // Allow an (empty) end of block to extend beyond the bottom margin by this amount (mm)
config_fonts.php changes
------------------------
Added to (arabic) fonts to allow "use non-mapped Arabic Glyphs" e.g. for Pashto
'unAGlyphs' => true,
Arabic text
-----------
Arabic text (RTL) rewritten with improved support for Pashto/Sindhi/Urdu/Kurdish
Presentation forms added:
U+0649, U+0681, U+0682, U+0685, U+069A-U+069E, U+06A0, U+06A2, U+06A3, U+06A5, U+06AB-U+06AE,
U+06B0-U+06B4, U+06B5-U+06B9, U+06BB, U+06BC, U+06BE, U+06BF, U+06C0, U+06CD, U+06CE, U+06D1, U+06D3, U+0678
Joining improved:
U+0672, U+0675, U+0676, U+0677, U+0679-U+067D, U+067F, U+0680, U+0683, U+0684, U+0687, U+0687, U+0688-U+0692,
U+0694, U+0695, U+0697, U+0699, U+068F, U+06A1, U+06A4, U+06A6, U+06A7, U+06A8, U+06AA, U+06BA, U+06C2-U+06CB, U+06CF
Note -
Some characters in Pashto/Sindhi/Urdu/Kurdish do not have Unicode values for the final/initial/medial forms of the characters.
However, some fonts include these characters "un-mapped" to Unicode (including XB Zar and XB Riyaz, which are bundled with mPDF).
'unAGlyphs' => true,
added to the config_fonts.php file for appropriate fonts will
This requires the font file to include a Format 2.0 POST table which references the glyphs as e.g. uni067C.med or uni067C.medi:
e.g. XB Riyaz, XB Zar, Arabic Typesetting (MS), Arial (MS)
NB If you want to know if a font file is suitable, you can open a .ttf file in a text editor and search for "uni067C.med"
- if it exists, it may work!
Using "unAGlyphs" forces subsetting of fonts, and will not work with SIP/SMP fonts (using characters beyond the Unicode BMP Plane).
mPDF maps these characters to part of the Private Use Area allocated by Unicode U+F500-F7FF. This could interfere with correct use
if the font already utilises these codes (unlikely).
mPDF now deletes U+200C,U+200D,U+200E,U+200F zero-widthjoiner/non-joiner, LTR and RTL marks so they will not appear
even though some fonts contain glyphs for these characters.
Other New features / Improvements
---------------------------------
Avoid just the border/background-color of the (empty) end of a block being moved on to next page (</div></div>)
using configurable variable: $this->margBuffer;
The TTFontsUni class contained a long function (extractcoreinfo) which is not used routinely in mPDF
This has been moved to a new file: classes/ttfontsuni_analysis.php
The 3 utility scripts have been updated to use the new extended class:
- utils/font_collections.php
- utils/font_coverage.php
- utils/font_dump.php
Bug fixes
---------
- Border & background when closing 2 blocks (e.g. </div></div>) incorrectly being moved to next page because incorrectly
calculating how much space required
- Fixed/Absolute-positioned elements not inheriting letter-spacing style
- Rotated cell - error if text-rotate set on a table cell, but no text content in cell
- SVG images, text-anchor not working
- Nested table - not resetting cell style (font, color etc) after nested table, if text follows immediately
- Nested table - font-size 70% set in extenal style sheet; if repeated nested tables, sets 70% of 70% etc etc
- SVG setting font-size as percent on successive <text> elements gives progressively smaller text
- mPDF will check if magic_quotes_runtime set ON even >= PHP 5.3 (will now cause an error message)
- not resetting after 2 nested tags of same type e.g. <b><b>bold</b></b> still bold
- When using charset_in other than utf-8, HTML Footers using tags e.g. <htmlpageheader> do not decode correctly
- ToC if nested > 3 levels, line spacing reduces and starts to overlap
===========================
mPDF 5.4
14/02/2012
===========================
Files changed
-------------
mpdf.php
config.php
compress.php
classes/ttfontsuni.php
classes/barcode.php
classes/indic.php
classes/svg.php
examples/show_code.php ----- SECURITY RISK**
examples/example49_changelog.php
examples/example57_new_mPDF_v5-3_active_forms_b (replace example57_new_mPDF_v5-3_active_forms)
includes/out.php
mpdfi/fpdi_pdf_parser.php
Files added
-----------
classes/bmp.php
classes/directw.php
classes/form.php
classes/grad.php
classes/tocontents.php
classes/wmf.php
examples/example58_new_mPDF_v5-4_features
config.php changes
------------------
Edited: $this->allowedCSStags, $this->innerblocktags, $this->defaultCSS; (CAPTION added in each case)
Moved: Numerous $form_.. variables are now in /classes/form.php
New config variables
--------------------
$this->bookmarkStyles = array();
$this->cacheTables = true;
New methods
-----------
function CircularText()
function SetVisibility()
New/Extended CSS
----------------
box-shadow (block elements - does NOT support "inset")
text-shadow (all text elements - does NOT support "blur")
visibility: visible|hidden|printonly|screenonly (block-level elements and images IMG only)
text-transform: capitalize|uppercase|lowercase (extended to support TD/TH)
tr|td|th:nth-child(odd|even|2n+1)
color, strikethrough, underline and background-color (extended to support rotated TD/TH)
underline and strike-through (extended to support TD/TH)
underline (line colour) (extended to work correctly in watermark)
page-break-after: left|right|always (block elements and tables)
NB respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
background[-color]: extended to support rgba|cmyka|cmyk|hsla|hsl|spot
border(extended to support inline elements)
New HTML
--------
<caption>
<textcircle />
New features / Improvements
---------------------------
Tables - Zebra Stripes
Tables: overlapping rowspans (partially) supported
Tables - Disk caching
Using progress bars (or $showStats) now reports 'real' memory usage i.e. get_memory_usage(true)
Support for query string in the URLs for external stylesheets e.g. @import url("style.css?ltcyy7");
Table caption partially supported
CircularText
BookMark styling
Spread tables i.e. can split table (columns) across several pages width.
Can use chelvetica, ctimes and ccourier to specify core fonts in a non-core font document
Spread tables i.e. can split table (columns) across several pages width.
{colsum} in <tfoot> cell will insert a column total per page.
SVG embedded as island in HTML supported
Active Forms
textarea and input (text types) now accept javascript as:
onKeystroke, onValidate, onCalculate and onFormat
onChange is depracated but works as onCalculate (for textarea and input)
(PS Select still accepts onChange cf. 5.3.37)
Ledger and Tabloid added as page formats recognised. NB Ledger is same as tabloid but landscape. In mPDF, both give the same size (portrait)
so need to add -L e.g. Ledger-L for landscape.
Internal script changes
-----------------------
Changed this->k to _MPDFK throughout all scripts
Changes to color (packed binary data in string rather than array) to reduce memory usage esp in tables
Internal variables Removed
$usetableheader;
$tableheadernrows;
$tablefooternrows;
vars $ChangePage, $p_bottom_border, $img_margin_top(+) $issetcolor + other similar removed
Removed a whole load of // comments
Updates to remove some more Warning Notices (not all marked in text)
Border set on TR - changed so set on each cell, rather than retrospectively at end of TR
All references to table['text'] removed as not needed - uses ['textbuffer'] instead
OpenTag(TD) changes to reduce memory usage with tables
Includes different method to set a default timezone
fn _smallCaps does not need (undefined) $space
this->chrs and this->ords replaced by chr() and ord()
Headers in out.php updated to match those used in Output()
Change to SetFont() to improve performance time
Change to GetStringWidth() to improve performance time
Corrected copying of Glyphs 0,1,2, to all subset fonts (non-SMP/SIP), and only setting 32->127 in subset
Subset fonts (non-SMP/SIP) have additionally Unicode CMap tables (0,0,4 and 0,3,4) as well as Microsoft (3,1,4)
Subset fonts (SMP/SIP) have CMap tables (1,0,6 and 3,0,4) - rather than 1,0,6 and 3,0,6
Subset fonts (SMP/SIP) have 'name' table changed to give 1,0 and 3,0. As it is a symbol font (not Unicode encoded) :
needs to have a name entry in 3,0 (e.g. symbol) - original font will have 3,1 (i.e. Unicode)
Automatically checks for HTML code length > 100000 characters and gives error warning if
PHP < 5.2.0 (as not configurable) or increases pcre.backtrack_limit if PHP < 5.3.7
Removed/Depracated
------------------
function UseTableHeader($opt=true) fn removed / depracated
function UsePRE($opt=true) removed
$attr['REPEAT_HEADER'] == true CSS removed / depracated
$this->usepre=true; removed / depracated as never needed - always respects PRE whitespace
ToC: NB Values can no longer be set directly e.g. as in example
$mpdf->TOCheader = array(); // array as for setting header/footer
$mpdf->TOCfooter = array(); // array as for setting header/footer
$mpdf->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
$mpdf->TOCpostHTML = ''; // HTML text to appear after table of contents
$mpdf->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
Need to use TOCpagebreak either direct (or array version) or as HTML
OR if absolutley necessary, could use:
$mpdf->tocontents->TOCheader = array(); // array as for setting header/footer
$mpdf->tocontents->TOCfooter = array(); // array as for setting header/footer
$mpdf->tocontents->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
$mpdf->tocontents->TOCpostHTML = ''; // HTML text to appear after table of contents
$mpdf->tocontents->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
Further Details
===============
CSS border on inline elements
-----------------------------
Support for CSS border (and variants) on inline elements e.g. <span style="border-bottom: 1px dashed #000000;">
Border styles solid|dotted|dashed|double only are supported. Border radius not supported.
Nested inline elements will have repeat left|right borders on the nested content (unlike browsers)
Tables - Zebra Stripes
----------------------
TABLE - striped rows cf. http://dev.opera.com/articles/view/zebra-striping-tables-with-css3/
tr:nth-child(odd) { background-color: #99ff99; }
thead tr:nth-child(3n+2) { background-color: #FFBBFF; }
td:nth-child(2n+1) { background-color: #BBBBFF; }
table.zebraTable td:nth-child(2n+1) { background-color: #BBBBFF; }
table.zebraTable th:nth-child(2n+1) { background-color: #BBBBFF; }
NB mPDF does NOT correctly apply specificity to all CSS
table.zebra tbody tr:nth-child(2n+1) td { background-color: #FFFFBB; }
table.zebra tbody td:nth-child(odd) { background-color: #BBBBFF; }
should make every odd row yellow, and every odd coloumn blue, but with the row/yellow overriding the column/blue.
In mPDF the td:nth-child(odd) trumps the plain td, so the column colour wins out. You can force the effect you want by using
table.zebra tbody tr:nth-child(2n+1) td:nth-child(1n+0) { background-color: #FFFFBB; }
(The :nth-child(1n+0) selector just selects every td cell.)
Tables - Disk caching
---------------------
TABLES: using disk caching
// Using disk to cache table data can reduce memory usage dramatically, but at a cost of increased
// executon time and disk access (read and write)
$this->cacheTables = true;
NB $this->packTableData will be overridden to => true; // required for cacheTables
$this->simpleTables will be overridden to => false; // Cannot co-exist with cacheTables
Table caption
-------------
Must come immediately after <table...>
CSS caption-side and HTML align attribute of top|bottom supported (not attribute left|right)
Handled as a separate block element brought outside the table, so:
CSS will not cascade correctly on the table
width of caption block is that of page or of the block element containing the table
so alignment will be to the page-width not the table width
if table page-break-after: always, the caption will follow the pagebreak.
This does work:
<style>
.tablecaption { caption-side: bottom; text-align: left; font-weight: bold; color: green; }
</style>
...
<table>
<caption class="tablecaption">Caption title here</caption>
<tbody>
CSS visibility: printonly, screenonly
-------------------------------------
Roughly based on CSS
Works on Block elements P, DIV etc, or Image
Cannot nest / layer.
Inner blocks/image with set visibility are ignored if already set on enclosing block element.
(Block element) does not work inside table (image does)
So 'visible' does nothing but is set as default
(NB Changes output to PDF version 1.5)
Incompatible with PDFA / PDFX
'visibility'
Value: visible | hidden | (collapse | inherit)
Initial: visible
Applies to: all elements
Inherited: yes
The 'visibility' property specifies whether the boxes generated by an element are rendered.
Invisible boxes still affect layout (set the 'display' property to 'none' to suppress box generation altogether).
Values have the following meanings:
visible
The generated box is visible.
hidden
The generated box is invisible (fully transparent, nothing is drawn), but still affects layout.
Furthermore, descendants of the element will be visible if they have 'visibility: visible'.
collapse | inherit
NOT supported in mPDF
CUSTOM:
printonly | screenonly
Added VISIBILITY function
$mpdf->SetVisibility('screenonly'); or 'printonly' 'visible' or 'hidden'
(NB Changes output to PDF version 1.5)
Incompatible with PDFA / PDFX
CircularText
------------
function CircularText($x, $y, $r, $text, $align='top', $kerning=120, $fontwidth=100) {
x: abscissa of center
y: ordinate of center
r: radius of circle
text: text to be printed
align: text alignment: top or bottom. Default value: top
kerning: spacing between letters in percentage. Default value: 120. Zero is not allowed.
fontwidth: width of letters in percentage. Default value: 100. Zero is not allowed
- now uses Kerning between letters if useKerning == true (set manually see example)
BookMark styling
----------------
New configurable variable to control appearance of Bookmarks e.g.
$this->bookmarkStyles = array(
0 => array('color'=> array(0,64,128), 'style'=>'B'),
1 => array('color'=> array(128,0,0), 'style'=>''),
2 => array('color'=> array(0,128,0), 'style'=>'I'),
);
Column sums
-----------
(Also changed some preg_replace to str_replace to improve performance)
To use: just add {colsum} to any cells of the table footer <tfoot>
Add a number to specify a fixed number of decimal points e.g. <td>£{colsum2}</td> will give you £123.40
The width of the column will be calculated using the actual string {colsum} as a placeholder.
If you need the column to be wider, use underscores "_" to pad it e.g. {colsum2_____}
Spread tables
-------------
i.e. can split table (columns) across several pages width.
CSS <table style="overflow: visible">
Cannot use with:
$this->kwt - ignored
$this->table_rotate - ignored
$this->table_keep_together - ignored
$this->ColActive - cancels spread tables
Messes up with:
$mpdf->forcePortraitHeaders = true;
$mpdf->forcePortraitMargins = true;
Problems with CJK, and RTL
Will do no resizing of fonts at all.
Maximum width of column = page width i.e. will not split columns across pages - NB will keep colspan>1 on one page
If table row too high for page will die with error message.
Will override some specs for width if this creates conflicts
Recommended to specify absolute value of width on each column.
Bug fixes
=========
Dottab - if text after dottab is hyperlinked <a></a> then dots are underlined
page-break-before now respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
Annotation() function called directly with colorarray(r,g,b)
Added urldecode to _getImage to cope with ../name%20of%20image.jpg
Added urldecode AND htmlspecials_decode to href in <a> link e.g. https://www.google.com/search?hl=en&q=mpdf&filename=name%20of%20file
[barcode.php] Allow in C39 codes - will be changed to spaces
<table> inside a <div position:fixed, left:300px;> not calculating table width correctly
- leading to either upside down table or error width less than 1 character
Depracated magic_quotes_runtime() in compress.php
DIRECTW included twice in compress.php
FORMS mark up for compress.php corrected
double backslashes not preserved inside <pre> or <textarea>
font-weight and font-style not recognised in <pageheader>
Progress bars causing corrupt PDF file (out.php) changed fopen from "r" mode to "rb" (binary)
Target around image - <a href="#internaltarget"><img ... /></a> - not working
SmallCaps in <thead> error
Fonts with "name" table in format 1 not recognised correctly
Rotated table which does not fit on remaining page, forces a new page even if already at top of page
Locale causing problems - all instances of sprintf() using %.3f changed to %.3F so not locale aware
CSS border radius not implemented on fixed/absolute positioned block element
Background color in rotated table extending way beyond bottom of table
Nested table containing <thead> or <tfoot> was confused with <thead> or <tfoot> of parent table
Correct handling of spaces, < or & in textarea
<option> and <input ..> attributes value/title decoded with fn lesser_entity_decode instead of htmlspecialchars_decode to include '
line width not restored to correct value after "line-through" text in Cell()
Kannada - incorrect positioning of Reph
Forms - In <input> or <option> (select) not correctly handling HTML named entities e.g. < in value or title
Active forms - as Value or Title incorrectly showing as Euro - PDFDocEncoding fixed
Unicode data in embedded fonts not encrypted when doc encrypted
Nested block elements which are empty including innermost one, top margin of innermost block was ignored
font-size: xx% inside a block was setting on block's parent font-size
Active forms - radio buttons (removed name from Widget - leave on Radio group)
causing problems accessing field for radio buttons
When using simple tables and border-collapse, if table border set, but cell borders not set, should display table border (fixed)
position:fixed block - if neither top nor bottom nor height specified, was positioned incorrectly (y)
Leave - if top, bottom, margin-top, margiin-bottom and height are all left unspecified (or auto), will centre vertically
on the page (specific to mPDF - not consistent with CSS2.1)
But if any one of them are specified (including e.g. margin-top=0), follows CSS spec, so top is the current "static" position
background-image-opacity=0 not working on BODY or BLOCK
Lists - if LI continues after a nested List, would add as a new LI item (should continue as part of earlier LI item)
fn WriteCell() converts to 'windows-1252' when required
if multiple calls to mPDF used, cannot redefine function cmp()
internal link targets <a name="xx" /> in ToC not moved when using: page-break-inside:avoid
internal link targets <a name="xx" /> not moved when using: columns, page-break-inside:avoid, keep-with-table or table rotate
Active Forms - onChange not working for SELECT (cf. 5.3.25) Example 57 only worked by chance as JS was carried over from Select to Text field
Bug is fixed, but example file needed updating to onCalculate for the display field.
Table cell: if height set as %, currently sets it as % of page-width; instead this now ignores it.
Bengali letter Khanda Ta (U+09CE) character not recognised; was added in Unicode v4.1 and prior to this, (U+09A4 U+09CD U+200D)
so mPDF converts to this string and seems to work.
OCR characters wrong size in barcodes if using different ocr font - fixed
===========================
mPDF v5.3 (21/07/2011)
===========================
New Features
------------
- Active forms (see on-line manual for details)
- 128-bit encryption (optional) with additional user-permissions (see on-line manual)
PLEASE READ - Change in Font management
---------------------------------------
The font name imported from the font and included by mPDF in the PDF file was stripping any '-' in the name.
This is the PostScript name which is utilised by some PostScript programmes.
mPDF has been changed to leave the PostScript font name unchanged. In 99% cases no difference will be noted, but
you MUST delete all the temporary font data files cached in the /ttfontdata/ folder for this to be effective.
Minor changes
-------------
If @page CSS is used to select a first page with settings different from the default, mPDF did create a blank page
then pagebreak to the new @page settings - this has been changed so it now will start with the new page settings.
New function added: DeletePages($start_page, $end_page=-1) e.g. $mpdf->DeletePages(1);
Can be used just before calling Output()
compress.php utility extended to exclude active forms and images-svg
Bug fixes
---------
- list-style-type: (custom version, user-defined bullet) colour change not working if colour is set on the list item line
- background-image: SVG or WMF images as background-images in tables/tr/cells not working
- font-weight: bold font not always reset after inline <b>...</b> thus miscalculating width
- forms (inactive) in 'c' core fonts using unicode characters 127-255 incorrect display in input text and button text
- form elements (inactive) if in-line with mixed size fonts, error in vertical positioning of text related to box
- ToC: wrapped lines in ToC not retaining formatting e.g. bold style
- HTMLHeaders: using setAutoTopMargin="pad"; not correctly setting top margin for first page
- output headers changed: Content-length not used if server uses output compression
- embedded font subsets from fonts which contain non-BMP plane 0 characters (incl. e.g. dejavusanscondensed)
- causing Adobe Reader to create a CJK encoded font subset internally when loading interactive Forms
- Changed so unsets the flag in the subset font to show no non-BMP characters.
Configurable variables added (see config.php file):
--------------------------------------------------
All for Active Forms:
$this->useActiveForms
$this->formExportType
$this->formSubmitNoValueFields
$this->formSelectDefaultOption
$this->form_border_color
$this->form_background_color
$this->form_border_width
$this->form_border_style
$this->form_button_border_color
$this->form_button_background_color
$this->form_button_border_width
$this->form_button_border_style
$this->form_radio_color
$this->form_radio_background_color
PLUS: see additional values added to $this->allowedCSStags close to bottom of file - required for Active forms
Updated files
-------------
mpdf.php
config.php (NB as well as form stuff at top, 5.2.07 $this->allowedCSStags close to bottom of file)
compress.php
classes/ttfontsuni.php
examples/example57...
examples/formsubmit.php
===========================
mPDF v5.2 (18/06/2011)
===========================
New Features
------------------
Improvements in font handling resulting in clearer display of fonts on screen, and improved compatibility with PostScript drivers
(e.g. use with GSView/GhostScript, see below)
CJK line-breaking implemented (roughly) according to rules. Configurable variables allow control of behaviour (except in tables).
Viewer preferences: added options for initial 2 page display where you can specify whether
1st page is on left or right (cf. SetDisplayMode).
Custom list-style-type for a list (ul,ol) or a list-item (li) in which you can determine the character and colour of the bullet:
list-style-type: U+263Argb(255,0,0); - where U+263A is the Unicode HEX value of the character you want for the bullet
- character MUST be included in the font used for that list item. rgb() bit is optional
Bug fixes
---------
- Fonts: embedding a BMP TTC font (e.g. Cambria) as a full font caused error
- Table: If cell width set by CSS as %, and page-break-inside avoid requires a new page, was losing the sizing
- Table: table borders CSS parsing error; if border-width, border-style, border-color set, not inherited correctly
- Table: Table background image or gradient not working in HTMLHeader/Footer
- Table: background color set on table (anywhere) will overwrite image/gradient
- Table Background image/gradient: If left/right margin is set on table, gradient/image set on table is too wide
- Table: rotated table - height (after first page does not correctly allow for thead i.e. too much)
- Table: blank <tr></tr> causes error
- Table/Letter-spacing: If letter-spacing set inside table, not calculating table width correctly, and if oversized, freezes
- ToC: ToC at top of page (non-mirrored or already ODD) did not reset page_number if told
- Character subsititutions: characters missed if first element in a $html code e.g. WriteHTML('Not in a tag ✓');
- Kerning: kerning info: if reading font file for first time (or if not cached in ttfontdata/) did not register kerning info
- Textarea: multiple new lines run into only one newline
- QRCode - colors wrong because QRcode class only accepts RGB input (hardcoded now to always give black on white)
- QRCode always producing "Your message here"
- Columns: if transforming height of column, not always closing transform Q
- CakePHP compatibility
- compress.php - error due to markup comments in mpdf.php script file
Backwards compatibility
-----------------------
Changes in mPDF 5.2 are backwards compatible with version 5.1
Your document fonts may appear slightly different in the PDF viewer because of the changes to embedded font subsets (cf.)
The new Indic fonts may result in a change in spacing (due to the different character width of the space character from the original font)
PostScript e.g. GSView/GhostScript
----------------------------------
A number of errors have been reported when opening mPDF-created PDF files with a PostScript programme. Some of the errors were due to mPDF,
but others were due to peculiarities of GSView/GhostScript.
- Diacritic Characters were not displayed when embedding a font subset
- Fonts containing SIP/SMP characters (supplementary Unicode planes) caused errors
- Error with text justification (word-spacing) when embedding a full font can occur in some fonts*
The first 2 problems should now be fixed in v5.2
*The error with text justification can be optionally fixed by setting the configurable variable in config.php:
$this->repackageTTF = true;
When mPDF embeds a full font, it simply embeds the whole original TTF file into the PDF document. For some fonts (containing
a GSUB table) this was causing problems. $this->repackageTTF forces mPDF to repackage the original TTF file excluding some of
the tables like GSUB.
(See ADDITIONAL INFO FONTS.txt in downloaded files)
Font appearance in PDF viewer
-----------------------------
Font subsetting has been improved to include additional information in the embedded file. Overall the effects are of greater clarity
when viewing the document on a screen (it will not affect print output), but the changes are dependent on:
- the original TTF font i.e. the options that the font's author has built into the file
- the PDF viewer i.e. whether the programme chooses to use the available information
- the resolution (zoom) of the page you are viewing
(See ADDITIONAL INFO FONTS.txt in downloaded files)
Indic fonts
-----------
A new set of Indic fonts (ind_xx_1_001) is distributed with version 5.2 containing the additional font information as described above.
In addition, some changes have been made to the ASCII characters in the font from the files previously distributed:
The original files (Raghu font files) do not contain the characters a-z and A-Z. When the first version indic files were created for mPDF,
ALL of the ASCII characters (32-127) were inserted/overwritten from DejaVuSansCondensed to make the font more usable.
In the latest version, only the missing characters are taken from DejaVuSansCondensed, leaving punctuation and numerals from the original
fonts. This also means that the space character has a different width, and this will cause slight changes to the word spacing in documents.
(See ADDITIONAL INFO FONTS.txt in downloaded files)
CJK line-breaking (text wrapping)
---------------------------------
CJK (chinese-japanese-korean) text often contains no spaces. mPDF previously has wrapped text whenever a character reached the end of
the line. mPDF version 5.2 attempts to follow the line-breaking rules described for each of the languages. Configurable variables
allow some control over this behaviour, especially whether to squeeze a character into the space available at the end of a line, or
whether to allow it to overflow the right margin.
Configurable variables (see config.php file):
----------------------
Control wrapping of CJK text:
$this->allowCJKorphans = true; // FALSE=always wrap to next line; TRUE=squeeze or overflow
$this->allowCJKoverflow = false; // FALSE=squeeze; TRUE=overflow (only selected)
When Embedding full TTF font files, remakes the font file using only core tables
May improve function with PostScript printers
$this->repackageTTF = false;
Updated files
-------------
mpdf.php
compress.php
utils/font_dump.php
classes/ttfontsuni.php
config.php (3 new variables - see above)
All ttfonts/ind_*
New set of Indic fonts for PostScript compatibilty - and clearer font display
===========================
mPDF v5.1 (27/02/2011)
===========================
New Features
------------
- CSS background (images, colours or gradients) on <TR> and <TABLE>
- CSS border on <TR> (only in border-collapsed mode)
- support for Mozilla and CSS3 gradient syntax:
-moz-linear-gradient, linear-gradient
-moz-radial-gradient, radial-gradient
-moz-repeating-linear-gradient, linear-repeating-gradient
-moz-repeating-radial-gradient, radial-repeating-gradient
- expanded support for gradients (including in SVG images):
- multiple colour 'stops'
- opacity (transparency)
- angle and/or position can be specified
- gradient can be used as an image mask (custom mPDF styles: gradient-mask)
- image-orientation supported for <IMG> (similar to existing custom mPDF attribute: rotate) [CSS3]
- image-resolution supported for <IMG> [CSS3]
- background-image-resolution (custom mPDF CSS-type style) to define resolution of background images
- improved support for SVG images
- SVG and WMF images supported in background-image
- file attachments
- numeric list-styles added e.g. arabic-indic, bengali, devanagari, persian, thai [CSS3]
- font kerning supported (inter-character spacing between specific pairs)
- letter-spacing and word-spacing supported [CSS3]
- colors supported as rgb(), rgba(), hsl(), hsla(), cmyk(), cmyka(), or spot()
- spot colors supported e.g PANTONE 310 EC
- PDF/X compatible files
- optionally force use of grayscale, RGB or CMYK colorspace
- automatic colour conversion for most objects between grayscale, RGB and CMYK
Backwards compatibility
-----------------------
Most changes in mPDF 5.1 are backwards compatible with version 5.0 i.e. your documents should
look the same running 5.1 However some changes may alter display from previous versions:
- RTL (right-to-left) languages - see below
- bleed margins when using @page CSS - see below
- Default distance for "cross" from inner margin changed 10->5mm [hardcoded in fn. Footer()]
- If height set on a block element, will force a new page if set-height will not fit on page
- If table rotated, 5mm margin at bottom is now reduced to 1mm
- If image is too big for page and automatically sixed to maximum height of page, 10mm margin at bottom reduced to 1mm
Colours may appear more vibrant
-------------------------------
Unless specifically set, Adobe Reader uses the RGB colorSpace by default when displaying documents. However
if an image or gradient using transparency (or alpha channel) is included in the document, Adobe Reader
automatically sets the default colorSpace to CMYK - which makes the colours look less vibrant/bright on screen.
mPDF 5.1 now specifies by default a colorSpace RGB for each page, and this will maintain the more
vibrant colours. This is overridden if you use on of the options to restrict the colorSpace (cf.)
RTL
---
**** IMPORTANT - PLEASE READ IF USING RTL SCRIPTS ****
Handling of RTL (right-to-left) languages has been significantly rewritten, and is likely to cause
changes to the resulting files if you have previously been using mPDF. The changes have made mPDF
act more like a browser, respecting the HTML/CSS rules.
Changes include:
- the document now has a baseline direction; this determines the
- behaviour of blocks for which text-align has not been specifically set
- layout of mirrored page-margins, columns, ToC and Indexes, headers and footers
- base direction can be set by any of:
- $mpdf->SetDirectionality('rtl');
- <html dir="rtl" or style="direction: rtl;">
- <body dir="rtl" or style="direction: rtl;">
- base direction is an inherited CSS property, so will affect all content, unless...
- direction can be set for all HTML block elements e.g. <DIV><P><TABLE><UL> etc using
- CSS property < style="direction: rtl;">
- direction can only be set on the top-level element of nested lists
- direction can only be set on <TABLE>, NOT on THEAD, TBODY, TD etc.
- nested tables CAN have different directions
- NOTE that block/table margins/paddings are NOT reversed by direction
NB mPDF <5.1 reversed the margins/paddings for blocks when RTL set.
- language (either CSS "lang", using Autofont, or through initial set-up e.g. $mpdf = new mPDF('ar') )
no longer affects direction in any way.
NB config_cp.php has been changed as a result; any values of "dir" set here are now ineffective
- default text-align is now as per CSS spec: "a nameless value which is dependent on direction"
NB default text-align removed in default stylesheet in config.php
- once text-align is specified, it is respected and inherited
NB mPDF <5.1 reversed the text-align property for all blocks when RTL set.
- the configurable value $rtlcss is depracated, as it is no longer required
- improved algorithm for dtermining text direction
- english word blocks are handled in text reversal as one block i.e. dir="rtl"
[arabic text] this will not be reversed [arabic text]
- arabic numerals 0-9 handled correctly
Although the control of direction for block elements is now more configurable, the control of
text direction (RTL arabic characters) remains fully automatic and unconfigurable.
<BDO> etc has no effect. Enclosing text in silent tags can sometimes help e.g.
content<span>[arabic text]</span>content
Justified text
--------------
Text-align: justify - no longer uses configurable variable $jSpacing= C | W | ''
The default value is for mixed letter- and word-spacing, set by jSWord and jSmaxChar
If a line contains a cursive script (RTL or Indic [devanagari, punjabi, bengali]) then it prevents letter-spacing
for justification on that line - effectively the same as setting letter-spacing:0
Spacing values have been removed from the config_cp.php configuration file, so the "lang" property
(in config_cp) no longer determines justification behaviour (this includes the use of Autofont()).
When using RTL or Indic [devanagari, punjabi, bengali] scripts, you should set CSS letter-spacing:0
whenever you use text-align:justify.
@page media
-----------
When using @page to create a print publication with page-size less than sheet-size
- bleed margin is now configurable (also crop- and cross-mark margins)
- backgrounds/gradients/images now use the bleed box as their "container box"
- odd-header-name: supports the value "_default" - allows current non-HTML header to remain unchanged
- marks: crop cross; i.e. both together supported
- background-image-opacity and background-image-resize now work with @page CSS
SVG images - extended support
-----------------------------
- support for spreadMethod property for gradients (repeat and reflect)
- support for style="font-family; font-size; font-style; font-weight" i.e. inline CSS
- when viewPort="" and width="" height="" all specified, uses width to set SVG size of a "pixel"
- support for opacity and multiple "stops" (and colorspace) in gradients
Minor Enhancements
------------------
- support for colors as rgb(87%, 56%, 25%) [used especially in SVG]
- added option of "NoPrintScaling" in SetDisplayPreferences
- compress.php - now combines BACKGROUND-IMAGES and GRADIENTS as BACKGROUNDS, and added PROGRESS-BAR
- table with THEAD row will force a new page if no room for the THEAD AND a row from TBODY
- Small-Caps now works properly together with text-align justify
- embedded font subsets restructured (minor) for greater compatibility e.g. with Postscript printers
- PDF/A will convert everything except grayscale to RGB (by default) or CMYK (optionally)
Bug fixes
---------
- Display changed to CMYK colour gamut when document contained an object with transparency set.
Now will retain RGB colorspace (brighter colours)
- If using dir="rtl", tables containing nested tables were not properly reversed
- "text-rotate: 0" set in CSS stylesheet did not 'undo' any text-rotate set on the row (TR)
- Malayalam - character re-ordering
- If height set on a block element, was not taking account of padding top/bottom
- embedded font subsets: error in array of Font Widths fixed
- <style>..</style> containing /* import url() */ the comments were not ignored
- If call mPDF class more than once, error using multiple barcodes or gif files because classes not reinstantiated
- Floating blocks were collapsing bottom/top margins - incorrectly
- Table: if colspan>1 contents are wider than the width of the included columns, did not increase column width(s) to accommodate
- Resizing table - script hanging and new page forced when not required (still)