380 lines
16 KiB
Plaintext
380 lines
16 KiB
Plaintext
|
===========================
|
|||
|
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><3E>{colsum2}</td> will give you <20>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
|