Project import generated by Copybara.
GitOrigin-RevId: 63746295f1a5ab5a619056791995793d65529e62
diff --git a/src/lib/fpdf-easytable/LICENSE b/src/lib/fpdf-easytable/LICENSE
new file mode 100644
index 0000000..00d2e13
--- /dev/null
+++ b/src/lib/fpdf-easytable/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/Pics/a.png b/src/lib/fpdf-easytable/Pics/a.png
new file mode 100644
index 0000000..10c6f5b
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/a.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/b.png b/src/lib/fpdf-easytable/Pics/b.png
new file mode 100644
index 0000000..8a31a08
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/b.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/c.png b/src/lib/fpdf-easytable/Pics/c.png
new file mode 100644
index 0000000..a63817f
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/c.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/d.png b/src/lib/fpdf-easytable/Pics/d.png
new file mode 100644
index 0000000..bd146c8
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/d.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdf.png b/src/lib/fpdf-easytable/Pics/fpdf.png
new file mode 100644
index 0000000..955fa7f
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdf.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdflogo.gif b/src/lib/fpdf-easytable/Pics/fpdflogo.gif
new file mode 100644
index 0000000..60b628a
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdflogo.gif
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdflogo.png b/src/lib/fpdf-easytable/Pics/fpdflogo.png
new file mode 100644
index 0000000..2d96301
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdflogo.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/julytemperatures.png b/src/lib/fpdf-easytable/Pics/julytemperatures.png
new file mode 100644
index 0000000..3003f53
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/julytemperatures.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/monthtemperature.png b/src/lib/fpdf-easytable/Pics/monthtemperature.png
new file mode 100644
index 0000000..5538ef9
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/monthtemperature.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/snow.png b/src/lib/fpdf-easytable/Pics/snow.png
new file mode 100644
index 0000000..02a21c7
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/snow.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/temperature.png b/src/lib/fpdf-easytable/Pics/temperature.png
new file mode 100644
index 0000000..cf527ca
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/temperature.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png b/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png
new file mode 100644
index 0000000..93fffe3
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/tick.png b/src/lib/fpdf-easytable/Pics/tick.png
new file mode 100755
index 0000000..42ded6b
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/tick.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/wind.png b/src/lib/fpdf-easytable/Pics/wind.png
new file mode 100644
index 0000000..7b8db4a
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/wind.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/README.md b/src/lib/fpdf-easytable/README.md
new file mode 100644
index 0000000..6dc8785
--- /dev/null
+++ b/src/lib/fpdf-easytable/README.md
@@ -0,0 +1,963 @@
+# FPDF EasyTable
+
+It is a PHP class that provides an easy way to make tables for PDF documents that are generated with the
+[FPDF library](http://www.fpdf.org).
+
+Making tables for PDF documents with this class is as easy and flexible as
+making HTML tables. And using CSS-style strings we can customize the look of
+the tables in the same fashion HTML tables are styling with CSS.
+
+No messy code with confusing arrays of attributes and texts.
+
+No complicated configuration files.
+
+Building and styling a table with easyTable is simple, clean and fast.
+
+```
+ $table=new easyTable($pdf, 3, 'width:100;');
+
+ $table->easyCell('Text 1', 'rowspan:2; valign:T');
+ $table->easyCell('Text 2', 'bgcolor:#b3ccff; rowspan:2');
+ $table->easyCell('Text 3');
+ $table->printRow();
+
+ $table->rowStyle('min-height:20');
+ $table->easyCell('Text 4', 'bgcolor:#3377ff; rowspan:2');
+ $table->printRow();
+
+ $table->easyCell('Text 5', 'bgcolor:#99bbff;colspan:2');
+ $table->printRow();
+
+ $table->endTable();
+```
+
+# Content
+
+- [Features](#features)
+- [Comparisons](#comparisons)
+- [Examples](#examples)
+- [Requirements](#requirements)
+- [Manual Install](#manual-install)
+- [Quick Start](#quick-start)
+- [Documentation](#documentation)
+- [Fonts And UTF8 Support](#fonts-and-utf8-support)
+- [Using with FPDI](#using-with-fpdi)
+- [Tag based font style](#tag-based-font-style)
+- [User units](#user-units) **_NEW FEATURE!!_**
+- [Common error](#common-error)
+- [Get In Touch](#get-in-touch)
+- [Donations](#donations)
+- [License](#license)
+
+# Features
+
+- Table and columns width can be defined in [user units](#user-units) or percentage
+
+- Every table cell is a fully customizable
+ (font family, font size, font color, background color, position of the text,
+ vertical padding, horizontal padding...)
+
+- Cells can span to multiple columns and rows
+
+- Tables split automatically on page-break
+
+- Set of header row, so the header can be added automatically on every new page
+
+- Attribute values can be defined globally, at the table level (affect all the cells in the table),
+ at the row level (will affect just the cells in that row), or locally at the cell level
+
+- Rows can be set to split on page break if it does not fit in the current page or to be printed
+ on the next page
+
+- Images can be added to table cells
+
+- Text can be added on top or below an image in a cell
+
+- [UTF8 Support](#fonts-and-utf8-support)
+
+- [Tag based font style](#tag-based-font-style) which allows to mix different font families, font styles, font size and font color in the same cell! **_NEW FEATURE!!_**
+
+- [Links](#tag-based-font-style) **_NEW FEATURE!!_**
+
+
+
+
+# Comparisons
+
+**easyTable vs kind-of-HTML-to-PDF**
+
+To use HTML code to make tables for PDF documents is a kind of sloppy hack. To begin with
+to convert HTML code into a kind of FPDF you need a parcer meaning there is a penalty in performace;
+and second the results are very poor.
+
+*HTML code*
+
+ <table align:"right" style="border-collapse:collapse">
+ <tr>
+ <td rowspan="2" style="width:30%; background:#ffb3ec;">Text 1</td>
+ <td colspan="2" style="background:#FF66AA;">Text 2</td>
+ </tr>
+ <tr>
+ <td style="width:35%; background:#33ffff;">Text 3 </td>
+ <td style="width:35%; background:#ffff33;">Text 4 </td>
+ </tr>
+ </table>
+
+*easyTable code*
+
+ $table=new easyTable($pdf, '%{30, 35, 35}', 'align:R; border:1');
+ $table->easyCell('Text 1', 'rowspan:2; bgcolor:#ffb3ec');
+ $table->easyCell('Text 2', 'colspan:2; bgcolor:#FF66AA');
+ $table->printRow();
+
+ $table->easyCell('Text 3', 'bgcolor:#33ffff');
+ $table->easyCell('Text 4', 'bgcolor:#ffff33');
+ $table->printRow();
+ $table->endTable(5);
+
+
+
+# Examples
+
+- [Evolution of a table](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-1.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example1.php)
+
+- [Table with header](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-2.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example2.php)
+
+- [Simple invoice](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-3.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example3.php)
+
+- [More examples](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-4.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example4.php)
+
+
+# Requirements
+
+- PHP 5.6 or higher
+- [FPDF 1.81](http://www.fpdf.org).
+- exfpdf.php (included in this project)
+
+# Manual Install
+
+Download the EasyTable class and FPDF class and put the contents in a directory in your project structure.
+Be sure you are using [FPDF 1.81](http://www.fpdf.org).
+
+# Quick Start
+
+- create a fpdf object with exfpdf class (extension of fpdf class)
+- create a easyTable object
+```
+ $table=new easyTable($pdf, 3, 'border:1');
+```
+- add some rows
+```
+ $table->easyCell('Text 1', 'valign:T');
+ $table->easyCell('Text 2', 'bgcolor:#b3ccff;');
+ $table->easyCell('Text 3');
+ $table->printRow();
+
+ $table->rowStyle('min-height:20; align:{C}'); // let's adjust the height of this row
+ $table->easyCell('Text 4', 'colspan:3');
+ $table->printRow();
+```
+- when it is done, do not forget to terminate the table
+```
+ $table->endTable(4);
+```
+ [Result](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.php)
+
+
+# Documentation
+
+**function __construct( FPDF-object $fpdf_obj, Mix $num_cols[, string $style = '' ])**
+
+*Description:*
+
+ Constructs an easyTable object
+
+*Parameters:*
+
+fpdf_obj
+
+ the current FPDF object (constructed with the FPDF library)
+ that is being used to write the current PDF document
+
+num_cols
+
+ this parameter can be a positive integer (the number of columns)
+ or a string of the following form
+
+ I) a positive integer, the number of columns for the table. The width of every
+ column will be equal to the width of the table (given by the width property) divided by
+ the number of columns ($num_cols)
+
+ II) a string of the form '{c1, c2, c3,... cN}'. In this case every element in the curly
+ brackets is a positive numeric value that represent the width of a column. Thus,
+ the n-th numeric value is the width of the n-th colum. If the sum of all the width of
+ the columns is bigger than the width of the table but less than the width of the document,
+ the table will stretch to the sum of the columns width. However, if the sum of the columns
+ is bigger than the width of the document, the width of every column will be reduce proportionally
+ to make the total sum equal to the width of the document.
+
+ III) a string of the form '%{c1, c2, c3,... cN}'. Similar to the previous case, but this time
+ every element represents a percentage of the width of the table. In this case it the sum of
+ this percentages is bigger than 100, the execution will be terminated.
+
+style
+
+ the global style for the table (see documentation) a semicolon-separated string of attribute
+ values that defines the default layout of the table and all the cells and their contents
+ (see Documentation section in README.md)
+
+*Examples:*
+```
+ $table= new easyTable($fpdf, 3);
+ $table= new easyTable($fpdf, '{35, 45, 55}', 'width:135;');
+ $table= new easyTable($fpdf, '%{35, 45, 55}', 'width:190;');
+```
+
+*Return value:*
+
+ An easyTable object
+
+
+**function rowStyle( string $style )**
+
+*Description:*
+
+ Set or overwrite the style for all the cells in the current row.
+
+*Parameters:*
+
+style
+
+ a semicolon-separated string of attribute values that defines the
+ layout of all the cells and its content in the current row
+ (see Documentation section in README.md)
+
+*Return values*
+
+ Void
+
+*Notes:*
+
+ This function should be called before the first cell of the current row
+
+
+**function easyCell( string $data [, string $style = '' ])**
+
+*Description:*
+
+ Makes a cell in the table
+
+*Parameters:*
+
+data
+ the content of the respective cell
+
+style (optional)
+ a semicolon-separated string of attribute values that defines the
+ layout of the cell and its content (see Documentation section in README.md)
+
+*Return value*
+
+ void
+
+
+
+**function printRow ( [ bool $setAsHeader = false ] )**
+
+*Description:*
+
+ This function indicates the end of the current row.
+
+*Parameters:*
+
+setAsHeader (optional)
+ When it is set as true, it sets the current row as the header
+ for the table; this means that the current row will be printed as the first
+ row of the table (table header) on every page that the table splits on.
+ Remark: 1. In order to work, the table attribute split-row should set as false.
+ 2. Just the first row where this parameter is set as true will be
+ used as header any other will printed as a normal row.
+ 3. For row headers with cells that spans to multiple rows,
+ the last the parameter should be set in the last row
+ of the group. See [example 2](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-2.pdf)
+
+*Return values*
+
+ Void
+
+*Note:*
+
+ This function will print the current row as far as the following holds:
+```
+ total_rowspan=0
+```
+ where total_rowspan is set as
+```
+ total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
+```
+
+**function endTable( [ int $bottomMargin = 2 ])**
+
+*Description:*
+
+ Unset all the data members of the easyTable object
+
+*Parameters:*
+
+bottomMargin (optional)
+
+ Optional. Specify the size in [user units](#user-units) of the bottom margin for the table. Default 2 in user units.
+
+ If it is negative, the vertical position will be set before
+ the end of the table.
+
+*Return values*
+
+ Void
+
+
+**Style String**
+
+In the same fashion as in-line CSS style, Easy Table uses
+strings of semicolon-separated pairs of properties/values to
+define the styles to be applied to the different parts of
+a table. A value set on a property at the table level will be inherited
+by all the rows (therefore all the cells) in the table. A value set
+on a property at the row level, will be overwrite the value inherited from the table
+and, will be passed to all the cells in that row, unless a cell
+defines its own value for that property.
+
+In what follows, we are going to use the following notation:
+
+ C=cell
+ R=row
+ T=table
+
+**PROPERTY** [C/R/T] means that the property PROPERTY can be set on cells, rows, table.
+
+Full list of properties:
+
+**width** [T]
+
+The width property sets the width of a table.
+This property can be defined in [user units](#user-units) or in percentage of the width of the document.
+
+Syntax:
+
+ width:user-units|%;
+
+Examples:
+
+ width:145;// 145mm if the user units is mm
+ width:70%;
+
+Default: the width of the document minus the right and left margin.
+
+**border** [C/R/T]
+
+The border property indicates if borders must be drawn around the cell or the cells.
+The value can be either a number:
+
+ 0: no border
+ 1: frame
+
+or a string containing some or all of the following characters (in any order):
+
+ L: left border
+ T: top border
+ R: right border
+ B: bottom border
+
+Default value: 0.
+
+
+**border-color** [C/R/T]
+
+The border-color property is used to set the colour of the border to be drawn
+around the cells. The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+ border-color: Hex |RGB;
+
+Example:
+
+ border-color:#ABCABC;
+ border-color:#ABC;
+ border-color:79,140, 200;
+
+Default value: the current drawn colour set in the document
+
+Note: beware that when set this attribute at the cell level, because the borders of the cells
+ overlap each other, the results might not be as expected on adjacent cell with different
+ border color.
+
+
+**border-width** [T]
+
+The border-width property is used to set the width of the lines the border is made of.
+
+Syntax:
+
+ border-width:0.5;
+
+Default value: the current drawing line width of the document.
+
+Note: beware that if the border-width is set to thick, the border might overlap the content
+ of the cells. In that case you will have to set appropriate paddingX and paddingY on the cells.
+ (See paddingX and paddingY properties below).
+
+
+**split-row** [T]
+
+This property indicate if a row that is at the bottom of the page should be split or not
+when it reaches the bottom margin, except for rows that contains cell that span
+to different rows, in this case the row splits. By the fault, any row that does not fit in the page
+is printed in the next page. Setting the property to false, it will split any row
+between the pages.
+
+Example:
+
+ split-row:false;
+
+
+**l-margin** [T]
+
+This property indicate the distance from the left margin from where the table should start.
+
+Syntax:
+
+ l-maring:user-units;
+
+Example:
+
+ l-maring:45;
+
+Default value: 0.
+
+**min-height** [R]
+
+The min-height property set the minimum height for all the cells (with rowspan:1) in that
+specific row.
+
+Syntax:
+
+ min-height:user-units;
+
+Example:
+
+ min-height:35;
+
+
+Default value: 0.
+
+**align** [C/R/T]
+
+This property indicates the horizontal alignment of the element in which it is set.
+The values can be:
+
+ L: to the left
+ C: at the centre
+ R: to the right
+ J: justified (applicable just on cells)
+
+Syntax for tables is:
+
+ align:A;
+ align:A{A-1A-2A-3A-4...};
+
+Explanation: the first character indicates the horizontal alignment of the table
+(as far as l-margin is not set), while the optional string is a string of the form:
+{A-1A-2A-3A-4...} (curly brackets included) where A-1, A-2, A-3, A-4, etc. can be L, C, R or J and
+the A-n letter indicates the horizontal alignment for the content of all the cells in the
+n-th row. If the number of rows is greater than the length of the optional string,
+the overflowed rows will have default alignment to the left (L).
+
+Example: (table with 10 rows)
+
+ align:R{CCCLLJ};
+
+means that the table is aligned to the right of the document, the content of the
+cells in the first three rows will be aligned at the centre, the content of the
+cells in the 4-th and 5-th rows will be aligned to the left and the the content of cells in
+the 6-th row will be aligned to the right, while the rest of the cell contents in the remaining
+rows will be aligned to the left.
+
+Syntax for rows is
+
+ align:{A-1A-2A-3A-4...};
+
+where A-1, A-2,... etc are as in the table case and with the same functionality:
+the A-n character indicates the alignment of the cells in the n-th column that are
+in the respective row.
+
+Example:
+
+ align:{LRCCRRLJ}
+
+Syntax for cells is
+
+ align:A;
+
+where A can be L, C, R, J.
+
+Default value: L.
+
+**valign** [C/R/T]
+
+The property valign defines the vertical alignment of the content of the cells.
+The values can be:
+
+ T: top
+ M: middle
+ B: bottom
+
+Example:
+
+ valign:M;
+
+Default: T.
+
+Remark: *when using valign property on cell with image property set (see below),
+if the cell does not have text, the behaviour of valign is as expected, this is,
+the image is positioned accordingly to the value of valign. However, if the cell contains
+text, the image and the text are valign-ed in the middle of the cell but
+top (T) or middle (M) valign set the text on top of the image, while valign:B set the text
+under the image.*
+
+
+**bgcolor** [C/R/T]
+
+The bgcolor property defines the background colour of the cells
+The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+ bgcolor:Hex | RGB;
+
+Example:
+
+ bgcolor:#ABCABC;
+ bgcolor:#ABC;
+ bgcolor:79,140, 200;
+
+Default: the current fill color set in the document
+
+
+**font-family** [C/R/T],
+
+It can be either a name defined by the FPDF method AddFont() or
+one of the standard families (case insensitive):
+
+ Courier (fixed-width)
+ Helvetica or Arial (synonymous; sans serif)
+ Times (serif)
+ Symbol (symbolic)
+ ZapfDingbats (symbolic)
+
+It is also possible to pass an empty string. In that case, the current family is kept.
+
+Example:
+
+ font-family:times;
+
+Default: the font-family set in the document.
+
+**font-style** [C/R/T]
+
+Possible values are (case insensitive):
+
+ empty string: regular
+ B: bold
+ I: italic
+ U: underline
+
+or any combination. The default value is regular. Bold and italic styles do not
+apply to Symbol and ZapfDingbats.
+
+Example:
+
+ font-style:IBU
+
+Default: empty;
+
+**font-size** [C/R/T]
+
+Font size in points.
+
+Example:
+
+ font-size:16;
+
+Default: the current font size of the document.
+
+**font-color** [C/R/T]
+
+This property defines the color of the font for the cells
+The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+ font-color:Hex |RGB;
+
+Example:
+
+ font-color:#ABCABC;
+ font-color:#ABC;
+ font-color:79,140, 200;
+
+Default value: the current font color set in the document
+
+**line-height** [C/R/T]
+
+The line-height property specifies the line height.
+
+Syntax:
+
+ line-height:number;
+
+Example:
+
+ line-height:1.2;
+
+Default value: 1.
+
+**paddingX** [C/R/T]
+
+The paddingX property sets the left and right padding (space) of the cells.
+
+Syntax:
+
+ paddingX:user-units;
+
+Example:
+
+ paddingX:4;
+
+Default: 0.5.
+
+**paddingY** [C/R/T]
+
+The paddingY property sets the top and bottom padding (space) of the cells.
+
+Syntax
+
+ paddingY:user-units;
+
+Example:
+
+ paddingY:3;
+
+Default: 1.
+
+**colspan** [C]
+
+The colspan attribute defines the number of columns a cell should span.
+
+Syntax:
+
+ colspan:4;
+
+Default 1
+
+**rowspan** [C]
+The rowspan attribute defines the number of rows a cell should span.
+
+Syntax:
+
+ rowspan:2;
+
+Default 1
+
+**img** [C]
+The img attribute defines the image and its dimensions to be set in the cell.
+
+Syntax:
+
+ img:image.png,w80,h50;
+ img:image.png,h50;
+ img:image.png;
+
+If no dimensions are specified, the image dimensions are calculate proportionally
+to fit the width of the cell.
+If one out of the two dimensions (width or height) is specified but not the other
+the one that is not specified is calculated proportionally.
+Default value: empty.
+
+# Fonts And UTF8 Support
+
+1. Get the ttf files for the font you want to use and save them in a directory
+ Fonts.
+
+ **NOTE:** If you want to use bold, italic or bold-italic font styles you need
+ the respective font files too.
+
+ **NOTE:** the font must contain the characters you want to use
+
+2. Using the script makefont.php part of FPDF library (in the makefont directory)
+
+ me@laptop:/path/to/FPDF/makefont$ php makefont.php /path/to/Fonts/My_font.ttf ENCODE
+
+ Note: use the right encode in order to use utf-8 symbols [FPDF: Tutorial 7](http://www.fpdf.org/en/tutorial/tuto7.htm).
+
+ **NOTE:** the font must contain the characters corresponding to the selected encoding.
+
+3. The last command will create the files My_font.php and My_font.z in
+ the directory /path/to/FPDF/makefont move those file to the directory
+ /path/to/FPDF/font
+
+4. You are ready to use your fonts in your script:
+
+ $pdf = new PDF();
+ $pdf->AddFont('Cool-font','','My_font.php'); // Define the new font to use in the PDF object
+
+ // more code
+
+ $table=new easyTable($pdf, ...);
+ $table->easyCell(iconv("UTF-8", "ENCODE",'Hello World'), 'font-color:#66686b;font-family:Cool-font');
+ //etc...
+
+5. [Example](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf):
+ we get a ttf font file (my_font.ttf) that support the language and symbols we want to use.
+ For this example we are using Russian. The encode that we are using for Russian is KOI8-R
+
+ php makefont.php /path/to/font_ttf/my_font.ttf KOI8-R
+
+ then we copy the resulting files to the font directory of FPDF library.
+
+ Then, in our script:
+
+ $pdf = new PDF();
+
+ $pdf->AddFont('FontUTF8','','my_font.php');
+
+ $pdf->SetFont('FontUTF8','',8); // set default font for the document
+
+ $table=new easyTable($pdf, ...);
+
+ $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу")); // Notice the encode KOI8-R
+
+ or
+
+ $pdf = new PDF();
+ $pdf->AddPage();
+ $pdf->SetFont('Arial','B',16);
+
+ $pdf->AddFont('FontUTF8','','my_font.php');
+
+ $table=new easyTable($pdf, 5, '...');
+ $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу"), 'font-family:FontUTF8;');
+
+
+ NOTE: For more about the right encode visit [FPDF: Tutorial 7](http://www.fpdf.org/en/tutorial/tuto7.htm)
+ and [php inconv](http://php.net/manual/en/function.iconv.php)
+
+# Using with FPDI
+
+If your project requieres easyTable and [FPDI](https://www.setasign.com/products/fpdi/about/), this is
+how you should do it. Assuming that fpdf.php, easyTable.php, exfpdf.php, fpdi.php and any
+other files from this libraries are in the same directory.
+
+The class exfpdf should extends the class fpdi instead of the class fpdf. So in exfpdf.php:
+
+ <?php
+
+ class exFPDF extends FPDI
+ {
+ etc
+ etc
+
+And in your project:
+
+ <?php
+ include 'fpdf.php';
+ include 'fpdi.php';
+ include 'exfpdf.php';
+ include 'easyTable.php';
+
+ //$pdf = new FPDI(); remember exfpdf is extending the fpdi class
+ $pdf=new exFPDF(); // so we initiate exFPDF instead of FPDI
+
+ // add a page
+ $pdf->AddPage();
+ // set the source file
+ $pdf->setSourceFile("example-2.pdf");
+ // import page 1
+ $tplIdx = $pdf->importPage(1);
+ // use the imported page and place it at point 10,10 with a width of 100 mm
+ $pdf->useTemplate($tplIdx, 10, 10, 100);
+
+ //add another page
+ $pdf->AddPage();
+ $pdf->SetFont('helvetica','',10);
+
+ $table1=new easyTable($pdf, 2);
+ $table1->easyCell('Sales Invoice', 'font-size:30; font-style:B; font-color:#00bfff;');
+ $table1->easyCell('', 'img:fpdf.png, w80; align:R;');
+ $table1->printRow();
+ //etc
+ //etc
+
+# Tag Based Font Style
+
+The new version of FPDF EasyTable can handle tag-based font styles at string level.
+
+ $table->easyCell('Project: EasyTable', 'font-family:lato; font-size:30; font-color:#00bfff;');
+
+now we can do:
+
+ $table->easyCell('<b>Project:</b> <s "font-size:20; font-family:times">EasyTable</s>', 'font-family:lato; font-size:30; font-color:#00bfff;');
+
+The font style set at the string level will over write any other font style set at the cell, row or table level.
+
+Please see the [example](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf)
+ * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.php)
+
+Tags
+
+**<s "fontstyle"></s>**
+
+font-style is a semicolon separated string which can include: font-size, font-family, font-style, font-color, href;
+
+ Note: Remember to define every font your project needs.
+
+ $pdf->AddFont('MyFabFont','','my_font.php');
+ $pdf->AddFont('MyFabFont','B','my_font_bold.php');
+ $pdf->AddFont('MyFabFont','I','my_font_italic.php');
+ $pdf->AddFont('MyFabFont','BI','my_font_bolditalic.php');
+
+font-color can be Hex color code or RGB color code.
+
+**Shortcuts**
+
+ <b></b> is equalt to: <s "font-style:B"></s>
+ <i></i> is equalt to: <s "font-style:I"></s>
+
+**Tags can be nested**
+
+When nested tags are used, the result is similar to the case in HTML documents.
+
+ <b>Helo <i>world</i></b>
+
+ <s "font-style:I; font-color#abc123; font-family:times">Hello <s "font-style:B; font-family:lato; font-size:20">world</s></s>
+
+- Different font style can be applied to the letters of a word.
+
+````
+ <b>H<i>e</i><s "font-family:myfont">ll<s "font-size">o</s></s></b>
+````
+
+**Links**
+
+Use the property 'href' to set links
+
+ <b>Helo <s "font-family:my_fab_font; font-color:#AABBCC; href:http://www.example.com">world</s></b>
+
+
+**Escape sequence**
+
+The sequence '\\<s' is parced as '<s'
+
+ <b>Helo <s "font-family:my_fab_font;">\<sammy@example.com></s></b>
+
+
+# User units
+
+EasyTable supports the same user units (pt/mm/cm/in) supported by [FPDF: construct](http://www.fpdf.org/en/doc/__construct.htm).
+Bare in mind that any unit related setting (width, border, etc.) needs to be in the respective unit set at the
+top document. For example if the units for the document is set as inch, then, all the settings
+unit related will be considered in the same user units, for instance min-height:1.2; will mean 1.2in.
+
+# Common Error
+
+A very typical situation is: *"EasyTable works in my localhost but it does not
+work in remote server"*... Seriously, what on earth it has to do with EasyTable?... And the error
+reported is
+ Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has
+ already been output, can't send PDF file... etc etc...
+
+This happens because when the server runs the script to output a PDF document, it sets the headers
+as PDF document, however something is trying to output text or html code (for instance an exception or an
+echo statment) so the server can not change the header for the respective output.
+is outputting html/txt data.
+
+Another very common error is to forget to add the fonts and its appropiated style (I, B, IB) used in the document.
+Let's suppose that in your document you use "my_favourite_font". Then you need to add
+
+ $pdf->AddFont('MyFabFont','','my_favourite_font.php');
+
+if you are using the bold version of it, then you must add:
+
+ $pdf->AddFont('MyFabFont','B','my_favourite_font_bold.php');
+
+if you are using the italic version, then you need to add:
+
+ $pdf->AddFont('MyFabFont','I','my_favourite_font_italic.php');
+
+if you are using the bold-italic, then
+
+ $pdf->AddFont('MyFabFont','BI','my_favourite_font_bolditalic.php');
+
+You need to generate each of the font files that needs to be added in your project
+('my_favourite_font_bold.php', 'my_favourite_font_italic.php', 'my_favourite_font_bolditalic.php'),
+refer to your font documentation and see [Fonts And UTF8 Support](https://github.com/fpdf-easytable/fpdf-easytable#fonts-and-utf8-support).
+
+# Get In Touch
+
+Your comments and questions are welcome: easytable@yandex.com (with the subject: EasyTable)
+
+# Other projects
+
+- [Simple Unit Test](https://github.com/fpdf-easytable/simple_unit_test) PHP unit test as it should be.
+- [SimpleCharts.js](https://github.com/fpdf-easytable/simpleCharts.js)
+- [Ajax Server Response Hander](https://github.com/fpdf-easytable/ajax_server_response_hander) Simplify server response from ajax calls
+- [Crypt](https://github.com/fpdf-easytable/Crypt)
+- [Duplicate Image Finder](https://github.com/volatilflerovium/Duplicate_Image_Finder)
+- [Classic 3D-Puzzles](https://github.com/volatilflerovium/3D-Puzzles)
+
+# Donations
+
+Any monetary contribution would be appreciated :-)
+
+If you are using this for the company you work for, they are getting the money, you are getting
+the medals and I am getting nothing! Is that fair?
+
+It does cost NOTHING to push the freaky star button!!
+
+[![Donate](https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JALWQVBS2KGQC)
+
+
+# License
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
+
+
+
diff --git a/src/lib/fpdf-easytable/basic_example.pdf b/src/lib/fpdf-easytable/basic_example.pdf
new file mode 100644
index 0000000..0acbcc0
--- /dev/null
+++ b/src/lib/fpdf-easytable/basic_example.pdf
Binary files differ
diff --git a/src/lib/fpdf-easytable/basic_example.php b/src/lib/fpdf-easytable/basic_example.php
new file mode 100644
index 0000000..fd46cec
--- /dev/null
+++ b/src/lib/fpdf-easytable/basic_example.php
@@ -0,0 +1,49 @@
+<?php
+ include 'fpdf.php';
+ include 'exfpdf.php';
+ include 'easyTable.php';
+
+ $pdf=new exFPDF();
+ $pdf->AddPage();
+ $pdf->SetFont('helvetica','',10);
+
+ $pdf->AddFont('lato','','Lato-Regular.php');
+
+ $pdf->Write(6, 'Some writing...');
+
+ $pdf->Ln(5);
+
+ $pdf->Write(6, 'Integer eget risus non dui scelerisque consectetur. Integer eleifend in nibh in mattis. Aenean eu justo quis mauris tempus eleifend. Praesent malesuada turpis ut justo semper tempor. Integer varius, nisi non elementum molestie, leo arcu euismod velit, eu tempor ligula diam convallis sem. Sed ultrices hendrerit suscipit. Pellentesque volutpat a urna nec placerat. Etiam auctor dapibus leo nec ullamcorper. Nullam id placerat elit. Vivamus ut quam a metus tincidunt laoreet sit amet a ligula. Sed rutrum felis ipsum, sit amet finibus magna tincidunt id. Suspendisse vel urna interdum lacus luctus ornare. Curabitur ultricies nunc est, eget rhoncus orci vestibulum eleifend. In in consequat mi. Curabitur sodales magna at consequat molestie. Aliquam vulputate, neque varius maximus imperdiet, nisi orci accumsan risus, sit amet placerat augue ipsum eget elit. Quisque sodales orci non est tincidunt tincidunt. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut diam in dolor ultricies accumsan sit amet eu ex. Pellentesque aliquet scelerisque ullamcorper. Aenean porta enim eget nisl viverra euismod sed non eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at imperdiet sem, non volutpat metus. Phasellus sed velit sed orci iaculis venenatis ac id risus.');
+
+ $pdf->Ln(10);
+
+ $pdf->AddFont('FontUTF8','','Arimo-Regular.php');
+ $pdf->AddFont('FontUTF8','B','Arimo-Bold.php');
+ $pdf->AddFont('FontUTF8','BI','Arimo-BoldItalic.php');
+ $pdf->AddFont('FontUTF8','I','Arimo-Italic.php');
+
+ $table=new easyTable($pdf, 3, 'border:1;font-size:12;');
+
+ $table->easyCell('<b>This text is in bold</b> and <i>this is in italic</i> and this is normal', 'valign:T; bgcolor:#eee6ff;');
+ $table->easyCell("T<s 'font-color:#3399ff; font-style:B; font-size:19'>h</s><s 'font-color:#00cc00; font-style:I; font-size:21'>i</s>s <s 'font-color:#ff0000; font-style:BI; font-size:8'>is</s> a <s 'font-color:#0099ff; font-size:25'><b>c</b><i>r</i><bi>a</bi><b>z</b><i>y</i></s> text");
+ $table->easyCell("<s 'font-color:#4da6ff; font-style:B; font-size:18'><i>And can do it with Russian, just because <s 'font-size:25; font-color:#66ff99'>we can!</s></i></s>", 'font-style:I;');
+ $table->printRow();
+
+ $table->rowStyle('min-height:60; align:{C};font-size:18;'); // let's adjust the height of this row
+ $table->easyCell(iconv("UTF-8", 'KOI8-R', '<b>Вери</b> порро <i>номинати</i> вел ех, <b><i>еум</i></b> те лаореет импедит, <s "font-style:B;font-size:18; font-color:#3399ff">ест но ферри ириуре.</s> Ет вис реяуе хомеро. Перфецто сцрипсерит вис еу, нам ин ассум пробатус. Фиерент импердиет аппеллантур меи но, граеце яуодси пертинациа вел ад, не при лудус оратио тациматес. Хис дебет дефинитионес цу.
+
+ <s "font-family:times;font-size:20;">Set different font-families <s "font-family:lato;font-size:25;">in the same cell</s></s>
+
+ <s "font-family:times;font-size:18;">This is a link <s "font-family:lato;font-size:20;font-color:#0099ff; href:http://www.fpdf.org/">FPDF</s></s>
+
+ '), 'colspan:4; font-family:FontUTF8; font-size:12;');
+
+ $table->printRow();
+
+ $table->endTable(4);
+
+//-----------------------------------------
+
+ $pdf->Output();
+
+?>
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/easyTable.php b/src/lib/fpdf-easytable/easyTable.php
new file mode 100755
index 0000000..7a3840a
--- /dev/null
+++ b/src/lib/fpdf-easytable/easyTable.php
@@ -0,0 +1,1017 @@
+<?php
+ /*********************************************************************
+ * FPDF easyTable *
+ * *
+ * Version: 2.0 *
+ * Date: 12-10-2017 *
+ * Author: Dan Machado *
+ * Require exFPDF v2.0 *
+ **********************************************************************/
+
+class easyTable{
+ const LP=0.4;
+ const XPadding=1;
+ const YPadding=1;
+ const IMGPadding=0.5;
+ const PBThreshold=30;
+ static private $table_counter=false;
+ static private $style=array('width'=>false, 'border'=>false, 'border-color'=>false,
+ 'border-width'=>false, 'line-height'=>false,
+ 'align'=>'', 'valign'=>'', 'bgcolor'=>false, 'split-row'=>false, 'l-margin'=>false,
+ 'font-family'=>false, 'font-style'=>false,'font-size'=>false, 'font-color'=>false,
+ 'paddingX'=>false, 'paddingY'=>false);
+ private $pdf_obj;
+ private $document_style;
+ private $table_style;
+ private $col_num;
+ private $col_width;
+ private $baseX;
+ private $row_style_def;
+ private $row_style;
+ private $row_heights;
+ private $row_data;
+ private $rows;
+ private $total_rowspan;
+ private $col_counter;
+ private $grid;
+ private $blocks;
+ private $overflow;
+ private $header_row;
+ private $new_table;
+
+ private function get_available($colspan, $rowspan){
+ static $k=0;
+ if(count($this->grid)==0){
+ $k=0;
+ }
+ while(isset($this->grid[$k])){
+ $k++;
+ }
+ for($i=0; $i<=$colspan; $i++){
+ for($j=0; $j<=$rowspan; $j++){
+ $this->grid[$k+$i+$j*$this->col_num]=true;
+ }
+ }
+ return $k;
+ }
+
+ private function get_style($str, $c){
+ $result=self::$style;
+ if($c=='C'){
+ $result['colspan']=0;
+ $result['rowspan']=0;
+ $result['img']=false;
+ }
+ if($c=='C' || $c=='R'){
+ unset($result['width']);
+ unset($result['border-width']);
+ unset($result['split-row']);
+ unset($result['l-margin']);
+ }
+ if($c=='R' || $c=='T'){
+ if($c=='R'){
+ $result['c-align']=array_pad(array(), $this->col_num, 'L');
+ }
+ else{
+ $result['c-align']=array();
+ }
+ }
+ if($c=='R'){
+ $result['min-height']=false;
+ }
+ $tmp=explode(';', $str);
+ foreach($tmp as $x){
+ if($x && strpos($x,':')>0){
+ $r=explode(':',$x);
+ $r[0]=trim($r[0]);
+ $r[1]=trim($r[1]);
+ if(isset($result[$r[0]])){
+ $result[$r[0]]=$r[1];
+ }
+ }
+ }
+ return $result;
+ }
+
+ private function inherating(&$sty, $setting, $c){
+ if($c=='C'){
+ $sty[$setting]=$this->row_style[$setting];
+ }
+ elseif($c=='R'){
+ $sty[$setting]=$this->table_style[$setting];
+ }
+ else{
+ $sty[$setting]=$this->document_style[$setting];
+ }
+ }
+
+ private function conv_units($x)
+ {
+ if($this->pdf_obj->get_scale_factor()==72/25.4)
+ {
+ return $x;
+ }
+
+ if($this->pdf_obj->get_scale_factor()==72/2.54)
+ {
+ return $x/10;
+ }
+
+ if($this->pdf_obj->get_scale_factor()==72)
+ {
+ return $x/25.4;
+ }
+
+ return $x/0.3527777778;
+ }
+
+ private function set_style($str, $c, $pos=''){
+ $sty=$this->get_style($str, $c);
+ if($c=='T'){
+ if(is_numeric($sty['width'])){
+ $sty['width']=min(abs($sty['width']),$this->document_style['document_width']);
+ if($sty['width']==0){
+ $sty['width']=$this->document_style['document_width'];
+ }
+ }
+ else{
+ $x=strpos($sty['width'], '%');
+ if($x!=false){
+ $x=min(abs(substr($sty['width'], 0, $x)), 100);
+ if($x){
+ $sty['width']=$x*$this->document_style['document_width']/100.0;
+ }
+ else{
+ $sty['width']=$this->document_style['document_width'];
+ }
+ }
+ else{
+ $sty['width']=$this->document_style['document_width'];
+ }
+ }
+ if(!is_numeric($sty['l-margin'])){
+ $sty['l-margin']=0;
+ }
+ else{
+ $sty['l-margin']=abs($sty['l-margin']);
+ }
+ if(is_numeric($sty['border-width'])){
+ $sty['border-width']=abs($sty['border-width']);
+ }
+ else{
+ $sty['border-width']=false;
+ }
+ if($sty['split-row']=='false'){
+ $sty['split-row']=false;
+ }
+ elseif($sty['split-row']!==false){
+ $sty['split-row']=true;
+ }
+ }
+ if($c=='R'){
+ if(!is_numeric($sty['min-height']) || $sty['min-height']<0){
+ $sty['min-height']=0;
+ }
+ }
+ if(!is_numeric($sty['paddingX'])){
+ if($c=='C' || $c=='R'){
+ $this->inherating($sty, 'paddingX', $c);
+ }
+ else{
+ $sty['paddingX']=$this->conv_units(self::XPadding);
+ }
+ }
+ $sty['paddingX']=abs($sty['paddingX']);
+ if(!is_numeric($sty['paddingY'])){
+ if($c=='C' || $c=='R'){
+ $this->inherating($sty, 'paddingY', $c);
+ }
+ else{
+ $sty['paddingY']=$this->conv_units(self::YPadding);
+ }
+ }
+ $sty['paddingY']=abs($sty['paddingY']);
+ if($sty['border']===false && ($c=='C' || $c=='R')){
+ $this->inherating($sty, 'border', $c);
+ }
+ else{
+ $border=array('T'=>1, 'R'=>1, 'B'=>1, 'L'=>1);
+ if(!(is_numeric($sty['border']) && $sty['border']==1)){
+ foreach($border as $k=>$v){
+ $border[$k]=0;
+ if(strpos($sty['border'], $k)!==false){
+ $border[$k]=1;
+ }
+ }
+ }
+ $sty['border']=$border;
+ }
+ $color_settings=array('bgcolor', 'font-color', 'border-color');
+ foreach($color_settings as $setting){
+ if($sty[$setting]===false || !($this->pdf_obj->is_hex($sty[$setting]) || $this->pdf_obj->is_rgb($sty[$setting]))){
+ if($c=='C' || $c=='R'){
+ $this->inherating($sty, $setting, $c);
+ }
+ elseif($setting=='font-color'){
+ $sty[$setting]=$this->document_style[$setting];
+ }
+ }
+ else{
+ $sty[$setting]=$sty[$setting];
+ }
+ }
+ $font_settings=array('font-family', 'font-style', 'font-size');
+ foreach($font_settings as $setting){
+ if($sty[$setting]===false){
+ $this->inherating($sty, $setting, $c);
+ }
+ }
+ if(is_numeric($sty['line-height'])){
+ $sty['line-height']=$this->conv_units(self::LP)*abs($sty['line-height']);
+ }
+ else{
+ if($c=='C' || $c=='R'){
+ $this->inherating($sty,'line-height', $c);
+ }
+ else{
+ $sty['line-height']=$this->conv_units(self::LP);
+ }
+ }
+ if($c=='C'){
+ if($sty['img']){
+ $tmp=explode(',', $sty['img']);
+ if(file_exists($tmp[0])){
+ $sty['img']=array('path'=>'', 'h'=>0, 'w'=>0);
+ $img=@ getimagesize($tmp[0]);
+ $sty['img']['path']=$tmp[0];
+ for($i=1; $i<3; $i++){
+ if(isset($tmp[$i])){
+ $tmp[$i]=trim(strtolower($tmp[$i]));
+ if($tmp[$i][0]=='w' || $tmp[$i][0]=='h'){
+ $t=substr($tmp[$i],1);
+ if(is_numeric($t)){
+ $sty['img'][$tmp[$i][0]]=abs($t);
+ }
+ }
+ }
+ }
+ $ration=$img[0]/$img[1];
+ if($sty['img']['w']+$sty['img']['h']==0){
+ $sty['img']['w']=$img[0];
+ $sty['img']['h']=$img[1];
+ }
+ elseif($sty['img']['w']==0){
+ $sty['img']['w']=$sty['img']['h']*$ration;
+ }
+ elseif($sty['img']['h']==0){
+ $sty['img']['h']=$sty['img']['w']/$ration;
+ }
+ }
+ else{
+ $sty['img']='failed to open stream: file ' . $tmp[0] .' does not exist';
+ }
+ }
+ if(is_numeric($sty['colspan']) && $sty['colspan']>0){
+ $sty['colspan']--;
+ }
+ else{
+ $sty['colspan']=0;
+ }
+ if(is_numeric($sty['rowspan']) && $sty['rowspan']>0){
+ $sty['rowspan']--;
+ }
+ else{
+ $sty['rowspan']=0;
+ }
+ if($sty['valign']==false && ($sty['rowspan']>0 || $sty['img']!==false)){
+ $sty['valign']='M';
+ }
+ if($sty['align']==false && $sty['img']!==false){
+ $sty['align']='C';
+ }
+ }
+ if($c=='T' || $c=='R'){
+ $tmp=explode('{',$sty['align']);
+ if($c=='T'){
+ $sty['align']=trim($tmp[0]);
+ }
+ if(isset($tmp[1])){
+ $tmp[1]=trim($tmp[1], '}');
+ if(strlen($tmp[1])){
+ for($i=0; $i<strlen($tmp[1]); $i++){
+ if(preg_match("/[LCRJ]/", $tmp[1][$i])!=0){
+ $sty['c-align'][$i]=$tmp[1][$i];
+ }
+ else{
+ $sty['c-align'][$i]='L';
+ }
+ }
+ }
+ if($c=='R'){
+ $sty['align']='L';
+ $sty['c-align']=array_slice($sty['c-align'],0,$this->col_num);
+ }
+ }
+ }
+ if($sty['align']!='L' && $sty['align']!='C' && $sty['align']!='R' && $sty['align']!='J'){
+ if($c=='C'){
+ $sty['align']=$this->row_style['c-align'][$pos];
+ }
+ elseif($c=='R'){
+ $sty['align']='L';
+ $sty['c-align']=$this->table_style['c-align'];
+ }
+ else{
+ $sty['align']='C';
+ }
+ }
+ elseif($c=='T' && $sty['align']=='J'){
+ $sty['align']='C';
+ }
+ if($sty['valign']!='T' && $sty['valign']!='M' && $sty['valign']!='B'){
+ if($c=='C' || $c=='R'){
+ $this->inherating($sty, 'valign', $c);
+ }
+ else{
+ $sty['valign']='T';
+ }
+ }
+ return $sty;
+ }
+
+ private function row_content_loop($counter, $f){
+ $t=0;
+ if($counter>0){
+ $t=$this->rows[$counter-1];
+ }
+ for($index=$t; $index<$this->rows[$counter]; $index++){
+ $f($index);
+ }
+ }
+
+ private function mk_border($i, $y, $split){
+ $w=$this->row_data[$i][2];
+ $h=$this->row_data[$i][5];
+ if($split){
+ $h=$this->pdf_obj->PageBreak()-$y;
+ }
+ if($this->row_data[$i][1]['border-color']!=false){
+ $this->pdf_obj->resetColor($this->row_data[$i][1]['border-color'], 'D');
+ }
+ $a=array(1, 1, 1, 0);
+ $borders=array('L'=>3, 'T'=>0, 'R'=>1, 'B'=>2);
+ foreach($borders as $border=>$j){
+ if($this->row_data[$i][1]['border'][$border]){
+ if($border=='B'){
+ if($split==0){
+ $this->pdf_obj->Line($this->row_data[$i][6]+(1+$a[($j+2)%4])%2*$w, $y+(1+$a[($j+1)%4])%2 * $h, $this->row_data[$i][6]+$a[$j%4]*$w, $y+($a[($j+3)%4])%2 *$h);
+ }
+ }
+ else{
+ $this->pdf_obj->Line($this->row_data[$i][6]+(1+$a[($j+2)%4])%2*$w, $y+(1+$a[($j+1)%4])%2 * $h, $this->row_data[$i][6]+$a[$j%4]*$w, $y+($a[($j+3)%4])%2 *$h);
+ }
+ }
+ }
+
+ if($this->row_data[$i][1]['border-color']!=false){
+ $this->pdf_obj->resetColor($this->document_style['bgcolor'], 'D');
+ }
+ if($split){
+ $this->pdf_obj->row_data[$i][1]['border']['T']=0;
+ }
+ }
+
+ private function print_text($i, $y, $split){
+ $padding=$this->row_data[$i][1]['padding-y'];
+ $k=$padding;
+ if($this->row_data[$i][1]['img']!==false){
+ if($this->row_data[$i][1]['valign']=='B'){
+ $k+=$this->row_data[$i][1]['img']['h']+$this->conv_units(self::IMGPadding);
+ }
+ }
+ $l=0;
+ if(count($this->row_data[$i][0])){
+ $x=$this->row_data[$i][6]+$this->row_data[$i][1]['paddingX'];
+ $xpadding=2*$this->row_data[$i][1]['paddingX'];
+ $l=count($this->row_data[$i][0])* $this->row_data[$i][1]['line-height']*$this->row_data[$i][1]['font-size'];
+ $this->pdf_obj->SetXY($x, $y+$k);
+ $this->pdf_obj->CellBlock($this->row_data[$i][2]-$xpadding, $this->row_data[$i][1]['line-height'], $this->row_data[$i][0], $this->row_data[$i][1]['align']);
+ $this->pdf_obj->resetFont($this->document_style['font-family'], $this->document_style['font-style'], $this->document_style['font-size']);
+ $this->pdf_obj->resetColor($this->document_style['font-color'], 'T');
+ }
+ if($this->row_data[$i][1]['img']!==false ){
+ $x=$this->row_data[$i][6];
+ $k=$padding;
+ if($this->row_data[$i][1]['valign']!='B'){
+ $k+=$l+$this->conv_units(self::IMGPadding);
+ }
+ if($this->imgbreak($i, $y)==0 && $y+$k+$this->row_data[$i][1]['img']['h']<$this->pdf_obj->PageBreak()){
+ $x+=$this->row_data[$i][1]['paddingX'];
+ if($this->row_data[$i][2]>$this->row_data[$i][1]['img']['w']){
+ if($this->row_data[$i][1]['align']=='C'){
+ $x-=$this->row_data[$i][1]['paddingX'];
+ $x+=($this->row_data[$i][2]-$this->row_data[$i][1]['img']['w'])/2;
+ }
+ elseif($this->row_data[$i][1]['align']=='R'){
+ $x+=$this->row_data[$i][2]-$this->row_data[$i][1]['img']['w'];
+ $x-=2*$this->row_data[$i][1]['paddingX'];
+ }
+ }
+ $this->pdf_obj->Image($this->row_data[$i][1]['img']['path'], $x, $y+$k, $this->row_data[$i][1]['img']['w'], $this->row_data[$i][1]['img']['h']);
+ $this->row_data[$i][1]['img']=false;
+ }
+ }
+ }
+
+
+ private function mk_bg($i, $T, $split){
+ $h=$this->row_data[$i][5];
+ if($split){
+ $h=$this->pdf_obj->PageBreak()-$T;
+ }
+ if($this->row_data[$i][1]['bgcolor']!=false){
+ $this->pdf_obj->resetColor($this->row_data[$i][1]['bgcolor']);
+ $this->pdf_obj->Rect($this->row_data[$i][6], $T, $this->row_data[$i][2], $h, 'F');
+ $this->pdf_obj->resetColor($this->document_style['bgcolor']);
+ }
+ }
+
+ private function printing_loop($swap=false){
+ $this->swap_data($swap);
+ $y=$this->pdf_obj->GetY();
+ $tmp=array();
+ $rw=array();
+ $ztmp=array();
+ $total_cells=count($this->row_data);
+ while(count($tmp)!=$total_cells){
+ $a=count($this->rows);
+ $h=0;
+ $y=$this->pdf_obj->GetY();
+ for($j=0; $j<count($this->rows); $j++){
+ $T=$y+$h;
+ if($T<$this->pdf_obj->PageBreak()){
+
+ $this->row_content_loop($j, function($index)use($T, $tmp){
+ if(!isset($tmp[$index])){
+ $split_cell=$this->scan_for_breaks($index,$T, false);
+ $this->mk_bg($index, $T, $split_cell);
+ }
+ });
+ if(!isset($rw[$j])){
+ if($this->pdf_obj->PageBreak()-($T+$this->row_heights[$j])>=0){
+ $h+=$this->row_heights[$j];
+ }
+ else{
+ $a=$j+1;
+ break;
+ }
+ }
+ }
+ else{
+ $a=$j+1;
+ break;
+ }
+ }
+ $h=0;
+ for($j=0; $j<$a; $j++){
+ $T=$y+$h;
+ if($T<$this->pdf_obj->PageBreak()){
+
+ $this->row_content_loop($j, function($index)use($T, &$tmp, &$ztmp){
+ if(!isset($tmp[$index])){
+ $split_cell=$this->scan_for_breaks($index,$T);
+ $this->mk_border($index, $T, $split_cell);
+ $this->print_text($index, $T, $split_cell);
+ if($split_cell==0){
+ $tmp[$index]=$index;
+ }
+ else{
+ $ztmp[]=$index;
+ }
+ }
+ });
+ if(!isset($rw[$j])){
+ $tw=$this->pdf_obj->PageBreak()-($T+$this->row_heights[$j]);
+ if($tw>=0){
+ $h+=$this->row_heights[$j];
+ $rw[$j]=$j;
+ }
+ else{
+ $this->row_heights[$j]=$this->overflow-$tw;
+ }
+ }
+ }
+ }
+ if(count($tmp)!=$total_cells){
+ foreach($ztmp as $index){
+ $this->row_data[$index][5]=$this->row_data[$index][7]+$this->overflow;
+ if(isset($this->row_data[$index][8])){
+ $this->row_data[$index][1]['padding-y']=$this->row_data[$index][8];
+ unset($this->row_data[$index][8]);
+ }
+ }
+ $this->overflow=0;
+ $ztmp=array();
+ $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+ }
+ else{
+ $y+=$h;
+ }
+ }
+ $this->pdf_obj->SetXY($this->baseX, $y);
+ $this->swap_data($swap);
+ }
+
+ private function imgbreak($i, $y){
+ $li=$y+$this->row_data[$i][1]['padding-y'];
+ $ls=$this->row_data[$i][1]['img']['h'];
+ if($this->row_data[$i][1]['valign']=='B'){
+ $ls+=$li;
+ }
+ else{
+ $li+=$this->row_data[$i][3]-$this->row_data[$i][1]['img']['h'];
+ $ls+=$li;
+ }
+ $result=0;
+ if($li<$this->pdf_obj->PageBreak() && $this->pdf_obj->PageBreak()<$ls){
+ $result=$this->pdf_obj->PageBreak()-$li;
+ }
+ return $result;
+ }
+
+ private function scan_for_breaks($index, $H, $l=true){
+ $print_cell=0;
+ $h=($H+$this->row_data[$index][5])-$this->pdf_obj->PageBreak();
+ if($h>0){
+ if($l){
+ $rr=$this->pdf_obj->PageBreak()-($H+$this->row_data[$index][1]['padding-y']);
+ if($rr>0){
+ $mx=0;
+ if(count($this->row_data[$index][0]) && $this->row_data[$index][1]['img']!==false){
+ $mx=$this->imgbreak($index, $H);
+ if($mx==0){
+ if($this->row_data[$index][1]['valign']=='B'){
+ $rr-=$this->row_data[$index][1]['img']['h'];
+ }
+ }
+ }
+ $nh=0;
+ $keys=array_keys($this->row_data[$index][0]);
+ foreach($keys as $i){
+ $nh+=$this->row_data[$index][0][$i]['height'];
+ }
+ $nh*=$this->row_data[$index][1]['line-height'];
+ if($mx==0){
+ if($rr<$nh && $rr>0){
+ $nw=0;
+ foreach($keys as $i){
+ $nw+=$this->row_data[$index][0][$i]['height']*$this->row_data[$index][1]['line-height'];
+ if($nw>$rr){
+ $nw-=$this->row_data[$index][0][$i]['height']*$this->row_data[$index][1]['line-height'];
+ $mx=$rr-$nw;
+ break;
+ }
+ }
+ }
+ else{
+ if($rr< $this->row_data[$index][1]['img']['h']){
+ $mx=$this->row_data[$index][1]['img']['h'];
+ }
+ }
+ }
+ $this->overflow=max($this->overflow, $mx);
+ $this->row_data[$index][8]=1;
+ }
+ else{
+ $this->row_data[$index][8]=-1*$rr;
+ }
+ $this->row_data[$index][7]=$h;
+ }
+ $print_cell=1;
+ }
+ return $print_cell;
+ }
+
+ private function swap_data($swap){
+ if($swap==false){
+ return;
+ }
+ static $data=array();
+ if(count($data)==0){
+ $data=array('header_data'=>$this->header_row['row_data'], 'row_heights'=>&$this->row_heights, 'row_data'=>&$this->row_data, 'rows'=>&$this->rows);
+ unset($this->row_heights, $this->row_data, $this->rows);
+ $this->row_heights=&$this->header_row['row_heights'];
+ $this->row_data=&$this->header_row['row_data'];
+ $this->rows=&$this->header_row['rows'];
+ }
+ else{
+ $this->header_row['row_data']=$data['header_data'];
+ unset($this->row_heights, $this->row_data, $this->rows);
+ $this->row_heights=$data['row_heights'];
+ $this->row_data=$data['row_data'];
+ $this->rows=$data['rows'];
+ $data=array();
+ }
+ }
+ /********************************************************************
+
+ function __construct( FPDF-object $fpdf_obj, Mix $num_cols[, string $style = '' ])
+ -----------------------------------------------------
+ Description:
+ Constructs an easyTable object
+ Parameters:
+ fpdf_obj
+ the current FPDF object (constructed with the FPDF library)
+ that is being used to write the current PDF document
+ num_cols
+ this parameter can be a positive integer (the number of columns)
+ or a string of the following form
+ I) a positive integer, the number of columns for the table. The width
+ of every column will be equal to the width of the table (given by the width property)
+ divided by the number of columns ($num_cols)
+ II) a string of the form '{c1, c2, c3,... cN}'. In this case every
+ element in the curly brackets is a positive numeric value that represent
+ the width of a column. Thus, the n-th numeric value is the width
+ of the n-th colum. If the sum of all the width of the columns is bigger than
+ the width of the table but less than the width of the document, the table
+ will stretch to the sum of the columns width. However, if the sum of the
+ columns is bigger than the width of the document, the width of every column
+ will be reduce proportionally to make the total sum equal to the width of the document.
+ III) a string of the form '%{c1, c2, c3,... cN}'. Similar to the previous case, but
+ this time every element represents a percentage of the width of the table.
+ In this case it the sum of this percentages is bigger than 100, the execution will
+ be terminated.
+ style
+ the global style for the table (see documentation)
+ a semicolon-separated string of attribute values that defines the
+ default layout of the table and all the cells and their contents
+ (see Documentation section in README.md)
+ Examples:
+ $table= new easyTable($fpdf, 3);
+ $table= new easyTable($fpdf, '{35, 45, 55}', 'width:135;');
+ $table= new easyTable($fpdf, '%{35, 45, 55}', 'width:190;');
+ Return value:
+ An easyTable object
+ ***********************************************************************/
+
+ public function __construct($fpdf_obj, $num_cols, $style=''){
+ if(self::$table_counter){
+ error_log('Please use the end_table method to terminate the last table');
+ exit();
+ }
+ self::$table_counter=true;
+ $this->pdf_obj=&$fpdf_obj;
+ $this->document_style['bgcolor']=$this->pdf_obj->get_color('fill');
+ $this->document_style['font-family']=$this->pdf_obj->current_font('family');
+ $this->document_style['font-style']=$this->pdf_obj->current_font('style');
+ $this->document_style['font-size']=$this->pdf_obj->current_font('size');
+ $this->document_style['font-color']=$this->pdf_obj->get_color('text');
+ $this->document_style['document_width']=$this->pdf_obj->GetPageWidth()-$this->pdf_obj->get_margin('l')-$this->pdf_obj->get_margin('r');
+ $this->document_style['orientation']=$this->pdf_obj->get_orientation();
+ $this->document_style['line-width']=$this->pdf_obj->get_linewidth();
+ $this->table_style=$this->set_style($style, 'T');
+ $this->col_num=false;
+ $this->col_width=array();
+ if(is_int($num_cols) && $num_cols!=0){
+ $this->col_num=abs($num_cols);
+ $this->col_width=array_pad(array(), abs($num_cols), $this->table_style['width']/abs($num_cols));
+ }
+ elseif(is_string($num_cols)){
+ $num_cols=trim($num_cols, '}, ');
+ if($num_cols[0]!='{' && $num_cols[0]!='%'){
+ error_log('Bad format for columns in Table constructor');
+ exit();
+ }
+ $tmp=explode('{', $num_cols);
+ $tp=trim($tmp[0]);
+ $num_cols=explode(',', $tmp[1]);
+ $w=0;
+ foreach($num_cols as $c){
+ if(!is_numeric($c)){
+ error_log('Bad parameter format for columns in Table constructor');
+ exit();
+ }
+ if(abs($c)){
+ $w+=abs($c);
+ $this->col_width[]=abs($c);
+ }
+ else{
+ error_log('Column width can not be zero');
+ }
+ }
+ $this->col_num=count($this->col_width);
+ if($tp=='%'){
+ if($w!=100){
+ error_log('The sum of the percentages of the columns is not 100');
+ exit();
+ }
+ foreach($this->col_width as $i=>$c){
+ $this->col_width[$i]=$c*$this->table_style['width']/100;
+ }
+ }
+ elseif($w!=$this->table_style['width'] && $w){
+ if($w<$this->document_style['document_width']){
+ $this->table_style['width']=$w;
+ }
+ else{
+ $this->table_style['width']=$this->document_style['document_width'];
+ $d=$this->table_style['width']/$w;
+ for($i=0; $i<count($num_cols); $i++){
+ $this->col_width[$i]*=$d;
+ }
+ }
+ }
+ }
+ if($this->col_num==false){
+ error_log('Unspecified number of columns in Table constructor');
+ exit();
+ }
+ $this->table_style['c-align']=array_pad($this->table_style['c-align'], $this->col_num, 'L');
+ if($this->table_style['l-margin']){
+ $this->baseX=$this->pdf_obj->get_margin('l')+min($this->table_style['l-margin'],$this->document_style['document_width']-$this->table_style['width']);
+ }
+ else{
+ if($this->table_style['align']=='L'){
+ $this->baseX=$this->pdf_obj->get_margin('l');
+ }
+ elseif($this->table_style['align']=='R'){
+ $this->baseX=$this->pdf_obj->get_margin('l')+$this->document_style['document_width']-$this->table_style['width'];
+ }
+ else{
+ $this->baseX=$this->pdf_obj->get_margin('l')+($this->document_style['document_width']-$this->table_style['width'])/2;
+ }
+ }
+ $this->row_style_def=$this->set_style('', 'R');
+ $this->row_style=$this->row_style_def;
+ $this->row_heights=array();
+ $this->row_data=array();
+ $this->rows=array();
+ $this->total_rowspan=0;
+ $this->col_counter=0;
+ $this->grid=array();
+ $this->blocks=array();
+ $this->overflow=0;
+ if($this->table_style['border-width']!=false){
+ $this->pdf_obj->SetLineWidth($this->table_style['border-width']);
+ }
+ $this->header_row=array();
+ $this->new_table=true;
+ }
+ /***********************************************************************
+
+ function rowStyle( string $style )
+ -------------------------------------------------------------
+ Description:
+ Set or overwrite the style for all the cells in the current row.
+ Parameters:
+ style
+ a semicolon-separated string of attribute values that defines the
+ layout of all the cells and its content in the current row
+ (see Documentation section in README.md)
+ Return values
+ Void
+ Notes:
+
+ This function should be called before the first cell of the current row
+ ***********************************************************************/
+
+ public function rowStyle($style){
+ $this->row_style=$this->set_style($style, 'R');
+ }
+ /***********************************************************************
+
+ function easyCell( string $data [, string $style = '' ])
+ ------------------------------------------------------------------------
+ Description:
+ Makes a cell in the table
+ Parameters:
+ data
+ the content of the respective cell
+ style (optional)
+ a semicolon-separated string of attribute values that defines the
+ layout of the cell and its content (see Documentation section in README.md)
+ Return value
+ void
+ ***********************************************************************/
+
+ public function easyCell($data, $style=''){
+ if($this->col_counter<$this->col_num){
+ $sty=$this->set_style($style, 'C', $this->col_counter);
+ $this->col_counter++;
+ $row_number=count($this->rows);
+ $cell_index=count($this->row_data);
+ $cell_pos=$this->get_available($sty['colspan'], $sty['rowspan']);
+ $colm=$cell_pos %$this->col_num;
+ if($sty['img']!=false && $data!='' && $sty['valign']=='M'){
+ $sty['valign']=$this->row_style['valign'];
+ }
+ if($sty['rowspan']){
+ $this->total_rowspan=max($this->total_rowspan, $sty['rowspan']);
+ $this->blocks[$cell_index]=array($cell_index, $row_number, $sty['rowspan']);
+ }
+ $w=$this->col_width[$colm];
+ $r=0;
+ while($r<$sty['colspan'] && $this->col_counter<$this->col_num){
+ $this->col_counter++;
+ $colm++;
+ $w+=$this->col_width[$colm];
+ $r++;
+ }
+ $w-=2*$sty['paddingX'];
+ if($sty['img']!==false && is_string($sty['img'])){
+ $data=$sty['img'];
+ $sty['img']=false;
+ }
+ $data=& $this->pdf_obj->extMultiCell($sty['font-family'], $sty['font-style'], $sty['font-size'], $sty['font-color'], $w, $data);
+ $h=0;
+ $rn=count($data);
+ for($ri=0; $ri<$rn; $ri++){
+ $h+=$data[$ri]['height']*$sty['line-height'];
+ }
+ if($sty['img']){
+ if($sty['img']['w']>$w){
+ $sty['img']['h']=$w*$sty['img']['h']/$sty['img']['w'];
+ $sty['img']['w']=$w;
+ }
+ if($h){
+ $h+=$this->conv_units(self::IMGPadding);
+ }
+ $h+=$sty['img']['h'];
+ }
+ $w+=2*$sty['paddingX'];
+
+ $posx=$this->baseX;
+ $d=$cell_pos %$this->col_num;
+ for($k=0; $k<$d; $k++){
+ $posx+=$this->col_width[$k];
+ }
+ $this->row_data[$cell_index]=array($data, $sty, $w, $h, $cell_pos, 0, $posx, 0);
+
+ }
+ }
+ /***********************************************************************
+
+ function printRow ( [ bool $setAsHeader = false ] )
+ ------------------------------------------------------------------------
+ Description:
+
+ This function indicates the end of the current row.
+ Parameters:
+ setAsHeader (optional)
+ Optional. When it is set as true, it sets the current row as the header
+ for the table; this means that the current row will be printed as the first
+ row of the table (table header) on every page that the table splits on.
+ Remark: 1. In order to work, the table attribute split-row should set as true.
+ 2. Just the first row where this parameter is set as true will be
+ used as header any other will printed as a normal row.
+ Return values
+ Void
+ Note:
+
+ This function will print the current row as far as the following holds:
+ total_rowspan=0
+ where total_rowspan is set as
+ total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
+ ***********************************************************************/
+
+ public function printRow($setAsHeader=false){
+ $this->col_counter=0;
+ $row_number=count($this->rows);
+ $this->rows[$row_number]=count($this->row_data);
+ $mx=$this->row_style['min-height'];
+
+ $this->row_content_loop($row_number, function($index)use(&$mx){
+ if($this->row_data[$index][1]['rowspan']==0){
+ $mx=max($mx, $this->row_data[$index][3]+2*$this->row_data[$index][1]['paddingY']);
+ }
+ });
+ $this->row_heights[$row_number]=$mx;
+
+ if($this->total_rowspan>0){
+ $this->total_rowspan--;
+ }
+ else{
+ $row_number=count($this->rows);
+ if(count($this->blocks)>0){
+
+ foreach($this->blocks as $bk_id=>$block){
+ $h=0;
+ for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+ $h+=$this->row_heights[$i];
+ }
+ $t=$this->row_data[$block[0]][3]+2*$this->row_data[$block[0]][1]['paddingY'];
+ if($h>0 && $h<$t){
+ for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+ $this->row_heights[$i]*=$t/$h;
+ }
+ }
+ }
+ foreach($this->blocks as $j=>$block){
+ $h=0;
+ for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+ $h+=$this->row_heights[$i];
+ }
+ $this->row_data[$j][5]=$h;
+ }
+ }
+ $block_height=0;
+ for($j=0; $j<$row_number; $j++){
+
+ $this->row_content_loop($j, function($index)use($j, $block_height){
+ if($this->row_data[$index][1]['rowspan']==0){
+ $this->row_data[$index][5]=$this->row_heights[$j];
+ }
+ $this->row_data[$index][1]['padding-y']=$this->row_data[$index][1]['paddingY'];
+ if($this->row_data[$index][1]['valign']=='M' || ($this->row_data[$index][1]['img'] && count($this->row_data[$index][0]))){
+ $this->row_data[$index][1]['padding-y']=($this->row_data[$index][5]-$this->row_data[$index][3])/2;
+ }
+ elseif($this->row_data[$index][1]['valign']=='B'){
+ $this->row_data[$index][1]['padding-y']=$this->row_data[$index][5]-($this->row_data[$index][3]+$this->row_data[$index][1]['paddingY']);
+ }
+ });
+ $block_height+=$this->row_heights[$j];
+ }
+
+ $rowIsHeader=1+(count($this->header_row)>0);
+ if($setAsHeader===true){
+ if(count($this->header_row)==0){
+ $this->header_row['row_heights']=$this->row_heights;
+ $this->header_row['row_data']=$this->row_data;
+ $this->header_row['rows']=$this->rows;
+ }
+ }
+ if($this->table_style['split-row']==false && $this->pdf_obj->PageBreak()<$this->pdf_obj->GetY()+max($block_height,$this->row_heights[0])){
+ $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+ if(count($this->header_row)>0){
+ $this->printing_loop(true);
+ $rowIsHeader--;
+ }
+ }
+
+ if($this->new_table){
+ if(count($this->header_row)>0){
+ $r=$this->pdf_obj->PageBreak()-($this->pdf_obj->GetY()+$block_height);
+ if($r<0 || $r<$this->conv_units(self::PBThreshold)){
+ $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+ }
+ }
+ $this->new_table=false;
+ }
+ if($rowIsHeader>0){
+ $this->printing_loop();
+ }
+ $this->grid=array();
+ $this->row_data=array();
+ $this->rows=array();
+ $this->row_heights=array();
+ $this->blocks=array();
+ $this->overflow=0;
+ $this->new_table=false;
+ }
+ $this->row_style=$this->row_style_def;
+ }
+ /***********************************************************************
+
+ function endTable( [int $bottomMargin=2])
+ ------------------------------------------
+ Description:
+ Unset all the data members of the easyTable object
+ Parameters:
+ bottomMargin (optional)
+ Optional. Specify the number of white lines left after
+ the last row of the table. Default 2.
+ If it is negative, the vertical position will be set before
+ the end of the table.
+ Return values
+ Void
+ ***********************************************************************/
+
+ public function endTable($bottomMargin=2){
+ self::$table_counter=false;
+ if($this->table_style['border-width']!=false){
+ $this->pdf_obj->SetLineWidth($this->document_style['line-width']);
+ }
+ $this->pdf_obj->SetX($this->pdf_obj->get_margin('l'));
+ $this->pdf_obj->Ln($bottomMargin);
+ $this->pdf_obj->resetStaticData();
+ unset($this->pdf_obj);
+ unset($this->document_style);
+ unset($this->table_style);
+ unset($this->col_num);
+ unset($this->col_width);
+ unset($this->baseX);
+ unset($this->row_style_def);
+ unset($this->row_style);
+ unset($this->row_heights);
+ unset($this->row_data);
+ unset($this->rows);
+ unset($this->total_rowspan);
+ unset($this->col_counter);
+ unset($this->grid);
+ unset($this->blocks);
+ unset($this->overflow);
+ unset($this->header_row);
+ }
+
+}
+?>
diff --git a/src/lib/fpdf-easytable/exfpdf.php b/src/lib/fpdf-easytable/exfpdf.php
new file mode 100755
index 0000000..d61a247
--- /dev/null
+++ b/src/lib/fpdf-easytable/exfpdf.php
@@ -0,0 +1,401 @@
+<?php
+ /*********************************************************************
+ * exFPDF extend FPDF v1.81 *
+ * *
+ * Version: 2.2 *
+ * Date: 12-10-2017 *
+ * Author: Dan Machado *
+ * Require FPDF v1.81, formatedstring v1.0 *
+ **********************************************************************/
+ include 'formatedstring.php';
+ class exFPDF extends FPDF{
+
+ public function PageBreak(){
+ return $this->PageBreakTrigger;
+ }
+
+ public function current_font($c){
+ if($c=='family'){
+ return $this->FontFamily;
+ }
+ elseif($c=='style'){
+ return $this->FontStyle;
+ }
+ elseif($c=='size'){
+ return $this->FontSizePt;
+ }
+ }
+
+ public function get_color($c){
+ if($c=='fill'){
+ return $this->FillColor;
+ }
+ elseif($c=='text'){
+ return $this->TextColor;
+ }
+ }
+
+ public function get_page_width(){
+ return $this->w;
+ }
+
+ public function get_margin($c){
+ if($c=='l'){
+ return $this->lMargin;
+ }
+ elseif($c=='r'){
+ return $this->rMargin;
+ }
+ elseif($c=='t'){
+ return $this->tMargin;
+ }
+ }
+
+ public function get_linewidth(){
+ return $this->LineWidth;
+ }
+
+ public function get_orientation(){
+ return $this->CurOrientation;
+ }
+
+ public function get_page_size()
+ {
+ return $this->CurPageSize;
+ }
+
+ public function get_rotation()
+ {
+ return $this->CurRotation;
+ }
+
+ public function get_scale_factor()
+ {
+ return $this->k;
+ }
+
+ static private $hex=array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,
+ 'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15);
+
+ public function is_rgb($str){
+ $a=true;
+ $tmp=explode(',', trim($str, ','));
+ foreach($tmp as $color){
+ if(!is_numeric($color) || $color<0 || $color>255){
+ $a=false;
+ break;
+ }
+ }
+ return $a;
+ }
+
+ public function is_hex($str){
+ $a=true;
+ $str=strtoupper($str);
+ $n=strlen($str);
+ if(($n==7 || $n==4) && $str[0]=='#'){
+ for($i=1; $i<$n; $i++){
+ if(!isset(self::$hex[$str[$i]])){
+ $a=false;
+ break;
+ }
+ }
+ }
+ else{
+ $a=false;
+ }
+ return $a;
+ }
+
+ public function hextodec($str){
+ $result=array();
+ $str=strtoupper(substr($str,1));
+ $n=strlen($str);
+ for($i=0; $i<3; $i++){
+ if($n==6){
+ $result[$i]=self::$hex[$str[2*$i]]*16+self::$hex[$str[2*$i+1]];
+ }
+ else{
+ $result[$i]=self::$hex[$str[$i]]*16+self::$hex[$str[$i]];
+ }
+ }
+ return $result;
+ }
+ static private $options=array('F'=>'', 'T'=>'', 'D'=>'');
+
+ public function resetColor($str, $p='F'){
+ if(isset(self::$options[$p]) && self::$options[$p]!=$str){
+ self::$options[$p]=$str;
+ $array=array();
+ if($this->is_hex($str)){
+ $array=$this->hextodec($str);
+ }
+ elseif($this->is_rgb($str)){
+ $array=explode(',', trim($str, ','));
+ for($i=0; $i<3; $i++){
+ if(!isset($array[$i])){
+ $array[$i]=0;
+ }
+ }
+ }
+ else{
+ $array=array(null, null, null);
+ $i=0;
+ $tmp=explode(' ', $str);
+ foreach($tmp as $c){
+ if(is_numeric($c)){
+ $array[$i]=$c*256;
+ $i++;
+ }
+ }
+ }
+ if($p=='T'){
+ $this->SetTextColor($array[0],$array[1],$array[2]);
+ }
+ elseif($p=='D'){
+ $this->SetDrawColor($array[0],$array[1], $array[2]);
+ }
+ elseif($p=='F'){
+ $this->SetFillColor($array[0],$array[1],$array[2]);
+ }
+ }
+ }
+ static private $font_def='';
+
+ public function resetFont($font_family, $font_style, $font_size){
+ if(self::$font_def!=$font_family .'-' . $font_style . '-' .$font_size){
+ self::$font_def=$font_family .'-' . $font_style . '-' .$font_size;
+ $this->SetFont($font_family, $font_style, $font_size);
+ }
+ }
+
+ public function resetStaticData(){
+ self::$font_def='';
+ self::$options=array('F'=>'', 'T'=>'', 'D'=>'');
+ }
+
+ /***********************************************************************
+ *
+ * Based on FPDF method SetFont
+ *
+ ************************************************************************/
+
+ private function &FontData($family, $style, $size){
+ if($family=='')
+ $family = $this->FontFamily;
+ else
+ $family = strtolower($family);
+ $style = strtoupper($style);
+ if(strpos($style,'U')!==false){
+ $this->underline = true;
+ $style = str_replace('U','',$style);
+ }
+ if($style=='IB')
+ $style = 'BI';
+ $fontkey = $family.$style;
+ if(!isset($this->fonts[$fontkey])){
+ if($family=='arial')
+ $family = 'helvetica';
+ if(in_array($family,$this->CoreFonts)){
+ if($family=='symbol' || $family=='zapfdingbats')
+ $style = '';
+ $fontkey = $family.$style;
+ if(!isset($this->fonts[$fontkey]))
+ $this->AddFont($family,$style);
+ }
+ else
+ $this->Error('Undefined font: '.$family.' '.$style);
+ }
+ $result['FontSize'] = $size/$this->k;
+ $result['CurrentFont']=&$this->fonts[$fontkey];
+ return $result;
+ }
+
+
+ private function setLines(&$fstring, $p, $q){
+ $parced_str=& $fstring->parced_str;
+ $lines=& $fstring->lines;
+ $linesmap=& $fstring->linesmap;
+ $cfty=$fstring->get_current_style($p);
+ $ffs=$cfty['font-family'] . $cfty['style'];
+ if(!isset($fstring->used_fonts[$ffs])){
+ $fstring->used_fonts[$ffs]=& $this->FontData($cfty['font-family'], $cfty['style'], $cfty['font-size']);
+ }
+ $cw=& $fstring->used_fonts[$ffs]['CurrentFont']['cw'];
+ $wmax = $fstring->width*1000*$this->k;
+ $j=count($lines)-1;
+ $k=strlen($lines[$j]);
+ if(!isset($linesmap[$j][0])) {
+ $linesmap[$j]=array($p,$p, 0);
+ }
+ $sl=$cw[' ']*$cfty['font-size'];
+ $x=$a=$linesmap[$j][2];
+ if($k>0){
+ $x+=$sl;
+ $lines[$j].=' ';
+ $linesmap[$j][2]+=$sl;
+ }
+ $u=$p;
+ $t='';
+ $l=$p+$q;
+ $ftmp='';
+ for($i=$p; $i<$l; $i++){
+ if($ftmp!=$ffs){
+ $cfty=$fstring->get_current_style($i);
+ $ffs=$cfty['font-family'] . $cfty['style'];
+ if(!isset($fstring->used_fonts[$ffs])){
+ $fstring->used_fonts[$ffs]=& $this->FontData($cfty['font-family'], $cfty['style'], $cfty['font-size']);
+ }
+ $cw=& $fstring->used_fonts[$ffs]['CurrentFont']['cw'];
+ $ftmp=$ffs;
+ }
+ $x+=$cw[$parced_str[$i]]*$cfty['font-size'];
+ if($x>$wmax){
+ if($a>0){
+ $t=substr($parced_str,$p, $i-$p);
+ $lines[$j]=substr($lines[$j],0,$k);
+ $linesmap[$j][1]=$p-1;
+ $linesmap[$j][2]=$a;
+ $x-=($a+$sl);
+ $a=0;
+ $u=$p;
+ }
+ else{
+ $x=$cw[$parced_str[$i]]*$cfty['font-size'];
+ $t='';
+ $u=$i;
+ }
+ $j++;
+ $lines[$j]=$t;
+ $linesmap[$j]=array();
+ $linesmap[$j][0]=$u;
+ $linesmap[$j][2]=0;
+ }
+ $lines[$j].=$parced_str[$i];
+ $linesmap[$j][1]=$i;
+ $linesmap[$j][2]=$x;
+ }
+ return;
+ }
+
+ public function &extMultiCell($font_family, $font_style, $font_size, $font_color, $w, $txt){
+ $result=array();
+ if($w==0){
+ return $result;
+ }
+ $current_font=array('font-family'=>$font_family, 'style'=>$font_style, 'font-size'=>$font_size, 'font-color'=>$font_color);
+ $fstring=new formatedString($txt, $w, $current_font);
+ $word='';
+ $p=0;
+ $i=0;
+ $n=strlen($fstring->parced_str);
+ while($i<$n){
+ $word.=$fstring->parced_str[$i];
+ if($fstring->parced_str[$i]=="\n" || $fstring->parced_str[$i]==' ' || $i==$n-1){
+ $word=trim($word);
+ $this->setLines($fstring, $p, strlen($word));
+ $p=$i+1;
+ $word='';
+ if($fstring->parced_str[$i]=="\n" && $i<$n-1){
+ $z=0;
+ $j=count($fstring->lines);
+ $fstring->lines[$j]='';
+ $fstring->linesmap[$j]=array();
+ }
+ }
+ $i++;
+ }
+ if($n==0){
+ return $result;
+ }
+ $n=count($fstring->lines);
+ for($i=0; $i<$n; $i++){
+ $result[$i]=$fstring->break_by_style($i);
+ }
+ return $result;
+ }
+
+ private function GetMixStringWidth($line){
+ $w = 0;
+ foreach($line['chunks'] as $i=>$chunk){
+ $t=0;
+ $cf=& $this->FontData($line['style'][$i]['font-family'], $line['style'][$i]['style'], $line['style'][$i]['font-size']);
+ $cw=& $cf['CurrentFont']['cw'];
+ $s=implode('', explode(' ',$chunk));
+ $l = strlen($s);
+ for($j=0;$j<$l;$j++){
+ $t+=$cw[$s[$j]];
+ }
+ $w+=$t*$line['style'][$i]['font-size'];
+ }
+ return $w;
+ }
+
+ public function CellBlock($w, $lh, &$lines, $align='J'){
+ if($w==0){
+ return;
+ }
+ $ctmp='';
+ $ftmp='';
+ foreach($lines as $i=>$line){
+ $k = $this->k;
+ if($this->y+$lh*$line['height']>$this->PageBreakTrigger){
+ break;
+ }
+ $dx=0;
+ $dw=0;
+ if($line['width']!=0){
+ if($align=='R'){
+ $dx = $w-$line['width']/($this->k*1000);
+ }
+ elseif($align=='C'){
+ $dx = ($w-$line['width']/($this->k*1000))/2;
+ }
+ if($align=='J'){
+ $tmp=explode(' ', implode('',$line['chunks']));
+ $ns=count($tmp);
+ if($ns>1){
+ $sx=implode('',$tmp);
+ $delta=$this->GetMixStringWidth($line)/($this->k*1000);
+ $dw=($w-$delta)*(1/($ns-1));
+ }
+ }
+ }
+ $xx=$this->x+$dx;
+ foreach($line['chunks'] as $tj=>$txt){
+ $this->resetFont($line['style'][$tj]['font-family'], $line['style'][$tj]['style'], $line['style'][$tj]['font-size']);
+ $this->resetColor($line['style'][$tj]['font-color'], 'T');
+ $y=$this->y+0.5*$lh*$line['height'] +0.3*$line['height']/$this->k;
+ if($dw){
+ $tmp=explode(' ', $txt);
+ foreach($tmp as $e=>$tt){
+ if($e>0){
+ $xx+=$dw;
+ if($tt==''){
+ continue;
+ }
+ }
+ $this->Text($xx, $y, $tt);
+ if($line['style'][$tj]['href']){
+ $yr=$this->y+0.5*($lh*$line['height']-$line['height']/$this->k);
+ $this->Link($xx, $yr, $this->GetStringWidth($txt),$line['height']/$this->k, $line['style'][$tj]['href']);
+ }
+ $xx+=$this->GetStringWidth($tt);
+ }
+ }
+ else{
+ $this->Text($xx, $y, $txt);
+ if($line['style'][$tj]['href']){
+ $yr=$this->y+0.5*($lh*$line['height']-$line['height']/$this->k);
+ $this->Link($xx, $yr, $this->GetStringWidth($txt),$line['height']/$this->k, $line['style'][$tj]['href']);
+ }
+ $xx+=$this->GetStringWidth($txt);
+ }
+ }
+ unset($lines[$i]);
+ $this->y += $lh*$line['height'];
+ }
+ }
+
+}
+?>
diff --git a/src/lib/fpdf-easytable/font/Apache License.txt b/src/lib/fpdf-easytable/font/Apache License.txt
new file mode 100644
index 0000000..989e2c5
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Apache License.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/font/Arimo-Bold.php b/src/lib/fpdf-easytable/font/Arimo-Bold.php
new file mode 100644
index 0000000..50ed855
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Bold.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-Bold';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>32,'FontBBox'=>'[-482 -376 1304 1033]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>750);
+$up = -106;
+$ut = 105;
+$cw = array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+ chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+ chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+ chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>669,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>854,chr(193)=>556,chr(194)=>618,chr(195)=>615,chr(196)=>635,chr(197)=>556,
+ chr(198)=>875,chr(199)=>417,chr(200)=>556,chr(201)=>615,chr(202)=>615,chr(203)=>500,chr(204)=>635,chr(205)=>740,chr(206)=>604,chr(207)=>611,chr(208)=>604,chr(209)=>583,chr(210)=>611,chr(211)=>556,chr(212)=>490,chr(213)=>556,chr(214)=>709,chr(215)=>615,chr(216)=>615,chr(217)=>854,chr(218)=>497,chr(219)=>833,
+ chr(220)=>552,chr(221)=>844,chr(222)=>581,chr(223)=>729,chr(224)=>1031,chr(225)=>722,chr(226)=>719,chr(227)=>730,chr(228)=>712,chr(229)=>667,chr(230)=>854,chr(231)=>567,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>610,chr(236)=>702,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>719,
+ chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>622,chr(246)=>904,chr(247)=>722,chr(248)=>719,chr(249)=>979,chr(250)=>626,chr(251)=>1005,chr(252)=>711,chr(253)=>1019,chr(254)=>703,chr(255)=>870);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Bold.z';
+$originalsize = 49388;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Bold.z b/src/lib/fpdf-easytable/font/Arimo-Bold.z
new file mode 100644
index 0000000..8f3e396
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Bold.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php
new file mode 100644
index 0000000..dcec8f2
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-BoldItalic';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>96,'FontBBox'=>'[-477 -376 1357 1030]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>750);
+$up = -106;
+$ut = 105;
+$cw = array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+ chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+ chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+ chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>865,chr(193)=>556,chr(194)=>619,chr(195)=>646,chr(196)=>618,chr(197)=>556,
+ chr(198)=>885,chr(199)=>534,chr(200)=>556,chr(201)=>611,chr(202)=>611,chr(203)=>507,chr(204)=>622,chr(205)=>740,chr(206)=>604,chr(207)=>611,chr(208)=>611,chr(209)=>589,chr(210)=>611,chr(211)=>556,chr(212)=>889,chr(213)=>556,chr(214)=>736,chr(215)=>604,chr(216)=>594,chr(217)=>854,chr(218)=>510,chr(219)=>889,
+ chr(220)=>552,chr(221)=>935,chr(222)=>583,chr(223)=>707,chr(224)=>1042,chr(225)=>722,chr(226)=>708,chr(227)=>729,chr(228)=>722,chr(229)=>667,chr(230)=>781,chr(231)=>614,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>615,chr(236)=>687,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>729,
+ chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>677,chr(246)=>927,chr(247)=>722,chr(248)=>708,chr(249)=>1000,chr(250)=>643,chr(251)=>979,chr(252)=>719,chr(253)=>989,chr(254)=>708,chr(255)=>854);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-BoldItalic.z';
+$originalsize = 45912;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z
new file mode 100644
index 0000000..6f3682b
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-Italic.php b/src/lib/fpdf-easytable/font/Arimo-Italic.php
new file mode 100644
index 0000000..e681820
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Italic.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-Italic';
+$desc = array('Ascent'=>728,'Descent'=>-208,'CapHeight'=>688,'Flags'=>96,'FontBBox'=>'[-664 -303 1361 1014]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>750);
+$up = -106;
+$ut = 73;
+$cw = array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+ chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+ chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+ chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>752,chr(193)=>556,chr(194)=>563,chr(195)=>572,chr(196)=>553,chr(197)=>556,
+ chr(198)=>835,chr(199)=>493,chr(200)=>500,chr(201)=>556,chr(202)=>556,chr(203)=>472,chr(204)=>564,chr(205)=>686,chr(206)=>550,chr(207)=>556,chr(208)=>550,chr(209)=>534,chr(210)=>556,chr(211)=>500,chr(212)=>833,chr(213)=>500,chr(214)=>688,chr(215)=>522,chr(216)=>526,chr(217)=>736,chr(218)=>465,chr(219)=>830,
+ chr(220)=>492,chr(221)=>851,chr(222)=>518,chr(223)=>621,chr(224)=>1022,chr(225)=>667,chr(226)=>651,chr(227)=>727,chr(228)=>704,chr(229)=>667,chr(230)=>795,chr(231)=>544,chr(232)=>667,chr(233)=>715,chr(234)=>715,chr(235)=>589,chr(236)=>686,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>725,chr(241)=>682,
+ chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>639,chr(246)=>917,chr(247)=>667,chr(248)=>651,chr(249)=>886,chr(250)=>614,chr(251)=>920,chr(252)=>694,chr(253)=>923,chr(254)=>673,chr(255)=>805);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Italic.z';
+$originalsize = 44228;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Italic.z b/src/lib/fpdf-easytable/font/Arimo-Italic.z
new file mode 100644
index 0000000..28ea8cc
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Italic.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-Regular.php b/src/lib/fpdf-easytable/font/Arimo-Regular.php
new file mode 100644
index 0000000..d6db3d3
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Regular.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>32,'FontBBox'=>'[-544 -303 1302 980]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>750);
+$up = -106;
+$ut = 73;
+$cw = array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+ chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+ chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+ chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>750,chr(193)=>556,chr(194)=>573,chr(195)=>573,chr(196)=>583,chr(197)=>556,
+ chr(198)=>823,chr(199)=>365,chr(200)=>500,chr(201)=>559,chr(202)=>559,chr(203)=>438,chr(204)=>583,chr(205)=>688,chr(206)=>552,chr(207)=>556,chr(208)=>542,chr(209)=>542,chr(210)=>556,chr(211)=>500,chr(212)=>458,chr(213)=>500,chr(214)=>669,chr(215)=>531,chr(216)=>521,chr(217)=>719,chr(218)=>458,chr(219)=>802,
+ chr(220)=>510,chr(221)=>823,chr(222)=>521,chr(223)=>625,chr(224)=>1010,chr(225)=>667,chr(226)=>656,chr(227)=>740,chr(228)=>677,chr(229)=>667,chr(230)=>760,chr(231)=>542,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>583,chr(236)=>656,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>722,
+ chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>635,chr(246)=>923,chr(247)=>667,chr(248)=>656,chr(249)=>885,chr(250)=>604,chr(251)=>917,chr(252)=>719,chr(253)=>938,chr(254)=>667,chr(255)=>792);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Regular.z';
+$originalsize = 45516;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Regular.z b/src/lib/fpdf-easytable/font/Arimo-Regular.z
new file mode 100644
index 0000000..937e26d
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Regular.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Lato-Regular.php b/src/lib/fpdf-easytable/font/Lato-Regular.php
new file mode 100644
index 0000000..dbbd929
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Lato-Regular.php
@@ -0,0 +1,25 @@
+<?php
+$type = 'TrueType';
+$name = 'Lato-Regular';
+$desc = array('Ascent'=>805,'Descent'=>-195,'CapHeight'=>717,'Flags'=>32,'FontBBox'=>'[-547 -269 1343 1079]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>532);
+$up = -233;
+$ut = 45;
+$cw = array(
+ chr(0)=>532,chr(1)=>532,chr(2)=>532,chr(3)=>532,chr(4)=>532,chr(5)=>532,chr(6)=>532,chr(7)=>532,chr(8)=>532,chr(9)=>532,chr(10)=>532,chr(11)=>532,chr(12)=>532,chr(13)=>532,chr(14)=>532,chr(15)=>532,chr(16)=>532,chr(17)=>532,chr(18)=>532,chr(19)=>532,chr(20)=>532,chr(21)=>532,
+ chr(22)=>532,chr(23)=>532,chr(24)=>532,chr(25)=>532,chr(26)=>532,chr(27)=>532,chr(28)=>532,chr(29)=>532,chr(30)=>532,chr(31)=>532,' '=>256,'!'=>269,'"'=>371,'#'=>580,'$'=>580,'%'=>802,'&'=>712,'\''=>204,'('=>267,')'=>267,'*'=>425,'+'=>580,
+ ','=>227,'-'=>372,'.'=>236,'/'=>452,'0'=>580,'1'=>580,'2'=>580,'3'=>580,'4'=>580,'5'=>580,'6'=>580,'7'=>580,'8'=>580,'9'=>580,':'=>250,';'=>262,'<'=>580,'='=>580,'>'=>580,'?'=>448,'@'=>837,'A'=>677,
+ 'B'=>647,'C'=>668,'D'=>761,'E'=>578,'F'=>566,'G'=>731,'H'=>764,'I'=>280,'J'=>423,'K'=>663,'L'=>514,'M'=>929,'N'=>764,'O'=>801,'P'=>601,'Q'=>801,'R'=>627,'S'=>543,'T'=>591,'U'=>736,'V'=>677,'W'=>1036,
+ 'X'=>649,'Y'=>624,'Z'=>602,'['=>306,'\\'=>452,']'=>306,'^'=>580,'_'=>459,'`'=>400,'a'=>497,'b'=>560,'c'=>478,'d'=>560,'e'=>528,'f'=>351,'g'=>520,'h'=>558,'i'=>240,'j'=>240,'k'=>508,'l'=>236,'m'=>823,
+ 'n'=>558,'o'=>567,'p'=>561,'q'=>560,'r'=>364,'s'=>433,'t'=>359,'u'=>558,'v'=>516,'w'=>786,'x'=>498,'y'=>516,'z'=>452,'{'=>301,'|'=>251,'}'=>301,'~'=>580,chr(127)=>532,chr(128)=>580,chr(129)=>532,chr(130)=>216,chr(131)=>338,
+ chr(132)=>368,chr(133)=>750,chr(134)=>580,chr(135)=>580,chr(136)=>400,chr(137)=>1164,chr(138)=>543,chr(139)=>281,chr(140)=>1091,chr(141)=>532,chr(142)=>602,chr(143)=>532,chr(144)=>532,chr(145)=>214,chr(146)=>214,chr(147)=>366,chr(148)=>366,chr(149)=>580,chr(150)=>580,chr(151)=>794,chr(152)=>400,chr(153)=>751,
+ chr(154)=>433,chr(155)=>282,chr(156)=>873,chr(157)=>532,chr(158)=>452,chr(159)=>624,chr(160)=>256,chr(161)=>252,chr(162)=>580,chr(163)=>580,chr(164)=>580,chr(165)=>580,chr(166)=>254,chr(167)=>495,chr(168)=>400,chr(169)=>832,chr(170)=>368,chr(171)=>429,chr(172)=>580,chr(173)=>372,chr(174)=>832,chr(175)=>400,
+ chr(176)=>415,chr(177)=>580,chr(178)=>334,chr(179)=>334,chr(180)=>400,chr(181)=>650,chr(182)=>701,chr(183)=>260,chr(184)=>400,chr(185)=>334,chr(186)=>402,chr(187)=>430,chr(188)=>734,chr(189)=>726,chr(190)=>742,chr(191)=>440,chr(192)=>677,chr(193)=>677,chr(194)=>677,chr(195)=>677,chr(196)=>677,chr(197)=>677,
+ chr(198)=>931,chr(199)=>668,chr(200)=>578,chr(201)=>578,chr(202)=>578,chr(203)=>578,chr(204)=>280,chr(205)=>280,chr(206)=>280,chr(207)=>280,chr(208)=>769,chr(209)=>764,chr(210)=>801,chr(211)=>801,chr(212)=>801,chr(213)=>801,chr(214)=>801,chr(215)=>580,chr(216)=>801,chr(217)=>736,chr(218)=>736,chr(219)=>736,
+ chr(220)=>736,chr(221)=>624,chr(222)=>599,chr(223)=>580,chr(224)=>497,chr(225)=>497,chr(226)=>497,chr(227)=>497,chr(228)=>497,chr(229)=>497,chr(230)=>805,chr(231)=>478,chr(232)=>528,chr(233)=>528,chr(234)=>528,chr(235)=>528,chr(236)=>240,chr(237)=>240,chr(238)=>240,chr(239)=>240,chr(240)=>566,chr(241)=>558,
+ chr(242)=>567,chr(243)=>567,chr(244)=>567,chr(245)=>567,chr(246)=>567,chr(247)=>580,chr(248)=>567,chr(249)=>558,chr(250)=>558,chr(251)=>558,chr(252)=>558,chr(253)=>516,chr(254)=>561,chr(255)=>516);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+$file = 'Lato-Regular.z';
+$originalsize = 43428;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Lato-Regular.z b/src/lib/fpdf-easytable/font/Lato-Regular.z
new file mode 100644
index 0000000..e6c7731
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Lato-Regular.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/courier.php b/src/lib/fpdf-easytable/font/courier.php
new file mode 100755
index 0000000..67dbeda
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courier.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+ $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courierb.php b/src/lib/fpdf-easytable/font/courierb.php
new file mode 100755
index 0000000..62550a4
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courierb.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Bold';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+ $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courierbi.php b/src/lib/fpdf-easytable/font/courierbi.php
new file mode 100755
index 0000000..6a3ecc6
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courierbi.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-BoldOblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+ $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courieri.php b/src/lib/fpdf-easytable/font/courieri.php
new file mode 100755
index 0000000..b88e098
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courieri.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Oblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+ $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helvetica.php b/src/lib/fpdf-easytable/font/helvetica.php
new file mode 100755
index 0000000..2be3eca
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helvetica.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+ chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+ chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+ chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+ chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+ chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticab.php b/src/lib/fpdf-easytable/font/helveticab.php
new file mode 100755
index 0000000..c88394c
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticab.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+ chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+ chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+ chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+ chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticabi.php b/src/lib/fpdf-easytable/font/helveticabi.php
new file mode 100755
index 0000000..bcea807
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticabi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-BoldOblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+ chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+ chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+ chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+ chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticai.php b/src/lib/fpdf-easytable/font/helveticai.php
new file mode 100755
index 0000000..a328b04
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticai.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Oblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+ chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+ chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+ chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+ chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+ chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/symbol.php b/src/lib/fpdf-easytable/font/symbol.php
new file mode 100755
index 0000000..5b9147b
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/symbol.php
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'Symbol';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+ chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+ ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+ 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+ 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+ 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
+ chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+ chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
+ chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
+ chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
+ chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
+ chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
+$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
+?>
diff --git a/src/lib/fpdf-easytable/font/times.php b/src/lib/fpdf-easytable/font/times.php
new file mode 100755
index 0000000..f78850f
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/times.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Roman';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+ chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+ ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+ 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+ 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+ 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+ chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
+ chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+ chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+ chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+ chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesb.php b/src/lib/fpdf-easytable/font/timesb.php
new file mode 100755
index 0000000..0516750
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesb.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+ chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+ ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+ 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+ 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+ chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+ chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+ chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesbi.php b/src/lib/fpdf-easytable/font/timesbi.php
new file mode 100755
index 0000000..32fe25e
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesbi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-BoldItalic';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+ chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+ ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+ 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+ 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+ 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+ chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+ chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+ chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+ chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesi.php b/src/lib/fpdf-easytable/font/timesi.php
new file mode 100755
index 0000000..b0e5a62
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Italic';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+ chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+ ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+ 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+ 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+ 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+ chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
+ chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+ chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
+ chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+ chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/zapfdingbats.php b/src/lib/fpdf-easytable/font/zapfdingbats.php
new file mode 100755
index 0000000..b9d0309
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/zapfdingbats.php
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'ZapfDingbats';
+$up = -100;
+$ut = 50;
+$cw = array(
+ chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
+ chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+ ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+ 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+ 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+ 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
+ chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+ chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
+ chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
+ chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
+ chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
+ chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
+$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
+?>
diff --git a/src/lib/fpdf-easytable/formatedstring.php b/src/lib/fpdf-easytable/formatedstring.php
new file mode 100644
index 0000000..682842d
--- /dev/null
+++ b/src/lib/fpdf-easytable/formatedstring.php
@@ -0,0 +1,209 @@
+<?php
+ /**********************************************************************
+ * formateString *
+ * *
+ * Version: 1.2 *
+ * Date: 04-10-2017 *
+ * Author: Dan Machado *
+ * Use within exfpdf class *
+ **********************************************************************/
+ class formatedString{
+ public $parced_str;
+ public $style_map;
+ public $positions;
+ private $np;
+ public $iterator;
+ public $width;
+ public $lines;
+ public $linesmap;
+ public $used_fonts;
+
+ private function get_style($str){
+ $style=array('font-family'=>false, 'font-weight'=>false, 'font-style'=>false,
+ 'font-size'=>false, 'font-color'=>false, 'href'=>'');
+ $tmp=explode(';', trim($str, '",\', '));
+ foreach($tmp as $x){
+ if($x && strpos($x,':')>0){
+ $r=explode(':',$x);
+ $r[0]=trim($r[0]);
+ $r[1]=trim($r[1]);
+ if(isset($style[$r[0]]) || $r[0]=='style'){
+ if($r[0]=='style' || $r[0]=='font-style'){
+ $r[1]=strtoupper($r[1]);
+ if(strpos($r[1], 'B')!==false){
+ $style['font-weight']='B';
+ }
+ if(strpos($r[1], 'I')!==false){
+ $style['font-style']='I';
+ }
+ if(strpos($r[1], 'U')!==false){
+ $style['font-style'].='U';
+ }
+ }
+ elseif($r[1]){
+ if($r[0]=='href'){
+ $style[$r[0]]=implode(':', array_slice($r,1));
+ }
+ else{
+ $style[$r[0]]=$r[1];
+ }
+ }
+ }
+ }
+ }
+ return $style;
+ }
+
+
+ private function style_merge($style1, $style2){
+ $result=$style1;
+ foreach($style2 as $k=>$v){
+ if($v){
+ $result[$k]=$v;
+ }
+ }
+ return $result;
+ }
+
+ private function style_parcer($text, &$font_data){
+ $str=trim(strtr($text, array("\r"=>'', "\t"=>'')));
+ $rep=array('[bB]{1}'=>'B', '[iI]{1}'=>'I', '[iI]{1}[ ]*[bB]{1}'=>'BI', '[bB]{1}[ ]*[iI]{1}'=>'BI' );
+ foreach($rep as $a=>$v){
+ $str=preg_replace('/<[ ]*'.$a.'[ ]*>/', "<$v>", $str);
+ $str=preg_replace('/<[ ]*\/+[ ]*'.$a.'[ ]*>/', "</$v>", $str);
+ }
+ $str=preg_replace('/<BI>/', '<s "font-weight:B;font-style:I">', $str);
+ $str=preg_replace('/<\/BI>/', "</s>", $str);
+ $str=preg_replace('/<B>/', '<s "font-weight:B;">', $str);
+ $str=preg_replace('/<\/B>/', "</s>", $str);
+ $str=preg_replace('/<I>/', '<s "font-style:I;">', $str);
+ $str=preg_replace('/<\/I>/', "</s>", $str);
+ $open=array();
+ $total=array();
+ $lt="<s";
+ $rt="</s>";
+ $j=strpos($str, $lt, 0);
+ while($j!==false){
+ if($j>0 && ord($str[$j-1])==92){
+ $j=strpos($str, $lt, $j+1);
+ continue;
+ }
+ $k=strpos($str, '>',$j+1);
+ $open[$j]=substr($str, $j+2, $k-($j+2));
+ $total[]=$j;
+ $j=strpos($str, $lt, $j+1);
+ }
+ $j=strpos($str, $rt, 0);
+ while($j!==false){
+ $total[]=$j;
+ $j=strpos($str, $rt, $j+1);
+ }
+ sort($total);
+
+ $cs='';
+ foreach($font_data as $k=>$v){
+ $cs.=$k . ':'. $v . '; ';
+ }
+ $cs=$this->get_style($cs);
+ $tmp=array($cs);
+ $blocks=array();
+ $blockstyle=array();
+ $n=count($total);
+ $k=0;
+ for($i=0; $i<$n; $i++){
+ $blocks[]=substr($str, $k, $total[$i]-$k);
+ $blockstyle[]=$cs;
+ if(isset($open[$total[$i]])){
+ $cs=$this->style_merge($cs, $this->get_style($open[$total[$i]]));
+ array_push($tmp, $cs);
+ $k=strpos($str, '>',$total[$i]+1)+1;
+ }
+ else{
+ $k=$total[$i]+4;
+ array_pop($tmp);
+ $l=count($tmp)-1;
+ $cs=$tmp[$l];
+ }
+ }
+ if($k<strlen($str)){
+ $blocks[]=substr($str, $k);
+ $blockstyle[]=$cs;
+ }
+ $n=count($blocks);
+ for($i=0; $i<$n; $i++){
+ $this->parced_str.=strtr($blocks[$i], array('\<s'=>'<s'));
+ if(strlen($blocks[$i])>0){
+ $blockstyle[$i]['style']=$blockstyle[$i]['font-weight'] . $blockstyle[$i]['font-style'];
+ unset($blockstyle[$i]['font-weight']);
+ unset($blockstyle[$i]['font-style']);
+ $this->style_map[strlen($this->parced_str)-1]=$blockstyle[$i];
+ }
+ }
+ }
+
+ public function __construct($text, $width, &$font_data){
+ $this->iterator=0;
+ $this->parced_str='';
+ $this->style_map=array();
+ $this->style_parcer($text, $font_data);
+ $this->positions=array_keys($this->style_map);
+ $this->np=(bool)count($this->positions);
+ $this->width=$width;
+ $this->lines=array('');
+ $this->linesmap[0]=array(0, 0, 0);
+ $this->used_fonts=array();
+ }
+
+ public function get_str(){
+ return $this->parced_str;
+ }
+
+ public function get_current_style($i){
+ if(!$this->np){
+ return '';
+ }
+ while($this->positions[$this->iterator]<$i){
+ $this->iterator++;
+ }
+ return $this->style_map[$this->positions[$this->iterator]];
+ }
+
+
+ public function break_by_style($t){
+ $i=$this->linesmap[$t][0];
+ $j=$this->linesmap[$t][1];
+ $this->iterator=0;
+ $result=array('chunks'=>array(), 'style'=>array(), 'height'=>0, 'width'=>$this->linesmap[$t][2]);
+ if(strlen($this->parced_str)==0){
+ return $result;
+ }
+ $cs=$this->get_current_style($i);
+ $result['height']=$cs['font-size'];
+ $r=0;
+ $result['chunks'][$r]='';
+ $result['style'][$r]=$cs;
+ while($this->parced_str[$j]==' '){
+ $j--;
+ }
+ $tmp=$i;
+ for($k=$i; $k<=$j; $k++){
+ if($this->parced_str[$tmp]==' ' && $this->parced_str[$k]==' '){
+ $tmp=$k;
+ continue;
+ }
+ if($cs!=$this->get_current_style($k)) {
+ $r++;
+ $cs=$this->get_current_style($k);
+ $result['chunks'][$r]='';
+ $result['style'][$r]=$cs;
+ if($result['height']<$cs['font-size']){
+ $result['height']=$cs['font-size'];
+ }
+ }
+ $result['chunks'][$r].=$this->parced_str[$k];
+ $tmp=$k;
+ }
+ return $result;
+ }
+}
+?>