Первая копия
3
metadata/dbms/.htaccess
Normal file
@ -0,0 +1,3 @@
|
||||
RewriteEngine on
|
||||
# Убирает версию файла из file_v1234567890.js в file.js
|
||||
RewriteRule ^(.*)_v[0-9]*\.(css|js|gif|png|jpg)$ $1.$2 [L]
|
||||
117
metadata/dbms/BrowserDetect.js
Normal file
@ -0,0 +1,117 @@
|
||||
var BrowserDetect = {
|
||||
init: function () {
|
||||
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
|
||||
this.version = this.searchVersion(navigator.userAgent)
|
||||
|| this.searchVersion(navigator.appVersion)
|
||||
|| "an unknown version";
|
||||
this.OS = this.searchString(this.dataOS) || "an unknown OS";
|
||||
},
|
||||
searchString: function (data) {
|
||||
for (var i=0;i<data.length;i++) {
|
||||
var dataString = data[i].string;
|
||||
var dataProp = data[i].prop;
|
||||
this.versionSearchString = data[i].versionSearch || data[i].identity;
|
||||
if (dataString) {
|
||||
if (dataString.indexOf(data[i].subString) != -1)
|
||||
return data[i].identity;
|
||||
}
|
||||
else if (dataProp)
|
||||
return data[i].identity;
|
||||
}
|
||||
},
|
||||
searchVersion: function (dataString) {
|
||||
var index = dataString.indexOf(this.versionSearchString);
|
||||
if (index == -1) return;
|
||||
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
|
||||
},
|
||||
dataBrowser: [
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Chrome",
|
||||
identity: "Chrome"
|
||||
},
|
||||
{ string: navigator.userAgent,
|
||||
subString: "OmniWeb",
|
||||
versionSearch: "OmniWeb/",
|
||||
identity: "OmniWeb"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "Apple",
|
||||
identity: "Safari",
|
||||
versionSearch: "Version"
|
||||
},
|
||||
{
|
||||
prop: window.opera,
|
||||
identity: "Opera",
|
||||
versionSearch: "Version"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "iCab",
|
||||
identity: "iCab"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "KDE",
|
||||
identity: "Konqueror"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Firefox",
|
||||
identity: "Firefox"
|
||||
},
|
||||
{
|
||||
string: navigator.vendor,
|
||||
subString: "Camino",
|
||||
identity: "Camino"
|
||||
},
|
||||
{ // for newer Netscapes (6+)
|
||||
string: navigator.userAgent,
|
||||
subString: "Netscape",
|
||||
identity: "Netscape"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "MSIE",
|
||||
identity: "Explorer",
|
||||
versionSearch: "MSIE"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "Gecko",
|
||||
identity: "Mozilla",
|
||||
versionSearch: "rv"
|
||||
},
|
||||
{ // for older Netscapes (4-)
|
||||
string: navigator.userAgent,
|
||||
subString: "Mozilla",
|
||||
identity: "Netscape",
|
||||
versionSearch: "Mozilla"
|
||||
}
|
||||
],
|
||||
dataOS : [
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Win",
|
||||
identity: "Windows"
|
||||
},
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Mac",
|
||||
identity: "Mac"
|
||||
},
|
||||
{
|
||||
string: navigator.userAgent,
|
||||
subString: "iPhone",
|
||||
identity: "iPhone/iPod"
|
||||
},
|
||||
{
|
||||
string: navigator.platform,
|
||||
subString: "Linux",
|
||||
identity: "Linux"
|
||||
}
|
||||
]
|
||||
|
||||
};
|
||||
BrowserDetect.init();
|
||||
212
metadata/dbms/TCGallery.js
Normal file
@ -0,0 +1,212 @@
|
||||
|
||||
//Галерея изображений на первой странице сайта
|
||||
function TCGallery(parent)
|
||||
{
|
||||
this.work = function()
|
||||
{
|
||||
if(this.mas[0].style.opacity > 0.05)
|
||||
{
|
||||
this.mas[0].style.opacity = this.mas[0].style.opacity - 0.05;
|
||||
this.timeout_id=setTimeout(function(thiz){return function(){thiz.work();}}(this),50);
|
||||
|
||||
this.test++;
|
||||
//console.info(this.test+' 50 '+this.mas[0].style.opacity);
|
||||
}else
|
||||
{
|
||||
//Перестовляем Z индексы первый на последнее место (больший наверху)
|
||||
if(this.mas.length>0)
|
||||
{
|
||||
var z=this.mas[this.mas.length-1].style.zIndex;
|
||||
for(var i=this.mas.length-1;i>0;i--)
|
||||
{
|
||||
this.mas[i].style.zIndex=this.mas[i-1].style.zIndex
|
||||
}
|
||||
this.mas[0].style.zIndex=z;
|
||||
}
|
||||
|
||||
//Поменяли местами востанавливаем прозрачность
|
||||
for(var i=0;i<this.mas.length;i++)
|
||||
{ this.mas[i].style.opacity = 1;
|
||||
}
|
||||
this.mas.sort(function(a,b){return b.style.zIndex-a.style.zIndex;}); //Сортируем с макс Z индексом наверху в 0ле
|
||||
this.timeout_id=setTimeout(function(thiz){return function(){thiz.work();}}(this),5000); //Перезапускаем таймер через 10 секунд с максимальным Z индексом
|
||||
|
||||
this.selected();
|
||||
|
||||
this.test++;
|
||||
//console.info(this.test+' 5000 '+this.mas[0].style.opacity);
|
||||
}
|
||||
};
|
||||
//Стартуем галерею
|
||||
this.Start = function()
|
||||
{
|
||||
var maxz=0;
|
||||
for(var i=0;i<this.mas.length;i++)
|
||||
{ this.mas[i].style.opacity = 1;
|
||||
if(maxz<this.mas[i].style.zIndex) maxz=this.mas[i].style.zIndex;
|
||||
}
|
||||
if(this.mas.length>0)
|
||||
setTimeout(function(thiz){return function(){thiz.work();}}(this),5000);
|
||||
maxz++;
|
||||
|
||||
//Кнопочки для переключения картинок
|
||||
var cdv=document.createElement('div');
|
||||
cdv.style.cssText='opacity: 0.7; display: block; position: absolute; bottom: 5px; right: 5px; z-index: '+maxz+'; border: solid 0px red;';
|
||||
for(var i=0;i<this.mas.length;i++)
|
||||
{
|
||||
var btn=document.createElement('div');
|
||||
btn.style.cssText='cursor: pointer; background-color: #eeeeee; text-align: center; display: inline-block; margin: 2px; border: solid 1px black; width: 17px;';
|
||||
btn.appendChild(document.createTextNode(i+1));
|
||||
btn.onclick = function(thiz,i){return function(){ thiz.moveTo(i); }; }(this,i);
|
||||
cdv.appendChild(btn);
|
||||
this.btns.push(btn);
|
||||
}
|
||||
this.parent.appendChild(cdv);
|
||||
if(this.btns.length>0) this.btns[0].style.backgroundColor='#f3af5a';
|
||||
};
|
||||
//Переместить на заданный слой (позиция с 0)
|
||||
this.moveTo = function(pos)
|
||||
{
|
||||
if(pos<0 || pos>this.firstmas.length - 1) return;
|
||||
var elm=this.firstmas[pos];
|
||||
for(var j=0;j<this.mas.length;j++)
|
||||
{
|
||||
if(this.mas[0]==elm) break;
|
||||
|
||||
var z=this.mas[this.mas.length-1].style.zIndex;
|
||||
for(var i=this.mas.length-1;i>0;i--)
|
||||
{
|
||||
this.mas[i].style.zIndex=this.mas[i-1].style.zIndex
|
||||
}
|
||||
this.mas[0].style.zIndex=z;
|
||||
this.mas.sort(function(a,b){return b.style.zIndex-a.style.zIndex;});
|
||||
}
|
||||
//Поменяли местами востанавливаем прозрачность
|
||||
for(var i=0;i<this.mas.length;i++)
|
||||
{ this.mas[i].style.opacity = 1.0;
|
||||
}
|
||||
|
||||
clearTimeout(this.timeout_id)
|
||||
this.timeout_id=setTimeout(function(thiz){return function(){thiz.work();}}(this),10000);
|
||||
this.selected();
|
||||
};
|
||||
//Поменялся элемент
|
||||
this.selected = function()
|
||||
{
|
||||
var pos=0;
|
||||
for(var i=0;i<this.firstmas.length;i++)
|
||||
{ if(this.mas[0]==this.firstmas[i])
|
||||
{ pos=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//Обнуляем стили
|
||||
for(var i=0;i<this.btns.length;i++)
|
||||
this.btns[i].style.backgroundColor='#eeeeee';
|
||||
//Выставляем стиль для выбранного элемента
|
||||
this.btns[pos].style.backgroundColor='#f3af5a';
|
||||
};
|
||||
|
||||
//Private
|
||||
//Получить детей в виде массива
|
||||
this.getChildsMas = function()
|
||||
{
|
||||
var mas = new Array();
|
||||
if(this.parent!==null)
|
||||
{
|
||||
var child = this.parent.firstChild;
|
||||
while(child)
|
||||
{ if(typeof child.style !== "undefined") //Только те где есть стиль
|
||||
{ mas.push(child);
|
||||
}
|
||||
child = child.nextSibling;
|
||||
}
|
||||
}
|
||||
return mas;
|
||||
};
|
||||
//Private
|
||||
//Получить позицию по объекту (-1 если ненайден)
|
||||
this.getPos = function(obj)
|
||||
{
|
||||
for(var i=0;i<this.firstmas.length;i++)
|
||||
{ if(this.firstmas[i]==obj) return i;
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
|
||||
this.test=0;
|
||||
|
||||
//Конструктор
|
||||
this.timeout_id =0;
|
||||
this.parent=parent;
|
||||
this.mas = this.getChildsMas(); //Массив элементов которые будут "Галереится"
|
||||
this.mas.sort(function(a,b){return b.style.zIndex-a.style.zIndex;});
|
||||
this.firstmas = [].concat(this.mas); //Первоначальный порядок элементов
|
||||
this.btns = new Array();
|
||||
}
|
||||
|
||||
//Галерея изображений на странице товара (Двигается в право в лево)
|
||||
function TCGallery2(parent)
|
||||
{
|
||||
this.addImage = function(small)
|
||||
{
|
||||
this.mas.push({div: small, sell: false});
|
||||
|
||||
small.onmouseover = function(thiz,small)
|
||||
{ return function()
|
||||
{
|
||||
if(!thiz.ower) return;
|
||||
|
||||
pos=-1;
|
||||
for(i=0;i<thiz.mas.length;i++) if(small===thiz.mas[i].div) { pos=i;} //Позиция элемента в массиве
|
||||
if(pos===-1) return;
|
||||
|
||||
if(thiz.ower && pos!== thiz.pos )
|
||||
{ thiz.pos=pos * 400;
|
||||
thiz.moveTo();
|
||||
}
|
||||
};
|
||||
}(this,small);
|
||||
|
||||
small.onclick = function(thiz,small)
|
||||
{ return function()
|
||||
{
|
||||
pos=-1;
|
||||
for(i=0;i<thiz.mas.length;i++) if(small===thiz.mas[i].div) { pos=i; } else { thiz.mas[i].div.style.borderColor="#dfdfdf"; thiz.mas[i].sell=false; } //Позиция элемента в массиве
|
||||
if(pos===-1) return;
|
||||
|
||||
if(!thiz.mas[pos].sell) //Если щёлкнули на выделеное 1й раз
|
||||
{ thiz.mas[pos].sell = true;
|
||||
thiz.ower=false;
|
||||
small.style.borderColor='#999999';
|
||||
}else
|
||||
{ thiz.mas[pos].sell = false;
|
||||
thiz.ower=true;
|
||||
small.style.borderColor='#dfdfdf';
|
||||
}
|
||||
|
||||
if(pos!== thiz.pos )
|
||||
{ thiz.pos=pos * 400;
|
||||
thiz.moveTo();
|
||||
}
|
||||
};
|
||||
}(this,small);
|
||||
|
||||
};
|
||||
|
||||
//Плавная прокрутка по горизонтали
|
||||
this.moveTo = function()
|
||||
{
|
||||
if(this.parent==null) return;
|
||||
var dx=(this.pos - this.parent.scrollLeft)/20.0; //Шагов для достижения нужного положения
|
||||
if(dx>0) dx=Math.ceil(dx); else dx=Math.floor(dx);
|
||||
this.parent.scrollLeft+=dx;
|
||||
if(this.parent.scrollLeft!=this.pos)
|
||||
setTimeout(function(thiz){ return function(){ thiz.moveTo(); } }(this),10);
|
||||
}
|
||||
|
||||
this.mas = new Array(); //Массим элементов с рисуночками
|
||||
this.parent=parent;
|
||||
this.pos=0;
|
||||
this.ower=true;
|
||||
}
|
||||
129
metadata/dbms/dbms.css
Normal file
@ -0,0 +1,129 @@
|
||||
*{
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
}
|
||||
|
||||
html,body
|
||||
{
|
||||
height:100%;
|
||||
min-height:100%;
|
||||
margin: 0px 0px;
|
||||
padding: 0px;
|
||||
font-size: 14px;
|
||||
font-family: Arial;
|
||||
}
|
||||
|
||||
input,textarea
|
||||
{
|
||||
margin: 0px 0px;
|
||||
}
|
||||
|
||||
select
|
||||
{
|
||||
display: block;
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing:content-box;
|
||||
/*box-sizing:content-box;*/
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/*Над всеми по Z*/
|
||||
#menu
|
||||
{
|
||||
padding:0px;
|
||||
position:fixed;
|
||||
left:1px;
|
||||
top:1px;
|
||||
height:34px;
|
||||
width:70px;
|
||||
border:1px solid #000000;
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
z-index: 99999
|
||||
}
|
||||
/* Для элементов выступающих в роли кнопок */
|
||||
.button {
|
||||
-webkit-user-select: none; /* Chrome all / Safari all */
|
||||
-moz-user-select: none; /* Firefox all */
|
||||
-ms-user-select: none; /* IE 10+ */
|
||||
-o-user-select: none; /* No support for these yet, use at own risk */
|
||||
user-select: none; /* No support for these yet, use at own risk */
|
||||
|
||||
display: inline-block;
|
||||
/*display: table;*/
|
||||
|
||||
cursor: pointer;
|
||||
/*hite-space: nowrap;*/
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.shadow {
|
||||
box-shadow: 0 0 10px rgba(0,0,0,0.7);
|
||||
}
|
||||
|
||||
|
||||
/* Для полей состояжих из нескольких элементов (поле с кнопочкой допустим) */
|
||||
table.DBMSSimple {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
table.DBMSSimple td,table.DBMSSimple th {
|
||||
padding: 0px;
|
||||
border: 0px solid #999999;
|
||||
}
|
||||
|
||||
|
||||
/* For table show data */
|
||||
table.SEdit {
|
||||
border-collapse: collapse;
|
||||
border: 1px double #999999;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
border-spacing: 1px 1px;
|
||||
}
|
||||
table.SEdit td,table.SEdit th {
|
||||
padding: 1px;
|
||||
border: 0px solid #999999;
|
||||
}
|
||||
|
||||
table.SEdit th {
|
||||
font-weight: bold;
|
||||
background-color: rgb(218, 218, 218);
|
||||
}
|
||||
|
||||
|
||||
/* For table filter data whitesmoke */
|
||||
table.SFilter {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color:#f1f1f1;
|
||||
border-spacing: 1px 1px;
|
||||
}
|
||||
|
||||
table.SFilter td {
|
||||
padding: 1px;
|
||||
border: 0px solid #999999;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* For table show data */
|
||||
table.SShow {
|
||||
border-collapse: collapse;
|
||||
border: 1px double #999999;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
border-spacing: 1px 1px;
|
||||
}
|
||||
|
||||
table.SShow td,table.SShow th {
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
|
||||
table.SShow th {
|
||||
font-weight: bold;
|
||||
background-color: rgb(218, 218, 218);
|
||||
}
|
||||
1553
metadata/dbms/editrecord.js
Normal file
BIN
metadata/dbms/form/1.gif
Normal file
|
After Width: | Height: | Size: 134 B |
BIN
metadata/dbms/form/5.gif
Normal file
|
After Width: | Height: | Size: 45 B |
BIN
metadata/dbms/form/_t-l.gif
Normal file
|
After Width: | Height: | Size: 154 B |
BIN
metadata/dbms/form/b-l.gif
Normal file
|
After Width: | Height: | Size: 175 B |
BIN
metadata/dbms/form/b-r.gif
Normal file
|
After Width: | Height: | Size: 176 B |
BIN
metadata/dbms/form/b.gif
Normal file
|
After Width: | Height: | Size: 147 B |
BIN
metadata/dbms/form/close.gif
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
metadata/dbms/form/g.gif
Normal file
|
After Width: | Height: | Size: 295 B |
BIN
metadata/dbms/form/help.gif
Normal file
|
After Width: | Height: | Size: 724 B |
BIN
metadata/dbms/form/hide.gif
Normal file
|
After Width: | Height: | Size: 683 B |
BIN
metadata/dbms/form/l.gif
Normal file
|
After Width: | Height: | Size: 64 B |
BIN
metadata/dbms/form/loading.gif
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
metadata/dbms/form/none.gif
Normal file
|
After Width: | Height: | Size: 60 B |
BIN
metadata/dbms/form/r.gif
Normal file
|
After Width: | Height: | Size: 64 B |
BIN
metadata/dbms/form/t-l.gif
Normal file
|
After Width: | Height: | Size: 175 B |
BIN
metadata/dbms/form/t-r.gif
Normal file
|
After Width: | Height: | Size: 176 B |
BIN
metadata/dbms/form/t.gif
Normal file
|
After Width: | Height: | Size: 147 B |
BIN
metadata/dbms/form/t1.gif
Normal file
|
After Width: | Height: | Size: 319 B |
BIN
metadata/dbms/form/t11.gif
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
metadata/dbms/form/t12.gif
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
metadata/dbms/form/t2.gif
Normal file
|
After Width: | Height: | Size: 563 B |
BIN
metadata/dbms/form/t22.gif
Normal file
|
After Width: | Height: | Size: 598 B |
BIN
metadata/dbms/form/x.gif
Normal file
|
After Width: | Height: | Size: 61 B |
BIN
metadata/dbms/images/1x32.gif
Normal file
|
After Width: | Height: | Size: 43 B |
BIN
metadata/dbms/images/2px.gif
Normal file
|
After Width: | Height: | Size: 64 B |
BIN
metadata/dbms/images/blank.png
Normal file
|
After Width: | Height: | Size: 150 B |
BIN
metadata/dbms/images/closed.png
Normal file
|
After Width: | Height: | Size: 237 B |
BIN
metadata/dbms/images/datepicker.jpg
Normal file
|
After Width: | Height: | Size: 488 B |
BIN
metadata/dbms/images/document.png
Normal file
|
After Width: | Height: | Size: 204 B |
BIN
metadata/dbms/images/excel.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
metadata/dbms/images/g.png
Normal file
|
After Width: | Height: | Size: 957 B |
BIN
metadata/dbms/images/loading.gif
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
metadata/dbms/images/loading2.gif
Normal file
|
After Width: | Height: | Size: 977 B |
BIN
metadata/dbms/images/loading3.gif
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
metadata/dbms/images/minus.png
Normal file
|
After Width: | Height: | Size: 176 B |
BIN
metadata/dbms/images/pdf.gif
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
metadata/dbms/images/plus.png
Normal file
|
After Width: | Height: | Size: 180 B |
BIN
metadata/dbms/images/rdel.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
metadata/dbms/images/refresh.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
metadata/dbms/images/rplus.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
505
metadata/dbms/login.js
Normal file
@ -0,0 +1,505 @@
|
||||
|
||||
function TUser()
|
||||
{
|
||||
//Функция запрашивает информацию о текущем пользователе с сервера
|
||||
this.LoadData = function()
|
||||
{
|
||||
var r = new TRequest(this);
|
||||
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[0]]></cmd></metadata>';
|
||||
if(r.callServer(ScriptName,xs))
|
||||
{
|
||||
this.showShadow(true);
|
||||
}
|
||||
};
|
||||
|
||||
this.applyReq=function(req,fn,node)
|
||||
{
|
||||
//alert(getXMLNodeSerialisation(node));
|
||||
this.showShadow(false);
|
||||
|
||||
if(fn==7)
|
||||
{
|
||||
var nCmd=findFirstNode(node, "cmd");
|
||||
if(nCmd!=null)
|
||||
{
|
||||
if(findFirstNode(nCmd,'#cdata-section').nodeValue=="1") //Logout
|
||||
{
|
||||
location.reload();
|
||||
//window.location.href = '../';
|
||||
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="2") //Check if user not logged
|
||||
{
|
||||
if(findNode(node,'#cdata-section').nodeValue=="0") //if not logged
|
||||
{
|
||||
this.showLoginForm();
|
||||
}else
|
||||
{
|
||||
this.name=getCdataValue(findNode(node,'name'));
|
||||
this.surname=getCdataValue(findNode(node,'surname'));
|
||||
this.patronymic=getCdataValue(findNode(node,'patronymic'));
|
||||
|
||||
if (typeof this.onUpdateName !== 'undefined') {
|
||||
this.onUpdateName(this.name,this.surname,this.patronymic);
|
||||
}
|
||||
//configGUIbyAccessLevel();
|
||||
//var shadow=document.getElementById("shadow");
|
||||
//if(shadow.parentNode!=null) shadow.parentNode.removeChild(shadow);
|
||||
}
|
||||
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="3") //Login
|
||||
{
|
||||
//if(findNode(node,'#cdata-section').nodeValue=="0") //if not logged
|
||||
//{
|
||||
// alert(_('Invalid_username_and_or_password'));
|
||||
//}else
|
||||
//{
|
||||
// location.reload();
|
||||
//}
|
||||
}else if(findFirstNode(nCmd,'#cdata-section').nodeValue=="4") //Register
|
||||
{
|
||||
//if(findNode(node,'#cdata-section').nodeValue=="1") //if register
|
||||
//{
|
||||
// alert(_('New_user_is_registered')+'\n'+_('The_password_has_been_sent_to_you_by_Email'));
|
||||
// location.reload();
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
//Display login and registration form
|
||||
this.showLoginForm = function()
|
||||
{
|
||||
if(this.win==null || this.win.closed)
|
||||
{
|
||||
this.win=new TWin(true);
|
||||
this.win.TWin(10,10);
|
||||
this.win.setCaption(_('Authorization'));
|
||||
|
||||
this.win.setSize("350px","200px");
|
||||
|
||||
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
|
||||
<tbody>\n\
|
||||
<tr><td>\n\
|
||||
<table border="0" style="width: 100%; height: 100%;">\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px; width: 30%; white-space: nowrap"><b>'+_('Login')+' (E-mail):</b></td>\n\
|
||||
<td style="padding: 2px;"><input type="text" maxlength="50" style="width: 100%; padding: 2px; display: inline;" id="tcLogin'+this.uid+'" name="login"><br></td>\n\
|
||||
</tr>\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px;"><b>Password:</b></td>\n\
|
||||
<td style="padding: 2px;"><input type="password" maxlength="33" style="width: 100%; padding: 2px; display: inline;" id="tcPassword'+this.uid+'" name="password"><br></td>\n\
|
||||
</tr>\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px;" colspan="2"><table cellspacing="0" cellpadding="0" border="0" style="width: 100%;"><tr><td><label for="save0" style="white-space: nowrap;"><input id="save_'+this.uid+'" type="checkbox" style="display: inline;" checked/> Remember (<a href="#" onclick="showRestoreForm();">Forgot your password?</a>)</label></td></tr></table></td>\n\
|
||||
</tr>\n\
|
||||
<tr><td colspan="2" style="text-align: right;"><input class="button-secondary" id="TLogin_E'+this.uid+'" type="button" style="display: inline;" value="'+_('Log_in')+'"></td></tr>\n\
|
||||
</table>\n\
|
||||
</td></tr>\n\
|
||||
</tbody>\n\
|
||||
</table>\n\
|
||||
</div>';
|
||||
|
||||
this.win.setContent(str);
|
||||
|
||||
//Center the window and display the shadow
|
||||
//if(this.win.tbl.offsetHeight>this.win.div.offsetHeight) this.win.div.style.height=this.win.tbl.offsetHeight+"px";
|
||||
//if(this.win.tbl.offsetWidth>this.win.div.offsetWidth) this.win.div.style.width=this.win.tbl.offsetWidth+"px";
|
||||
this.win.setCenter();
|
||||
this.win.shadow=true;
|
||||
this.win.hide(false);
|
||||
|
||||
//Нажатие на кнопку авторизоваться
|
||||
var obj=null;
|
||||
obj=document.getElementById('TLogin_E'+this.uid);
|
||||
if(obj!==null)
|
||||
{
|
||||
obj.onclick=function(thiz)
|
||||
{
|
||||
return function()
|
||||
{
|
||||
var xs='<?xml version="1.0" encoding="utf-8"?>\
|
||||
<metadata fn="7">\
|
||||
<cmd><![CDATA[3]]></cmd>\n\
|
||||
<login><![CDATA['+document.getElementById('tcLogin'+thiz.uid).value+']]></login>\
|
||||
<password><![CDATA['+document.getElementById('tcPassword'+thiz.uid).value+']]></password>\
|
||||
</metadata>';
|
||||
|
||||
var request=new TRequest(thiz);
|
||||
if(request.callServer(ScriptName,xs))
|
||||
{
|
||||
thiz.win.showProgressBar();
|
||||
}
|
||||
};
|
||||
}(this);
|
||||
}
|
||||
}
|
||||
};
|
||||
//logout current user
|
||||
this.Logout = function()
|
||||
{
|
||||
xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[1]]></cmd></metadata>';
|
||||
var request=new TRequest(this);
|
||||
if(request.callServer(ScriptName,xs))
|
||||
{
|
||||
this.showShadow();
|
||||
}
|
||||
};
|
||||
|
||||
//Checking the session without its extension, if it is completed, we display the authorization window.
|
||||
this.checkSession = function()
|
||||
{
|
||||
$.getJSON('../session',{},function(thiz){return function(data){ if(data.result=='ERROR'){thiz.showLoginForm();} };}(this));
|
||||
setTimeout(function(thiz){return function(){thiz.checkSession();};}(this), 10000);
|
||||
};
|
||||
|
||||
this.showShadow = function(visible)
|
||||
{
|
||||
if(visible)
|
||||
{
|
||||
this.divsh=document.createElement('div'); //Тень для модального окна
|
||||
this.divsh.style.cssText="display: block; position: fixed; z-index:9999; top:0; left:0; height: 100%; width: 100%; background: rgba(0,0,0,0.3);";
|
||||
document.body.appendChild( this.divsh );
|
||||
}else
|
||||
{
|
||||
deleteHTML(this.divsh);
|
||||
}
|
||||
};
|
||||
//Check whether the already authorized (+ attempt to log in through "hash").
|
||||
this.isLogined=function()
|
||||
{
|
||||
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[2]]></cmd></metadata>';
|
||||
var request=new TRequest(this);
|
||||
if(request.callServer(ScriptName,xs))
|
||||
{
|
||||
this.showShadow(true);
|
||||
|
||||
alert(ScriptName+" = "+xs);
|
||||
|
||||
//m_winPP.showProgressBar();
|
||||
}
|
||||
};
|
||||
|
||||
this.divsh=null;
|
||||
this.id=null;
|
||||
this.name='';
|
||||
this.surname='';
|
||||
this.patronymic='';
|
||||
this.temp=false;
|
||||
this.role='';
|
||||
|
||||
//Запрашиваю данные о текущем пользователе с сервера
|
||||
//this.LoadData();
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Login form (not cross-source).
|
||||
* [^\x00-\x7F]+
|
||||
*/
|
||||
function TLogin()
|
||||
{
|
||||
this.showLoginForm = function()
|
||||
{
|
||||
this.win.TWin(10,10);
|
||||
this.win.shadow=true;
|
||||
this.win.setCaption(document.createTextNode("Enter"));
|
||||
|
||||
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
|
||||
<tbody>\n\
|
||||
<tr><td>\n\
|
||||
<table border="0" style="width: 100%; height: 100%;">\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px; width: 30%; white-space: nowrap"><b>'+_('Login')+' (E-mail):</b></td>\n\
|
||||
<td style="padding: 2px;"><input type="text" maxlength="50" style="width: 100%; padding: 2px; display: inline;" id="tcLogin'+this.uid+'" name="login"><br></td>\n\
|
||||
</tr>\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px;"><b>Password:</b></td>\n\
|
||||
<td style="padding: 2px;"><input type="password" maxlength="33" style="width: 100%; padding: 2px; display: inline;" id="tcPassword'+this.uid+'" name="password"><br></td>\n\
|
||||
</tr>\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px;" colspan="2"><table cellspacing="0" cellpadding="0" border="0" style="width: 100%;"><tr><td><label for="save0" style="white-space: nowrap;"><input id="save_'+this.uid+'" type="checkbox" style="display: inline;" checked/> Remember (<a href="#" onclick="showRestoreForm();">Forgot your password?</a>)</label></td></tr></table></td>\n\
|
||||
</tr>\n\
|
||||
<tr><td colspan="2" style="text-align: right;"><input class="button-secondary" id="TLogin_E'+this.uid+'" type="button" style="display: inline;" value="'+_('Log_in')+'"></td></tr>\n\
|
||||
</table>\n\
|
||||
</td></tr>\n\
|
||||
</tbody>\n\
|
||||
</table>\n\
|
||||
</div>';
|
||||
|
||||
this.win.setContent(str);
|
||||
|
||||
var e=document.getElementById('TLogin_E'+this.uid);
|
||||
e.onclick=function(obj){ return function(){obj.onEnter(); };}(this);
|
||||
e=document.getElementById('tcLogin'+this.uid);
|
||||
e.onkeydown=function(obj){ return function(e){ if(e.which==13) obj.onEnter(); return true; };}(this);
|
||||
e=document.getElementById('tcPassword'+this.uid);
|
||||
e.onkeydown=function(obj){ return function(e){ if(e.which==13) obj.onEnter(); return true; };}(this);
|
||||
|
||||
this.win.setSize("300px","155px");
|
||||
this.win.setCenter();
|
||||
this.win.obj=this;
|
||||
|
||||
this.win.hide(false);
|
||||
};
|
||||
|
||||
|
||||
this.onEnter=function()
|
||||
{
|
||||
var login=document.getElementById('tcLogin'+this.uid).value;
|
||||
var password=document.getElementById('tcPassword'+this.uid).value;
|
||||
if(login=='' || password=='')
|
||||
{ str="Not filled in the required fields: ";
|
||||
if(login=='') str+='"'+_('Login')+' (E-mail)"';
|
||||
if(login=='' && password=='') str+=', ';
|
||||
if(password=='') str+='"Password"';
|
||||
str+='!';
|
||||
alert(str);
|
||||
}else
|
||||
this.Login(login,password,document.getElementById('save_'+this.uid).checked);
|
||||
};
|
||||
|
||||
this.applyReq=function(req,fn,node)
|
||||
{
|
||||
// alert(getXMLNodeSerialisation(node));
|
||||
|
||||
if (fn==-1)
|
||||
{
|
||||
alert(findFirstNode(node,'#cdata-section').nodeValue);
|
||||
}else if (fn==4)
|
||||
{
|
||||
//nodeToTable(node);
|
||||
}else if (fn==7)
|
||||
{
|
||||
var cmd=getCdataValue(findFirstNode(node,"cmd"));
|
||||
//alert('cmd='+cmd);
|
||||
if(cmd==='0')
|
||||
{
|
||||
this.m_lo=getCdataValue(findFirstNode(node,"login")) == '0' ? false : true;
|
||||
if(!this.m_lo)
|
||||
{ this.showLoginForm();
|
||||
}else
|
||||
{
|
||||
var name=getCdataValue(findFirstNode(node,"name"));
|
||||
var user_name=document.getElementById('user_name');
|
||||
if(user_name!=null) user_name.innerHTML=name;
|
||||
|
||||
//Информируем слушатеелй о логине
|
||||
for(i=0;i<this.m_ls.length;i++)
|
||||
if(this.m_ls[i]!==null)
|
||||
this.m_ls[i].OnLogin(true); //0 - authorized, 1 - an incorrect username or password, 2 - left.
|
||||
}
|
||||
}else if(cmd==='1')
|
||||
{
|
||||
location.reload();
|
||||
}else if(cmd==='2')
|
||||
{
|
||||
var login=getCdataValue(findFirstNode(node,"login")) == '0' ? false : true;
|
||||
if(!login)
|
||||
{ alert('Не удалось авторизоваться.\nНеверный логин и/или пароль.');
|
||||
}else
|
||||
{
|
||||
this.m_lo=true;
|
||||
this.win.Close();
|
||||
|
||||
var name=getCdataValue(findFirstNode(node,"name"));
|
||||
var user_name=document.getElementById('user_name');
|
||||
if(user_name!=null) user_name.innerHTML=name;
|
||||
//Информируем слушатеелй о логине
|
||||
for(i=0;i<this.m_ls.length;i++)
|
||||
if(this.m_ls[i]!==null)
|
||||
this.m_ls[i].OnLogin(true); //0 - authorized, 1 - an incorrect username or password, 2 - left.
|
||||
}
|
||||
}
|
||||
/*
|
||||
this.m_lo=getCdataValue(findFirstNode(node,"login")) == '0' ? true : false;
|
||||
if(this.m_lo && this.win.div!==null) this.win.hide(true);
|
||||
this.m_UserName=getCdataValue(findFirstNode(node,"name"));
|
||||
*/
|
||||
}else
|
||||
alert("Not known function! fn=\""+fn+"\"" );
|
||||
|
||||
this.win.hideProgressBar();
|
||||
};
|
||||
|
||||
//l - login, p - password, s - allow or disallow auto-login!
|
||||
this.Login=function(login,password,save)
|
||||
{
|
||||
if(save)
|
||||
{ setCookie('GUID', guid(), 60, '/','','');
|
||||
}else
|
||||
{ setCookie('GUID', '', 60, '/','','');
|
||||
}
|
||||
|
||||
|
||||
|
||||
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7">\n\
|
||||
<cmd><![CDATA[2]]></cmd>\n\
|
||||
<login><![CDATA['+login+']]></login>\n\
|
||||
<password><![CDATA['+password+']]></password>\n\
|
||||
</metadata>';
|
||||
|
||||
//alert(xs);
|
||||
|
||||
if(this.request.callServer(ScriptName,xs))
|
||||
{
|
||||
this.win.showProgressBar();
|
||||
}
|
||||
};
|
||||
|
||||
//Check whether the already authorized (+ attempt to log in through "hash").
|
||||
this.Logined=function()
|
||||
{
|
||||
var xs='<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[0]]></cmd></metadata>';
|
||||
|
||||
//alert('xs='+xs);
|
||||
|
||||
this.request.callServer(ScriptName,xs);
|
||||
};
|
||||
|
||||
//logout current user
|
||||
this.Exit=function()
|
||||
{
|
||||
if(this.request.callServer(ScriptName,'<?xml version="1.0" encoding="utf-8"?><metadata fn="7"><cmd><![CDATA[1]]></cmd></metadata>'))
|
||||
{
|
||||
setCookie('GUID', '', 60, '/','','');
|
||||
showProgressBar(document.body);
|
||||
}
|
||||
};
|
||||
|
||||
this.addListener=function(l)
|
||||
{ if(l.OnLogin==null) alert('Object does not have the function "OnLogin()"!');
|
||||
this.m_ls[this.m_ls.length]=l;
|
||||
};
|
||||
|
||||
this.remListener=function(l)
|
||||
{ for(i=0;i<this.m_ls.length;i++)
|
||||
{ if(this.m_ls[i]==l)
|
||||
this.m_ls[i]=null;
|
||||
}
|
||||
};
|
||||
|
||||
TLogin.LoginIsOk=0; //login in
|
||||
TLogin.LoginIsError=1; //Invalid password and / or login.
|
||||
TLogin.LoginIsExit=2; //Exit
|
||||
|
||||
this.m_lo=false; //login in?
|
||||
this.name='Login';
|
||||
this.uid=getUID();
|
||||
this.win=new TWin();
|
||||
this.win.shadow=true;
|
||||
|
||||
this.m_ls=new Array(); //Listeners called OnLogin function.
|
||||
this.guid='';
|
||||
this.m_UserName=''; //Member Name
|
||||
|
||||
this.m_html=false;
|
||||
|
||||
this.request = new TRequest(this);
|
||||
}
|
||||
|
||||
//Display password recovery form
|
||||
function showRestoreForm()
|
||||
{
|
||||
var win=new TWin(true);
|
||||
win.TWin(10,10);
|
||||
win.setCaption(_("Password_recovery"));
|
||||
|
||||
str='<div id="TWin_DT_'+win.tWinId+'" style="width: 100%; height: 100%; padding: 4px; text-align: left;">\n\
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%; padding: 0px;">\n\
|
||||
<tr>\n\
|
||||
<td style="padding: 2px; white-space: nowrap"><b>'+_('Login')+' (E-mail)</b></td>\n\
|
||||
<td style="padding: 2px;"><input type="text" maxlength="40" style="width: 100%; display: inline;" id="'+win.uid+'_email" name="login">\n\
|
||||
<table id="'+win.uid+'_phone" style="width: 100%; display: none;" cellpadding="0" cellspacing="0"><tr><td style="white-space: nowrap;"><b>+7 ( </b><input type="text" maxlength="3" onkeydown="this.value = this.value.replace(/[^0-9]/g, \'\')" onkeyup="this.value = this.value.replace(/[^0-9]/g, \'\')" style="width: 35px; display: inline;" id="'+win.uid+'_phone0" value=""><b> ) </b></td><td style="width: 90%;"><input type="text" onkeydown="this.value = this.value.replace(/[^0-9]/g, \'\')" onkeyup="this.value = this.value.replace(/[^0-9]/g, \'\')" maxlength="7" style="width: 100%;display: inline;" id="'+win.uid+'_phone1" value=""></td></tr></table><br></td>\n\
|
||||
</tr>\n\
|
||||
<tr><td colspan="2" style="text-align: right; padding: 2px;"><input class="button-secondary" id="'+win.uid+'_restore" type="button" style="display: inline;" value="'+_('Restore')+'"></td></tr>\n\
|
||||
</table>\n\
|
||||
</td></tr>\n\
|
||||
</div>';
|
||||
document.getElementById('TWin_Co_'+win.tWinId).innerHTML=str;
|
||||
|
||||
win.setSize("300px","100px");
|
||||
|
||||
//Центрируем окно и отображаем тень
|
||||
if(win.tbl.offsetHeight>win.div.offsetHeight) win.div.style.height=win.tbl.offsetHeight+"px";
|
||||
if(win.tbl.offsetWidth>win.div.offsetWidth) win.div.style.width=win.tbl.offsetWidth+"px";
|
||||
win.setCenter();
|
||||
win.shadow=true;
|
||||
win.hide(false);
|
||||
|
||||
//Click on restore button
|
||||
var obj=null;
|
||||
obj=document.getElementById(win.uid+'_restore');
|
||||
if(obj!=null)
|
||||
{
|
||||
obj.onclick=function(win)
|
||||
{ return function()
|
||||
{
|
||||
win.showProgressBar();
|
||||
//showProgressBar(document.getElementById('TWin_DT_'+win.tWinId),win.uid);
|
||||
|
||||
var em=document.getElementById(win.uid+'_email').value;
|
||||
|
||||
if(em==''){ document.getElementById(win.uid+'_email').select(); alert(_('Not_filled_Email_address')); win.hideProgressBar(); return; }
|
||||
if(! isEmail(em)){ document.getElementById(win.uid+'_email').select(); alert(_('Please_enter_a_valid_email_address')); win.hideProgressBar(); return; }
|
||||
|
||||
//Send AJAX reqwest to server
|
||||
var xml='<?xml version="1.0" encoding="utf-8"?>\
|
||||
<metadata fn="7">\
|
||||
<cmd><![CDATA[0]]></cmd>\
|
||||
<login><![CDATA['+em+']]></login>\
|
||||
<captcha><![CDATA[]]></captcha>\
|
||||
</metadata>';
|
||||
|
||||
//Anonymous object
|
||||
obj=new function(win)
|
||||
{
|
||||
this.processReqChange = function(xmlHttpRequest, url, xmlString)
|
||||
{
|
||||
if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200)
|
||||
{
|
||||
if(typeof(xmlHttpRequest.responseXML)=='undefined' && xmlHttpRequest.contentType.match(/\/xml/)) //For IE XDomainRequest
|
||||
xmlHttpRequest.responseXML=CreateXMLDOC(xmlHttpRequest.responseText);
|
||||
|
||||
//загрузился xml документ начинаем его разбирать (по id функции в документе)
|
||||
var xmldoc = xmlHttpRequest.responseXML
|
||||
if(xmldoc==null) alert(_('Wrong_XML_document')+"!\n"+xmlHttpRequest.responseText);
|
||||
|
||||
var node = xmldoc.documentElement;
|
||||
if((node==null)||(node.getAttribute("fn")==null)) alert(_('Error')+"\n "+_("No_data")+"!\n"+xmlHttpRequest.responseText);
|
||||
else
|
||||
{
|
||||
//alert("Принятый браузером XML=\n"+getXMLNodeSerialisation(node));
|
||||
var fn = node.getAttribute("fn");
|
||||
if (fn==-1)
|
||||
{
|
||||
alert(findFirstNode(node,'#cdata-section').nodeValue);
|
||||
this.win.hideProgressBar();
|
||||
}else
|
||||
if(fn==7)
|
||||
{
|
||||
alert(findFirstNode(node,'#cdata-section').nodeValue);
|
||||
this.win.Close();
|
||||
}
|
||||
}
|
||||
}else
|
||||
{
|
||||
if(confirm(_('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+"\nRedo the request?"))
|
||||
{
|
||||
var call=new myXMLHttpRequest(this);
|
||||
call.callServer(url,xmlString);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
this.win=win; //For close after showing message.
|
||||
}
|
||||
(win);
|
||||
|
||||
var call=new myXMLHttpRequest(obj);
|
||||
call.callServer(ScriptName,xml);
|
||||
|
||||
};
|
||||
}(win);
|
||||
}
|
||||
}
|
||||
1489
metadata/dbms/records.php
Normal file
57
metadata/dbms/session.js
Normal file
@ -0,0 +1,57 @@
|
||||
//AJAX запросы для проверки сесии
|
||||
|
||||
function CheckSession(path)
|
||||
{
|
||||
this.processReqChange=function(req,url)
|
||||
{
|
||||
if(req.readyState === 4 || typeof(req.readyState) === 'undefined')
|
||||
{
|
||||
if(req.status === 200 || typeof(req.status) === 'undefined')
|
||||
{
|
||||
if(url.indexOf('fn=0')>=0)
|
||||
{
|
||||
this.ses_name=req.responseText;
|
||||
this.sendReq('?fn=1');
|
||||
}else
|
||||
if(url.indexOf('fn=1')>=0)
|
||||
{
|
||||
this.ses_id=req.responseText;
|
||||
this.run();
|
||||
}else
|
||||
if(url.indexOf('fn=2')>=0)
|
||||
{
|
||||
if(parseInt(req.responseText)<0)
|
||||
{
|
||||
clearTimeout(this.timer);
|
||||
//alert('Ваша сессия завершилась!');
|
||||
//location.reload();
|
||||
alert2('Ваша сессия завершилась! При нажатии на “OK” страница перезагрузится, а при нажатии на “X“ закроется сообщение.').onclick=function(){ location.reload(); };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
//Отправить запрос на сервер
|
||||
this.sendReq=function(prm)
|
||||
{
|
||||
var url=this.path+prm; //'http://'+document.domain+this.path+prm
|
||||
|
||||
var req = new window.XMLHttpRequest;
|
||||
req.onreadystatechange=function(thiz,req,url){ return function(){ thiz.processReqChange(req,url) } }(this,req,url);
|
||||
req.open("GET", url, true);
|
||||
req.send(null);
|
||||
};
|
||||
//Запрос состояния сессии через заданный интервал
|
||||
this.run=function()
|
||||
{
|
||||
this.sendReq('?fn=2&'+this.ses_name+'='+this.ses_id);
|
||||
this.timer=setTimeout(function(thiz){ return function(){ thiz.run(); }}(this), 60000);
|
||||
};
|
||||
|
||||
this.path=path; //URL файла session.php
|
||||
this.ses_name=''; //Наименование сесии
|
||||
this.ses_id=''; //Идентификатор сесии
|
||||
this.timer=0; //Идентификатор таймера
|
||||
|
||||
this.sendReq('?fn=0');
|
||||
}
|
||||
45
metadata/dbms/session.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?
|
||||
//Скрипт должен возвращять время в секундах когда умрёт сесия
|
||||
//Скрипт работающий как AJAX в связке с javascript функцией 1 после загрузки выдать наименование сессионной переменной потом проверять на существование соответствующего файла в базе данных
|
||||
//Проверить обновляется ли файлик сесии
|
||||
//http://leopard.in.ua/2008/09/20/otslezhivanie-istecheniya-sroka-dejstviya-sessij/
|
||||
//session_save_path('C:\ses');
|
||||
|
||||
require_once("../include/tools.php");
|
||||
|
||||
$host = $_SERVER['HTTP_HOST'];
|
||||
$host = '.'.cutAfterLast($host,'.',2);
|
||||
ini_set('session.cookie_domain', $host);
|
||||
|
||||
error_reporting(E_ALL);
|
||||
|
||||
if(isset($_GET['fn'])) $fn=$_GET['fn']; else $fn='';
|
||||
|
||||
if($fn=='0')
|
||||
{
|
||||
echo session_name();
|
||||
exit;
|
||||
}else
|
||||
if($fn=='1')
|
||||
{
|
||||
@session_start();
|
||||
echo session_id();
|
||||
exit;
|
||||
}else
|
||||
if($fn=='2') //Вернуть время до смерти сесии в секундах
|
||||
{
|
||||
if(isset($_GET[session_name()])) $id=$_GET[session_name()]; else exit;
|
||||
|
||||
$sessionfile = ini_get('session.save_path') . DIRECTORY_SEPARATOR . 'sess_'.$id;
|
||||
if ( file_exists($sessionfile) )
|
||||
{
|
||||
//echo ini_get('session.gc_maxlifetime') - (time() - filemtime($sessionfile));
|
||||
echo '1'; //Чтоб только если файл удалился
|
||||
|
||||
}else echo '-1';
|
||||
exit;
|
||||
}else
|
||||
{
|
||||
echo 'error';
|
||||
}
|
||||
?>
|
||||
4
metadata/dbms/setup.js
Normal file
@ -0,0 +1,4 @@
|
||||
//var ScriptName='../metadata/dbms/records.jsp';
|
||||
var ScriptName='../records';
|
||||
var ScriptDName='../download';
|
||||
var ScriptUName='./upload';
|
||||
1599
metadata/dbms/showrecord.js
Normal file
117
metadata/dbms/tabs.js
Normal file
@ -0,0 +1,117 @@
|
||||
|
||||
function tcTab(caption)
|
||||
{
|
||||
this.setConText=function(txt)
|
||||
{ if(this.con!=null) this.con.parent.removeChild(this.con)
|
||||
this.con=document.createElement('div')
|
||||
this.con.style.cssText='width: 100%; height: 100%;'
|
||||
if(!this.sel) this.con.style.display='none'
|
||||
this.con.innerHTML=txt
|
||||
this.par.ctt.appendChild(this.con)
|
||||
return this.con
|
||||
}
|
||||
|
||||
this.setConObj=function(val)
|
||||
{
|
||||
if(this.con!=null) this.con.parent.removeChild(this.con)
|
||||
if (typeof val === 'string' || val instanceof String)
|
||||
val=document.getElementById(val);
|
||||
if(val===null || typeof(val)=='undefined') return;
|
||||
|
||||
this.con=val;
|
||||
if(!this.sel) this.con.style.display='none';
|
||||
this.par.ctt.appendChild(this.con);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
this.setSel=function()
|
||||
{
|
||||
for(var i=0;i<this.par.tbs.length;i++)
|
||||
{ this.par.tbs[i].div.style.background = '#dfdfdf'
|
||||
this.par.tbs[i].div.style.borderBottom = "1px solid #b3b3b3"
|
||||
this.par.tbs[i].sel=false
|
||||
this.par.tbs[i].con.style.display='none'
|
||||
}
|
||||
this.div.style.background = '#ffffff';
|
||||
this.div.style.borderBottom = '1px solid #ffffff'
|
||||
//this.con.style.display='inline'
|
||||
this.con.style.display='block';
|
||||
this.sel=true
|
||||
}
|
||||
|
||||
this.id=0;
|
||||
this.par=null;
|
||||
this.sel=false;
|
||||
this.con=null; //Элемент с содержимым
|
||||
this.href='';
|
||||
|
||||
//Сам таб на который нажимаем (ушко)
|
||||
this.div=document.createElement('div')
|
||||
this.div.style.cssText='position: relative; top: 1px; cursor: pointer; float: left; border: 1px solid #b3b3b3; border-radius: 5px 5px 0px 0px; padding: 1px; padding-right: 4px; padding-left: 4px; margin-left: 2px; margin-right: 2px;'
|
||||
this.div.style.background = '#dfdfdf';
|
||||
this.div.innerHTML=caption
|
||||
|
||||
this.div.onmouseover=function(obj){return function(){ if(!obj.sel) obj.div.style.background = '#f0f0f0';}}(this);
|
||||
this.div.onmouseout=function(obj){return function(){ if(!obj.sel) obj.div.style.background = '#dfdfdf' }}(this);
|
||||
this.div.onclick=function(obj){return function(){ obj.setSel(); if(obj.href!='') goToURL(obj.href); }}(this)
|
||||
}
|
||||
|
||||
/** Создать закладки
|
||||
* id - контейнер либо идентификатор контейнера в который вставляем табы
|
||||
*/
|
||||
function tcTabs(id)
|
||||
{
|
||||
this.addTab=function(caption)
|
||||
{
|
||||
var tab=new tcTab(caption)
|
||||
tab.par=this
|
||||
this.btt.appendChild(tab.div);
|
||||
|
||||
this.tbs[this.tbs.length]=tab;
|
||||
return tab;
|
||||
}
|
||||
|
||||
this.delTab=function(tab)
|
||||
{
|
||||
if (typeof tab === 'string' || tab instanceof String)
|
||||
{
|
||||
}else
|
||||
{
|
||||
for(var i=0;i<this.tbs.length;i++)
|
||||
{
|
||||
if(this.tbs[i]==tab)
|
||||
{
|
||||
this.btt.removeChild(tab.div);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.tbs=new Array();
|
||||
if(typeof id == 'string') this.bd=document.getElementById(id); else this.bd=id;
|
||||
|
||||
this.wra=document.createElement('div');
|
||||
this.wra.style.cssText="display: table; width :100%; height: 100%; padding: 0px; margin: 0px; border-collapse: collapse; border: 0px solid #000000;";
|
||||
|
||||
var tr=null;
|
||||
tr=document.createElement('div');
|
||||
tr.style.cssText='display: table-row; height: 1%; padding: 0px; margin: 0px; border: 0px solid #0000ff;'
|
||||
|
||||
this.btt=document.createElement('div');
|
||||
this.btt.style.cssText='display: table-cell; width :100%; height: 1%; padding: 0px; margin: 0px; border: 0px solid #0000ff;'
|
||||
tr.appendChild(this.btt);
|
||||
this.wra.appendChild(tr);
|
||||
|
||||
tr=document.createElement('div');
|
||||
tr.style.cssText='display: table-row; width :100%; height: 100%; padding: 0px; margin: 0px; border: 0px solid #0000ff;'
|
||||
|
||||
//Content
|
||||
this.ctt=document.createElement('div');
|
||||
this.ctt.style.cssText='display:table-cell; width :100%; height: 100%; padding: 0px; margin: 0px; border; border: 1px solid #b3b3b3; overflow:hidden;'
|
||||
|
||||
tr.appendChild(this.ctt);
|
||||
this.wra.appendChild(tr);
|
||||
|
||||
this.bd.appendChild(this.wra);
|
||||
}
|
||||
1
metadata/dbms/temp/.htaccess
Normal file
@ -0,0 +1 @@
|
||||
RewriteEngine off
|
||||
1565
metadata/dbms/tools.js
Normal file
271
metadata/include/Excel/oleread.inc
Normal file
@ -0,0 +1,271 @@
|
||||
<?php
|
||||
define('NUM_BIG_BLOCK_DEPOT_BLOCKS_POS', 0x2c);
|
||||
define('SMALL_BLOCK_DEPOT_BLOCK_POS', 0x3c);
|
||||
define('ROOT_START_BLOCK_POS', 0x30);
|
||||
define('BIG_BLOCK_SIZE', 0x200);
|
||||
define('SMALL_BLOCK_SIZE', 0x40);
|
||||
define('EXTENSION_BLOCK_POS', 0x44);
|
||||
define('NUM_EXTENSION_BLOCK_POS', 0x48);
|
||||
define('PROPERTY_STORAGE_BLOCK_SIZE', 0x80);
|
||||
define('BIG_BLOCK_DEPOT_BLOCKS_POS', 0x4c);
|
||||
define('SMALL_BLOCK_THRESHOLD', 0x1000);
|
||||
// property storage offsets
|
||||
define('SIZE_OF_NAME_POS', 0x40);
|
||||
define('TYPE_POS', 0x42);
|
||||
define('START_BLOCK_POS', 0x74);
|
||||
define('SIZE_POS', 0x78);
|
||||
define('IDENTIFIER_OLE', pack("CCCCCCCC",0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1));
|
||||
|
||||
//echo 'ROOT_START_BLOCK_POS = '.ROOT_START_BLOCK_POS."\n";
|
||||
|
||||
//echo bin2hex($data[ROOT_START_BLOCK_POS])."\n";
|
||||
//echo "a=";
|
||||
//echo $data[ROOT_START_BLOCK_POS];
|
||||
//function log
|
||||
|
||||
function GetInt4d($data, $pos)
|
||||
{
|
||||
$value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24);
|
||||
if ($value>=4294967294)
|
||||
{
|
||||
$value=-2;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
|
||||
class OLERead {
|
||||
var $data = '';
|
||||
|
||||
|
||||
function OLERead(){
|
||||
|
||||
|
||||
}
|
||||
|
||||
function read($sFileName){
|
||||
|
||||
// check if file exist and is readable (Darko Miljanovic)
|
||||
if(!is_readable($sFileName)) {
|
||||
$this->error = 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->data = @file_get_contents($sFileName);
|
||||
if (!$this->data) {
|
||||
$this->error = 1;
|
||||
return false;
|
||||
}
|
||||
//echo IDENTIFIER_OLE;
|
||||
//echo 'start';
|
||||
if (substr($this->data, 0, 8) != IDENTIFIER_OLE) {
|
||||
$this->error = 1;
|
||||
return false;
|
||||
}
|
||||
$this->numBigBlockDepotBlocks = GetInt4d($this->data, NUM_BIG_BLOCK_DEPOT_BLOCKS_POS);
|
||||
$this->sbdStartBlock = GetInt4d($this->data, SMALL_BLOCK_DEPOT_BLOCK_POS);
|
||||
$this->rootStartBlock = GetInt4d($this->data, ROOT_START_BLOCK_POS);
|
||||
$this->extensionBlock = GetInt4d($this->data, EXTENSION_BLOCK_POS);
|
||||
$this->numExtensionBlocks = GetInt4d($this->data, NUM_EXTENSION_BLOCK_POS);
|
||||
|
||||
/*
|
||||
echo $this->numBigBlockDepotBlocks." ";
|
||||
echo $this->sbdStartBlock." ";
|
||||
echo $this->rootStartBlock." ";
|
||||
echo $this->extensionBlock." ";
|
||||
echo $this->numExtensionBlocks." ";
|
||||
*/
|
||||
//echo "sbdStartBlock = $this->sbdStartBlock\n";
|
||||
$bigBlockDepotBlocks = array();
|
||||
$pos = BIG_BLOCK_DEPOT_BLOCKS_POS;
|
||||
// echo "pos = $pos";
|
||||
$bbdBlocks = $this->numBigBlockDepotBlocks;
|
||||
|
||||
if ($this->numExtensionBlocks != 0) {
|
||||
$bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4;
|
||||
}
|
||||
|
||||
for ($i = 0; $i < $bbdBlocks; $i++) {
|
||||
$bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos);
|
||||
$pos += 4;
|
||||
}
|
||||
|
||||
|
||||
for ($j = 0; $j < $this->numExtensionBlocks; $j++) {
|
||||
$pos = ($this->extensionBlock + 1) * BIG_BLOCK_SIZE;
|
||||
$blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, BIG_BLOCK_SIZE / 4 - 1);
|
||||
|
||||
for ($i = $bbdBlocks; $i < $bbdBlocks + $blocksToRead; $i++) {
|
||||
$bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos);
|
||||
$pos += 4;
|
||||
}
|
||||
|
||||
$bbdBlocks += $blocksToRead;
|
||||
if ($bbdBlocks < $this->numBigBlockDepotBlocks) {
|
||||
$this->extensionBlock = GetInt4d($this->data, $pos);
|
||||
}
|
||||
}
|
||||
|
||||
// var_dump($bigBlockDepotBlocks);
|
||||
|
||||
// readBigBlockDepot
|
||||
$pos = 0;
|
||||
$index = 0;
|
||||
$this->bigBlockChain = array();
|
||||
|
||||
for ($i = 0; $i < $this->numBigBlockDepotBlocks; $i++) {
|
||||
$pos = ($bigBlockDepotBlocks[$i] + 1) * BIG_BLOCK_SIZE;
|
||||
//echo "pos = $pos";
|
||||
for ($j = 0 ; $j < BIG_BLOCK_SIZE / 4; $j++) {
|
||||
$this->bigBlockChain[$index] = GetInt4d($this->data, $pos);
|
||||
$pos += 4 ;
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($this->bigBlockChain);
|
||||
//echo '=====2';
|
||||
// readSmallBlockDepot();
|
||||
$pos = 0;
|
||||
$index = 0;
|
||||
$sbdBlock = $this->sbdStartBlock;
|
||||
$this->smallBlockChain = array();
|
||||
|
||||
while ($sbdBlock != -2) {
|
||||
|
||||
$pos = ($sbdBlock + 1) * BIG_BLOCK_SIZE;
|
||||
|
||||
for ($j = 0; $j < BIG_BLOCK_SIZE / 4; $j++) {
|
||||
$this->smallBlockChain[$index] = GetInt4d($this->data, $pos);
|
||||
$pos += 4;
|
||||
$index++;
|
||||
}
|
||||
|
||||
$sbdBlock = $this->bigBlockChain[$sbdBlock];
|
||||
}
|
||||
|
||||
|
||||
// readData(rootStartBlock)
|
||||
$block = $this->rootStartBlock;
|
||||
$pos = 0;
|
||||
$this->entry = $this->__readData($block);
|
||||
|
||||
/*
|
||||
while ($block != -2) {
|
||||
$pos = ($block + 1) * BIG_BLOCK_SIZE;
|
||||
$this->entry = $this->entry.substr($this->data, $pos, BIG_BLOCK_SIZE);
|
||||
$block = $this->bigBlockChain[$block];
|
||||
}
|
||||
*/
|
||||
//echo '==='.$this->entry."===";
|
||||
$this->__readPropertySets();
|
||||
|
||||
}
|
||||
|
||||
function __readData($bl) {
|
||||
$block = $bl;
|
||||
$pos = 0;
|
||||
$data = '';
|
||||
|
||||
while ($block != -2) {
|
||||
$pos = ($block + 1) * BIG_BLOCK_SIZE;
|
||||
$data = $data.substr($this->data, $pos, BIG_BLOCK_SIZE);
|
||||
//echo "pos = $pos data=$data\n";
|
||||
$block = $this->bigBlockChain[$block];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
function __readPropertySets(){
|
||||
$offset = 0;
|
||||
//var_dump($this->entry);
|
||||
while ($offset < strlen($this->entry)) {
|
||||
$d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE);
|
||||
|
||||
$nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) << 8);
|
||||
|
||||
$type = ord($d[TYPE_POS]);
|
||||
//$maxBlock = strlen($d) / BIG_BLOCK_SIZE - 1;
|
||||
|
||||
$startBlock = GetInt4d($d, START_BLOCK_POS);
|
||||
$size = GetInt4d($d, SIZE_POS);
|
||||
|
||||
$name = '';
|
||||
for ($i = 0; $i < $nameSize ; $i++) {
|
||||
$name .= $d[$i];
|
||||
}
|
||||
|
||||
$name = str_replace("\x00", "", $name);
|
||||
|
||||
$this->props[] = array (
|
||||
'name' => $name,
|
||||
'type' => $type,
|
||||
'startBlock' => $startBlock,
|
||||
'size' => $size);
|
||||
|
||||
if (($name == "Workbook") || ($name == "Book")) {
|
||||
$this->wrkbook = count($this->props) - 1;
|
||||
}
|
||||
|
||||
if ($name == "Root Entry") {
|
||||
$this->rootentry = count($this->props) - 1;
|
||||
}
|
||||
|
||||
//echo "name ==$name=\n";
|
||||
|
||||
|
||||
$offset += PROPERTY_STORAGE_BLOCK_SIZE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getWorkBook(){
|
||||
if ($this->props[$this->wrkbook]['size'] < SMALL_BLOCK_THRESHOLD){
|
||||
// getSmallBlockStream(PropertyStorage ps)
|
||||
|
||||
$rootdata = $this->__readData($this->props[$this->rootentry]['startBlock']);
|
||||
|
||||
$streamData = '';
|
||||
$block = $this->props[$this->wrkbook]['startBlock'];
|
||||
//$count = 0;
|
||||
$pos = 0;
|
||||
while ($block != -2) {
|
||||
$pos = $block * SMALL_BLOCK_SIZE;
|
||||
$streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE);
|
||||
|
||||
$block = $this->smallBlockChain[$block];
|
||||
}
|
||||
|
||||
return $streamData;
|
||||
|
||||
|
||||
}else{
|
||||
|
||||
$numBlocks = $this->props[$this->wrkbook]['size'] / BIG_BLOCK_SIZE;
|
||||
if ($this->props[$this->wrkbook]['size'] % BIG_BLOCK_SIZE != 0) {
|
||||
$numBlocks++;
|
||||
}
|
||||
|
||||
if ($numBlocks == 0) return '';
|
||||
|
||||
//echo "numBlocks = $numBlocks\n";
|
||||
//byte[] streamData = new byte[numBlocks * BIG_BLOCK_SIZE];
|
||||
//print_r($this->wrkbook);
|
||||
$streamData = '';
|
||||
$block = $this->props[$this->wrkbook]['startBlock'];
|
||||
//$count = 0;
|
||||
$pos = 0;
|
||||
//echo "block = $block";
|
||||
while ($block != -2) {
|
||||
$pos = ($block + 1) * BIG_BLOCK_SIZE;
|
||||
$streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE);
|
||||
$block = $this->bigBlockChain[$block];
|
||||
}
|
||||
//echo 'stream'.$streamData;
|
||||
return $streamData;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
1084
metadata/include/Excel/reader.php
Normal file
379
metadata/include/MPDF54/CHANGELOG.txt
Normal file
@ -0,0 +1,379 @@
|
||||
===========================
|
||||
mPDF 5.4
|
||||
14/02/2012
|
||||
===========================
|
||||
|
||||
|
||||
Files changed
|
||||
-------------
|
||||
mpdf.php
|
||||
config.php
|
||||
compress.php
|
||||
classes/ttfontsuni.php
|
||||
classes/barcode.php
|
||||
classes/indic.php
|
||||
classes/svg.php
|
||||
examples/show_code.php ----- SECURITY RISK**
|
||||
examples/example49_changelog.php
|
||||
examples/example57_new_mPDF_v5-3_active_forms_b (replace example57_new_mPDF_v5-3_active_forms)
|
||||
includes/out.php
|
||||
mpdfi/fpdi_pdf_parser.php
|
||||
|
||||
Files added
|
||||
-----------
|
||||
classes/bmp.php
|
||||
classes/directw.php
|
||||
classes/form.php
|
||||
classes/grad.php
|
||||
classes/tocontents.php
|
||||
classes/wmf.php
|
||||
examples/example58_new_mPDF_v5-4_features
|
||||
|
||||
config.php changes
|
||||
------------------
|
||||
Edited: $this->allowedCSStags, $this->innerblocktags, $this->defaultCSS; (CAPTION added in each case)
|
||||
Moved: Numerous $form_.. variables are now in /classes/form.php
|
||||
|
||||
New config variables
|
||||
--------------------
|
||||
$this->bookmarkStyles = array();
|
||||
$this->cacheTables = true;
|
||||
|
||||
New methods
|
||||
-----------
|
||||
function CircularText()
|
||||
function SetVisibility()
|
||||
|
||||
New/Extended CSS
|
||||
----------------
|
||||
box-shadow (block elements - does NOT support "inset")
|
||||
text-shadow (all text elements - does NOT support "blur")
|
||||
visibility: visible|hidden|printonly|screenonly (block-level elements and images IMG only)
|
||||
text-transform: capitalize|uppercase|lowercase (extended to support TD/TH)
|
||||
tr|td|th:nth-child(odd|even|2n+1)
|
||||
color, strikethrough, underline and background-color (extended to support rotated TD/TH)
|
||||
underline and strike-through (extended to support TD/TH)
|
||||
underline (line colour) (extended to work correctly in watermark)
|
||||
page-break-after: left|right|always (block elements and tables)
|
||||
NB respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
|
||||
background[-color]: extended to support rgba|cmyka|cmyk|hsla|hsl|spot
|
||||
border(extended to support inline elements)
|
||||
|
||||
|
||||
New HTML
|
||||
--------
|
||||
<caption>
|
||||
<textcircle />
|
||||
|
||||
|
||||
New features / Improvements
|
||||
---------------------------
|
||||
Tables - Zebra Stripes
|
||||
Tables: overlapping rowspans (partially) supported
|
||||
Tables - Disk caching
|
||||
Using progress bars (or $showStats) now reports 'real' memory usage i.e. get_memory_usage(true)
|
||||
Support for query string in the URLs for external stylesheets e.g. @import url("style.css?ltcyy7");
|
||||
Table caption partially supported
|
||||
CircularText
|
||||
BookMark styling
|
||||
Spread tables i.e. can split table (columns) across several pages width.
|
||||
Can use chelvetica, ctimes and ccourier to specify core fonts in a non-core font document
|
||||
Spread tables i.e. can split table (columns) across several pages width.
|
||||
{colsum} in <tfoot> cell will insert a column total per page.
|
||||
SVG embedded as island in HTML supported
|
||||
Active Forms
|
||||
textarea and input (text types) now accept javascript as:
|
||||
onKeystroke, onValidate, onCalculate and onFormat
|
||||
onChange is depracated but works as onCalculate (for textarea and input)
|
||||
(PS Select still accepts onChange cf. 5.3.37)
|
||||
Ledger and Tabloid added as page formats recognised. NB Ledger is same as tabloid but landscape. In mPDF, both give the same size (portrait)
|
||||
so need to add -L e.g. Ledger-L for landscape.
|
||||
|
||||
|
||||
Internal script changes
|
||||
-----------------------
|
||||
Changed this->k to _MPDFK throughout all scripts
|
||||
Changes to color (packed binary data in string rather than array) to reduce memory usage esp in tables
|
||||
Internal variables Removed
|
||||
$usetableheader;
|
||||
$tableheadernrows;
|
||||
$tablefooternrows;
|
||||
vars $ChangePage, $p_bottom_border, $img_margin_top(+) $issetcolor + other similar removed
|
||||
|
||||
Removed a whole load of // comments
|
||||
Updates to remove some more Warning Notices (not all marked in text)
|
||||
Border set on TR - changed so set on each cell, rather than retrospectively at end of TR
|
||||
All references to table['text'] removed as not needed - uses ['textbuffer'] instead
|
||||
OpenTag(TD) changes to reduce memory usage with tables
|
||||
Includes different method to set a default timezone
|
||||
fn _smallCaps does not need (undefined) $space
|
||||
this->chrs and this->ords replaced by chr() and ord()
|
||||
Headers in out.php updated to match those used in Output()
|
||||
Change to SetFont() to improve performance time
|
||||
Change to GetStringWidth() to improve performance time
|
||||
Corrected copying of Glyphs 0,1,2, to all subset fonts (non-SMP/SIP), and only setting 32->127 in subset
|
||||
Subset fonts (non-SMP/SIP) have additionally Unicode CMap tables (0,0,4 and 0,3,4) as well as Microsoft (3,1,4)
|
||||
Subset fonts (SMP/SIP) have CMap tables (1,0,6 and 3,0,4) - rather than 1,0,6 and 3,0,6
|
||||
Subset fonts (SMP/SIP) have 'name' table changed to give 1,0 and 3,0. As it is a symbol font (not Unicode encoded) :
|
||||
needs to have a name entry in 3,0 (e.g. symbol) - original font will have 3,1 (i.e. Unicode)
|
||||
Automatically checks for HTML code length > 100000 characters and gives error warning if
|
||||
PHP < 5.2.0 (as not configurable) or increases pcre.backtrack_limit if PHP < 5.3.7
|
||||
|
||||
Removed/Depracated
|
||||
------------------
|
||||
function UseTableHeader($opt=true) fn removed / depracated
|
||||
function UsePRE($opt=true) removed
|
||||
$attr['REPEAT_HEADER'] == true CSS removed / depracated
|
||||
$this->usepre=true; removed / depracated as never needed - always respects PRE whitespace
|
||||
|
||||
ToC: NB Values can no longer be set directly e.g. as in example
|
||||
$mpdf->TOCheader = array(); // array as for setting header/footer
|
||||
$mpdf->TOCfooter = array(); // array as for setting header/footer
|
||||
$mpdf->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
|
||||
$mpdf->TOCpostHTML = ''; // HTML text to appear after table of contents
|
||||
$mpdf->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
|
||||
Need to use TOCpagebreak either direct (or array version) or as HTML
|
||||
OR if absolutley necessary, could use:
|
||||
$mpdf->tocontents->TOCheader = array(); // array as for setting header/footer
|
||||
$mpdf->tocontents->TOCfooter = array(); // array as for setting header/footer
|
||||
$mpdf->tocontents->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
|
||||
$mpdf->tocontents->TOCpostHTML = ''; // HTML text to appear after table of contents
|
||||
$mpdf->tocontents->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
|
||||
|
||||
|
||||
|
||||
Further Details
|
||||
===============
|
||||
|
||||
CSS border on inline elements
|
||||
-----------------------------
|
||||
Support for CSS border (and variants) on inline elements e.g. <span style="border-bottom: 1px dashed #000000;">
|
||||
Border styles solid|dotted|dashed|double only are supported. Border radius not supported.
|
||||
Nested inline elements will have repeat left|right borders on the nested content (unlike browsers)
|
||||
|
||||
Tables - Zebra Stripes
|
||||
----------------------
|
||||
TABLE - striped rows cf. http://dev.opera.com/articles/view/zebra-striping-tables-with-css3/
|
||||
tr:nth-child(odd) { background-color: #99ff99; }
|
||||
thead tr:nth-child(3n+2) { background-color: #FFBBFF; }
|
||||
td:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
table.zebraTable td:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
table.zebraTable th:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
|
||||
NB mPDF does NOT correctly apply specificity to all CSS
|
||||
table.zebra tbody tr:nth-child(2n+1) td { background-color: #FFFFBB; }
|
||||
table.zebra tbody td:nth-child(odd) { background-color: #BBBBFF; }
|
||||
|
||||
should make every odd row yellow, and every odd coloumn blue, but with the row/yellow overriding the column/blue.
|
||||
In mPDF the td:nth-child(odd) trumps the plain td, so the column colour wins out. You can force the effect you want by using
|
||||
table.zebra tbody tr:nth-child(2n+1) td:nth-child(1n+0) { background-color: #FFFFBB; }
|
||||
|
||||
(The :nth-child(1n+0) selector just selects every td cell.)
|
||||
|
||||
|
||||
|
||||
Tables - Disk caching
|
||||
---------------------
|
||||
TABLES: using disk caching
|
||||
// Using disk to cache table data can reduce memory usage dramatically, but at a cost of increased
|
||||
// executon time and disk access (read and write)
|
||||
$this->cacheTables = true;
|
||||
NB $this->packTableData will be overridden to => true; // required for cacheTables
|
||||
$this->simpleTables will be overridden to => false; // Cannot co-exist with cacheTables
|
||||
|
||||
|
||||
Table caption
|
||||
-------------
|
||||
Must come immediately after <table...>
|
||||
CSS caption-side and HTML align attribute of top|bottom supported (not attribute left|right)
|
||||
Handled as a separate block element brought outside the table, so:
|
||||
CSS will not cascade correctly on the table
|
||||
width of caption block is that of page or of the block element containing the table
|
||||
so alignment will be to the page-width not the table width
|
||||
if table page-break-after: always, the caption will follow the pagebreak.
|
||||
This does work:
|
||||
<style>
|
||||
.tablecaption { caption-side: bottom; text-align: left; font-weight: bold; color: green; }
|
||||
</style>
|
||||
...
|
||||
<table>
|
||||
<caption class="tablecaption">Caption title here</caption>
|
||||
<tbody>
|
||||
|
||||
CSS visibility: printonly, screenonly
|
||||
-------------------------------------
|
||||
Roughly based on CSS
|
||||
|
||||
Works on Block elements P, DIV etc, or Image
|
||||
Cannot nest / layer.
|
||||
Inner blocks/image with set visibility are ignored if already set on enclosing block element.
|
||||
(Block element) does not work inside table (image does)
|
||||
So 'visible' does nothing but is set as default
|
||||
(NB Changes output to PDF version 1.5)
|
||||
Incompatible with PDFA / PDFX
|
||||
|
||||
'visibility'
|
||||
Value: visible | hidden | (collapse | inherit)
|
||||
Initial: visible
|
||||
Applies to: all elements
|
||||
Inherited: yes
|
||||
|
||||
The 'visibility' property specifies whether the boxes generated by an element are rendered.
|
||||
Invisible boxes still affect layout (set the 'display' property to 'none' to suppress box generation altogether).
|
||||
Values have the following meanings:
|
||||
|
||||
visible
|
||||
The generated box is visible.
|
||||
hidden
|
||||
The generated box is invisible (fully transparent, nothing is drawn), but still affects layout.
|
||||
Furthermore, descendants of the element will be visible if they have 'visibility: visible'.
|
||||
collapse | inherit
|
||||
NOT supported in mPDF
|
||||
|
||||
CUSTOM:
|
||||
printonly | screenonly
|
||||
|
||||
|
||||
Added VISIBILITY function
|
||||
$mpdf->SetVisibility('screenonly'); or 'printonly' 'visible' or 'hidden'
|
||||
(NB Changes output to PDF version 1.5)
|
||||
Incompatible with PDFA / PDFX
|
||||
|
||||
CircularText
|
||||
------------
|
||||
function CircularText($x, $y, $r, $text, $align='top', $kerning=120, $fontwidth=100) {
|
||||
x: abscissa of center
|
||||
y: ordinate of center
|
||||
r: radius of circle
|
||||
text: text to be printed
|
||||
align: text alignment: top or bottom. Default value: top
|
||||
kerning: spacing between letters in percentage. Default value: 120. Zero is not allowed.
|
||||
fontwidth: width of letters in percentage. Default value: 100. Zero is not allowed
|
||||
|
||||
- now uses Kerning between letters if useKerning == true (set manually see example)
|
||||
|
||||
BookMark styling
|
||||
----------------
|
||||
New configurable variable to control appearance of Bookmarks e.g.
|
||||
$this->bookmarkStyles = array(
|
||||
0 => array('color'=> array(0,64,128), 'style'=>'B'),
|
||||
1 => array('color'=> array(128,0,0), 'style'=>''),
|
||||
2 => array('color'=> array(0,128,0), 'style'=>'I'),
|
||||
);
|
||||
|
||||
Column sums
|
||||
-----------
|
||||
(Also changed some preg_replace to str_replace to improve performance)
|
||||
To use: just add {colsum} to any cells of the table footer <tfoot>
|
||||
Add a number to specify a fixed number of decimal points e.g. <td><3E>{colsum2}</td> will give you <20>123.40
|
||||
The width of the column will be calculated using the actual string {colsum} as a placeholder.
|
||||
If you need the column to be wider, use underscores "_" to pad it e.g. {colsum2_____}
|
||||
|
||||
|
||||
Spread tables
|
||||
-------------
|
||||
i.e. can split table (columns) across several pages width.
|
||||
CSS <table style="overflow: visible">
|
||||
Cannot use with:
|
||||
$this->kwt - ignored
|
||||
$this->table_rotate - ignored
|
||||
$this->table_keep_together - ignored
|
||||
$this->ColActive - cancels spread tables
|
||||
|
||||
Messes up with:
|
||||
$mpdf->forcePortraitHeaders = true;
|
||||
$mpdf->forcePortraitMargins = true;
|
||||
Problems with CJK, and RTL
|
||||
|
||||
Will do no resizing of fonts at all.
|
||||
Maximum width of column = page width i.e. will not split columns across pages - NB will keep colspan>1 on one page
|
||||
If table row too high for page will die with error message.
|
||||
Will override some specs for width if this creates conflicts
|
||||
Recommended to specify absolute value of width on each column.
|
||||
|
||||
|
||||
|
||||
|
||||
Bug fixes
|
||||
=========
|
||||
Dottab - if text after dottab is hyperlinked <a></a> then dots are underlined
|
||||
|
||||
page-break-before now respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
|
||||
Annotation() function called directly with colorarray(r,g,b)
|
||||
|
||||
Added urldecode to _getImage to cope with ../name%20of%20image.jpg
|
||||
Added urldecode AND htmlspecials_decode to href in <a> link e.g. https://www.google.com/search?hl=en&q=mpdf&filename=name%20of%20file
|
||||
[barcode.php] Allow in C39 codes - will be changed to spaces
|
||||
|
||||
<table> inside a <div position:fixed, left:300px;> not calculating table width correctly
|
||||
- leading to either upside down table or error width less than 1 character
|
||||
|
||||
Depracated magic_quotes_runtime() in compress.php
|
||||
|
||||
DIRECTW included twice in compress.php
|
||||
FORMS mark up for compress.php corrected
|
||||
|
||||
double backslashes not preserved inside <pre> or <textarea>
|
||||
|
||||
font-weight and font-style not recognised in <pageheader>
|
||||
|
||||
Progress bars causing corrupt PDF file (out.php) changed fopen from "r" mode to "rb" (binary)
|
||||
Target around image - <a href="#internaltarget"><img ... /></a> - not working
|
||||
|
||||
SmallCaps in <thead> error
|
||||
|
||||
Fonts with "name" table in format 1 not recognised correctly
|
||||
Rotated table which does not fit on remaining page, forces a new page even if already at top of page
|
||||
|
||||
Locale causing problems - all instances of sprintf() using %.3f changed to %.3F so not locale aware
|
||||
|
||||
CSS border radius not implemented on fixed/absolute positioned block element
|
||||
|
||||
Background color in rotated table extending way beyond bottom of table
|
||||
|
||||
Nested table containing <thead> or <tfoot> was confused with <thead> or <tfoot> of parent table
|
||||
|
||||
Correct handling of spaces, < or & in textarea
|
||||
|
||||
<option> and <input ..> attributes value/title decoded with fn lesser_entity_decode instead of htmlspecialchars_decode to include '
|
||||
|
||||
line width not restored to correct value after "line-through" text in Cell()
|
||||
|
||||
Kannada - incorrect positioning of Reph
|
||||
|
||||
Forms - In <input> or <option> (select) not correctly handling HTML named entities e.g. < in value or title
|
||||
Active forms - as Value or Title incorrectly showing as Euro - PDFDocEncoding fixed
|
||||
|
||||
Unicode data in embedded fonts not encrypted when doc encrypted
|
||||
|
||||
Nested block elements which are empty including innermost one, top margin of innermost block was ignored
|
||||
|
||||
font-size: xx% inside a block was setting on block's parent font-size
|
||||
|
||||
Active forms - radio buttons (removed name from Widget - leave on Radio group)
|
||||
causing problems accessing field for radio buttons
|
||||
|
||||
When using simple tables and border-collapse, if table border set, but cell borders not set, should display table border (fixed)
|
||||
position:fixed block - if neither top nor bottom nor height specified, was positioned incorrectly (y)
|
||||
Leave - if top, bottom, margin-top, margiin-bottom and height are all left unspecified (or auto), will centre vertically
|
||||
on the page (specific to mPDF - not consistent with CSS2.1)
|
||||
But if any one of them are specified (including e.g. margin-top=0), follows CSS spec, so top is the current "static" position
|
||||
|
||||
background-image-opacity=0 not working on BODY or BLOCK
|
||||
|
||||
Lists - if LI continues after a nested List, would add as a new LI item (should continue as part of earlier LI item)
|
||||
|
||||
fn WriteCell() converts to 'windows-1252' when required
|
||||
if multiple calls to mPDF used, cannot redefine function cmp()
|
||||
internal link targets <a name="xx" /> in ToC not moved when using: page-break-inside:avoid
|
||||
internal link targets <a name="xx" /> not moved when using: columns, page-break-inside:avoid, keep-with-table or table rotate
|
||||
|
||||
Active Forms - onChange not working for SELECT (cf. 5.3.25) Example 57 only worked by chance as JS was carried over from Select to Text field
|
||||
Bug is fixed, but example file needed updating to onCalculate for the display field.
|
||||
|
||||
Table cell: if height set as %, currently sets it as % of page-width; instead this now ignores it.
|
||||
|
||||
Bengali letter Khanda Ta (U+09CE) character not recognised; was added in Unicode v4.1 and prior to this, (U+09A4 U+09CD U+200D)
|
||||
so mPDF converts to this string and seems to work.
|
||||
|
||||
OCR characters wrong size in barcodes if using different ocr font
|
||||
92
metadata/include/MPDF54/CREDITS.txt
Normal file
@ -0,0 +1,92 @@
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Software: FPDF *
|
||||
* Version: 1.53 *
|
||||
* Date: 2004-12-31 *
|
||||
* Author: Olivier PLATHEY *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish. *
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* HTML2FPDF is a php script to read a HTML text and generate a PDF file. *
|
||||
* Copyright (C) 2004-2005 Renato Coelho *
|
||||
* *
|
||||
* html2fpdf.php, htmltoolkit.php *
|
||||
*******************************************************************************/
|
||||
|
||||
CREDITS From HTML2FPDF:
|
||||
|
||||
-Olivier Plathey for the fpdf.php class [http://www.fpdf.org]
|
||||
-Damon Kohler for the Flowing Block script [mailto:damonkohler@yahoo.com]
|
||||
-Cl<43>ment Lavoillotte for HTML-oriented FPDF idea
|
||||
-Yamasoft for the gif.php class [http://www.yamasoft.com/]
|
||||
-J<>r<EFBFBD>me Fenal for the _parsegif() function
|
||||
-"VIETCOM" for the PDFTable code [http://www.freepgs.com/vietcom/tool/pdftable/] [mailto:vncommando@yahoo.com]
|
||||
-Yukihiro O. for the SetDash() function [mailto:yukihiro_o@infoseek.jp]
|
||||
-Ron Korving for the WordWrap() function
|
||||
-Michel Poulain for the DisplayPreferences() function
|
||||
-Patrick Benny for the MultiCellBlt() function idea [no longer in use]
|
||||
-Seb for the _SetTextRendering() and SetTextOutline() functions [mailto:captainseb@wanadoo.fr]
|
||||
-MorphSoft for the colornames list idea
|
||||
-W3SCHOOLS for HTML-related reference info [http://www.w3schools.com/]
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Software: FPDF_Protection *
|
||||
* Version: 1.02 *
|
||||
* Date: 2005/05/08 *
|
||||
* Author: Klemen VODOPIVEC *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish as stated in original *
|
||||
* FPDF package. *
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// 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.
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* @copyright Khaled Al-Shamaa 2008
|
||||
* @link http://www.ar-php.org
|
||||
* @author Khaled Al-Shamaa <khaled@ar-php.org>
|
||||
* @desc Set of PHP5 / UTF-8 Classes developed to enhance Arabic web
|
||||
* applications by providing set of tools includes stem-based searching,
|
||||
* translitiration, soundex, Hijri calendar, charset detection and
|
||||
* converter, spell numbers, keyboard language, Muslim prayer time,
|
||||
* auto-summarization, and more...
|
||||
* @package Arabic
|
||||
*
|
||||
* @version 1.8 released in Feb 15, 2009
|
||||
*
|
||||
* @license LGPL
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
[http://www.opensource.org/licenses/lgpl-license.php]
|
||||
|
||||
164
metadata/include/MPDF54/FONT INFO.txt
Normal file
@ -0,0 +1,164 @@
|
||||
|
||||
=================
|
||||
Open Source Fonts
|
||||
=================
|
||||
mPDF should be able to read most TrueType Unicode font files with a .ttf extension
|
||||
Truetype fonts with .ttf or .otf extension and .ttc TrueType collections should also work OK.
|
||||
|
||||
You will probably therefore have access to any number of fonts, but here are some useful sources for
|
||||
open-source or free-use fonts. Many of these were included with earlier versions of mPDF:
|
||||
|
||||
General collections
|
||||
-------------------
|
||||
- DejaVu font collection from: http://dejavu-fonts.org/wiki/Main_Page (included in the release)
|
||||
- GNU FreeFont from: http://www.gnu.org/software/freefont/
|
||||
- Linux Libertine from: http://www.linuxlibertine.org (use the .ttf files - not the .otf)
|
||||
- Liberation Fonts from: https://fedorahosted.org/liberation-fonts/ or directly https://fedorahosted.org/releases/l/i/liberation-fonts/
|
||||
|
||||
Thai fonts
|
||||
----------
|
||||
- Collection of Thai fonts from: ftp://linux.thai.net/pub/thailinux/software/thai-ttf/
|
||||
|
||||
|
||||
OCR-B
|
||||
-----
|
||||
OCRB (ocrb10) font: http://ansuz.sooke.bc.ca/software/ocrb.php
|
||||
Useful for barcodes (included in the release)
|
||||
|
||||
Pan-Unicode fonts (fonts containing most characters defined in Unicode)
|
||||
-----------------------------------------------------------------------
|
||||
- BitStream Cyberbit from: http://aol-4.vo.llnwd.net/pub/communicator/extras/fonts/windows/
|
||||
Cyberbit.ZIP (or just Google it)
|
||||
(NB if run with $debug_fonts gives warning of invalid table checksum - just turn it off!)
|
||||
- Code2000 (NB shareware) from: http://www.code2000.net/code2000_page.htm
|
||||
- Quivira from: http://www.quivira-font.com/ (combining diacritics are not placed correctly, but has a very full set of glyphs)
|
||||
|
||||
|
||||
CJK (Chinese-Japanese-Korean)
|
||||
-----------------------------
|
||||
HanNomA and B from: http://vietunicode.sourceforge.net/fonts/fonts_hannom.html
|
||||
unBatang_0613 from: http://people.ktug.or.kr/~nomos/mine/UnBatang_0613.ttf
|
||||
Sun-ExtA and Sun-ExtB from: http://www.alanwood.net/unicode/fonts-east-asian.html
|
||||
(http://www.alanwood.net/downloads/index.html)
|
||||
Fonts which contain both Unicode BMP and SIP (Supplementary Ideographic Plane)
|
||||
characters in one file e.g. "AR PL UMing" and "AR PL UKai"
|
||||
from: http://www.freedesktop.org
|
||||
http://www.freedesktop.org/wiki/Software/CJKUnifonts/Download
|
||||
[MS Windows fonts such as MS Mincho and MingLiU also work]
|
||||
Japanese IPA fonts: http://ossipedia.ipa.go.jp/ipafont/index.html
|
||||
|
||||
Arabic/Eastern fonts
|
||||
--------------------
|
||||
- XW Zar fonts can be downloaded from: http://www.redlers.com/downloadfont.html
|
||||
(2 of these fonts are included in the release)
|
||||
(original site in Farsi: http://wiki.irmug.org/index.php/XWZar)
|
||||
- See below for more details and font names of the fonts used in mPDF 4.x
|
||||
|
||||
|
||||
Other sources
|
||||
-------------
|
||||
http://www.unifont.org/fontguide/
|
||||
http://www.alanwood.net/unicode/fonts.html
|
||||
http://cooltext.com (e.g. http://cooltext.com/Fonts-Unicode+Arabic)
|
||||
ApparatusSIL, DoulosSIL, Padauk from SIL: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&cat_id=FontDownloads
|
||||
DaiBanna (Tai Le)
|
||||
|
||||
Mediaeval & Ancient Scripts
|
||||
---------------------------
|
||||
Junicode: http://junicode.sourceforge.net/
|
||||
Cardo: http://scholarsfonts.net/cardofnt.html
|
||||
|
||||
Syriac fonts
|
||||
------------
|
||||
http://www.bethmardutho.org/meltho/
|
||||
|
||||
|
||||
|
||||
|
||||
============
|
||||
ARABIC FONTS
|
||||
============
|
||||
You can use any appropriate Unicode-encoded .ttf or .ttc font file for arabic text, but
|
||||
the font file must include the Arabic Presentation Forms-B (U+FE70<37>U+FEFF).
|
||||
2 of the XW Zar fonts are included in the release.
|
||||
|
||||
|
||||
|
||||
===========
|
||||
INDIC FONTS
|
||||
===========
|
||||
Indic scripts e.g. Hindi, Bengali etc. use conjuct forms which have no Unicode assignment. You
|
||||
cannot therefore use any standard .ttf font files with mPDF.
|
||||
|
||||
A set of fonts has been adapted to use specifically with mPDF. They are based on a set of fonts from:
|
||||
|
||||
http://www.cdacmumbai.in/projects/indix/e_introduction.shtml
|
||||
|
||||
NB These fonts are released under GNU GPL Version 2 license
|
||||
|
||||
You need these adapted fonts (ind_bn_1_001.ttf etc.) to work with mPDF, as the glyphs have been
|
||||
assigned to Unicode values in the Private Use area (U+E000 ->). These are included in the
|
||||
mPDF download.
|
||||
|
||||
|
||||
|
||||
Users of mPDF v4.x
|
||||
------------------
|
||||
The original indic font files do not contain a full set of even basic ASCII
|
||||
characters. The fonts supplied have been "fixed" to include those extra
|
||||
characters. This now works whether the font is subset or not.
|
||||
|
||||
|
||||
|
||||
=========
|
||||
CJK Fonts
|
||||
=========
|
||||
|
||||
|
||||
Supplemental Ideographic Plane
|
||||
==============================
|
||||
SIP = Supplemental Ideographic Plane ( = Plane 2) = U+20000 - U+2FFFF (131072 - 196607)
|
||||
These characters are required for the HKSCS Hong Kong Supplementary Character Set. Fonts with
|
||||
SIP characters are commonly divided into a second file e.g. MingLiU and MingLiU-ExtB
|
||||
|
||||
mPDF requires 2 fonts and they should be cross-referenced in config_fonts.php e.g.
|
||||
"sun-exta" => array(
|
||||
'R' => "Sun-ExtA.ttf",
|
||||
'sip-ext' => 'sun-extb',
|
||||
),
|
||||
"sun-extb" => array(
|
||||
'R' => "Sun-ExtB.ttf",
|
||||
),
|
||||
|
||||
--OR--
|
||||
(NB these ones also define the font number within the TTC Collection as TTCfontID)
|
||||
'mingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
'sip-ext' => 'mingliu-extb',
|
||||
),
|
||||
'mingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
'mingliu_hkscs' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
'sip-ext' => 'mingliu_hkscs-extb',
|
||||
),
|
||||
'mingliu_hkscs-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
340
metadata/include/MPDF54/LICENSE.txt
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
148
metadata/include/MPDF54/README.txt
Normal file
@ -0,0 +1,148 @@
|
||||
Installation
|
||||
============
|
||||
* Download the .zip file and unzip it
|
||||
* Create a folder e.g. /mpdf on your server
|
||||
* Upload all of the files to the server, maintaining the folders as they are
|
||||
* Ensure that you have write permissions set (CHMOD 6xx or 7xx) for the following folders:
|
||||
/ttfontdata/ - used to cache font data; improves performance a lot
|
||||
/tmp/ - used for some images and ProgressBar
|
||||
/graph_cache/ - if you are using JpGraph in conjunction with mPDF
|
||||
|
||||
To test the installation, point your browser to the basic example file : [path_to_mpdf_folder]/mpdf/examples/example_basic.php
|
||||
|
||||
If you wish to define a different folder for temporary files rather than /tmp/ see the note on 'Folder for temporary files' in
|
||||
the section on Installation & Setup in the manual (http://mpdf1.com/manual/).
|
||||
|
||||
If you have problems, please read the section on troubleshooting in the manual.
|
||||
|
||||
|
||||
Fonts
|
||||
=====
|
||||
I will refer to font names in 2 ways:
|
||||
"CSS font-family name" - mPDF is designed primarily to read HTML and CSS. This is the name used in CSS e.g.
|
||||
<p style="font-family: 'Trebuchet MS';">
|
||||
|
||||
"mPDF font-family name" - the name used internally to process fonts. This could be anything you like,
|
||||
but by default mPDF will convert CSS font-family names by removing any spaces and changing
|
||||
to lowercase. Reading the name above, mPDF will look for a "mPDF font-family name" of
|
||||
'trebuchetms'.
|
||||
|
||||
The configurable values referred to below are set in the config_fonts.php file
|
||||
|
||||
When parsing HTML/CSS, mPDF will read the CSS font-family name (e.g. 'Trebuchet MS') and convert
|
||||
by removing any spaces and changing to lowercase, to look for a mPDF font-family name (trebuchetms).
|
||||
|
||||
Next it will look for a translation (if set) e.g.:
|
||||
$this->fonttrans = array(
|
||||
'trebuchetms' => 'trebuchet'
|
||||
)
|
||||
|
||||
Now the mPDF font-family name to be used is 'trebuchet'
|
||||
|
||||
If you wish to make this font available, you need to specify the Truetype .ttf font files for each variant.
|
||||
These should be defined in the array:
|
||||
$this->fontdata = array(
|
||||
"trebuchet" => array(
|
||||
'R' => "trebuc.ttf",
|
||||
'B' => "trebucbd.ttf",
|
||||
'I' => "trebucit.ttf",
|
||||
'BI' => "trebucbi.ttf",
|
||||
)
|
||||
)
|
||||
|
||||
This is the array which determines whether a font is available to mPDF. Each font-family must have a
|
||||
Regular ['R'] file defined - the others (bold, italic, bold-italic) are optional.
|
||||
|
||||
mPDF will try to load the font-file. If you have defined _MPDF_SYSTEM_TTFONTS at the top of the
|
||||
config_fonts.php file, it will first look for the font-file there. This is useful if you are running
|
||||
mPDF on a computer which already has a folder with TTF fonts in (e.g. on Windows)
|
||||
|
||||
If the font-file is not there, or _MPDF_SYSTEM_TTFONTS is not defined, mPDF will look in the folder
|
||||
/[your_path_to_mpdf]/ttfonts/
|
||||
|
||||
Note that the font-file names are case-sensitive and can contain capitals.
|
||||
|
||||
If the folder /ttfontdata/ is writeable (CHMOD 644 or 755), mPDF will save files there which it can
|
||||
re-use next time it accesses a particular font. This will significantly improve processing time
|
||||
and is strongly recommended.
|
||||
|
||||
mPDF should be able to read most TrueType Unicode font files with a .ttf extension
|
||||
Truetype fonts with .ttf extension that are OpenType also work OK.
|
||||
TrueType collections (.ttc) will also work if they contain TrueType Unicode fonts.
|
||||
|
||||
|
||||
Character substitution
|
||||
----------------------
|
||||
Most people will have access to a Pan-Unicode font with most Unicode characters in it such as
|
||||
Arial Unicode MS. Set $this->backupSubsFont = array('arialunicodems'); at the top of the config_fonts.php file
|
||||
to use this font when substituting any characters not found in the specific font being used.
|
||||
|
||||
Example:
|
||||
You can set $mpdf->useSubstitutions = true; at runtime
|
||||
or $this->useSubstitutions = true; in the config.php file
|
||||
|
||||
<p style="font-family: 'Comic Sans MS'">This text contains a Thai character ม which does not exist
|
||||
in the Comic Sans MS font file</p>
|
||||
|
||||
When useSubstitutions is true, mPDF will try to find substitutions for any missing characters:
|
||||
1) firstly looks if the character is available in the inbuilt Symbols or ZapfDingbats fonts;
|
||||
2) [If defined] looks in each of the the font(s) set by $this->backupSubsFont array
|
||||
|
||||
NB There is an increase in processing time when using substitutions, and even more so if
|
||||
a backupSubsFont is defined.
|
||||
|
||||
Controlling mPDF mode
|
||||
=====================
|
||||
The first parameter of new mPDF('') works as follows:
|
||||
new mPDF('c') - forces mPDF to only use the built-in [c]ore Adobe fonts (Helvetica, Times etc)
|
||||
|
||||
new mPDF('') - default - font subsetting behaviour is determined by the configurable variables
|
||||
$this->maxTTFFilesize and $this->percentSubset (see below)
|
||||
Default values are set so that: 1) very large font files are always subset
|
||||
2) Fonts are embedded as subsets if < 30% of the characters are used
|
||||
|
||||
new mPDF('..-x') - used together with a language or language/country code, this will cause
|
||||
mPDF to use only in-built core fonts (Helvetica, Times) if the language specified is appropiate;
|
||||
otherwise it will force subsetting (equivalent to using "")
|
||||
e.g. new mPDF('de-x') or new mPDF('pt-BR-x') will use in-built core fonts
|
||||
and new mPDF('ru-x') will use subsets of any available TrueType fonts
|
||||
The languages that use core fonts are defined in config_cp.php (using the value $coreSuitable).
|
||||
|
||||
new mPDF('..+aCJK') new mPDF('+aCJK')
|
||||
new mPDF('..-aCJK') new mPDF('-aCJK')
|
||||
- used optionally together with a language or language/country code, +aCJK will force mPDF
|
||||
to use the Adobe non-embedded CJK fonts when a passage is marked with e.g. "lang: ja"
|
||||
This can be used at runtime to override the value set for $mpdf->useAdobeCJK in config.php
|
||||
Use in conjunction with settings in config_cp.php
|
||||
|
||||
For backwards compatibility, new mPDF('-s') and new mPDF('s') will force subsetting by
|
||||
setting $this->percentSubset=100 (see below)
|
||||
new mPDF('utf-8-s') and new mPDF('ar-s') are also recognised
|
||||
|
||||
Language/Country (ll-cc)
|
||||
------------------------
|
||||
You can use a language code ('en') or language/country code ('en-GB') to control which
|
||||
mode/fonts are used. The behaviour is set up in config_cp.php file.
|
||||
The default settings show some of the things you can do:
|
||||
new mPDF('de') - as German is a Western European langauge, it is suitable to use the Adobe core fonts.
|
||||
Using 'de' alone will do nothing, but if you use ('de-x'), this will use core fonts.
|
||||
new mPDF('th') - many fonts do not contain the characters necessary for Thai script. The value $unifonts
|
||||
defines a restricted list of fonts available for mPDF to use.
|
||||
|
||||
NB <html dir="rtl"> or <body dir="rtl"> are supported.
|
||||
|
||||
|
||||
|
||||
Configuration variables changed
|
||||
===============================
|
||||
Configuration variables are documented in the on-line manual (http://mpdf1.com/manual/).
|
||||
|
||||
|
||||
Font folders
|
||||
============
|
||||
If you wish to define your own font file folders (perhaps to share),
|
||||
you can define the 2 constants in your script before including the mpdf.php script e.g.:
|
||||
|
||||
define('_MPDF_TTFONTPATH','your_path/ttfonts/');
|
||||
define('_MPDF_TTFONTDATAPATH','your_path/ttfontdata/'); // should be writeable
|
||||
|
||||
1965
metadata/include/MPDF54/classes/barcode.php
Normal file
248
metadata/include/MPDF54/classes/bmp.php
Normal file
@ -0,0 +1,248 @@
|
||||
<?php
|
||||
|
||||
class bmp {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function bmp(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function _getBMPimage($data, $file) {
|
||||
$info = array();
|
||||
// Adapted from script by Valentin Schmidt
|
||||
// http://staff.dasdeck.de/valentin/fpdf/fpdf_bmp/
|
||||
$bfOffBits=$this->_fourbytes2int_le(substr($data,10,4));
|
||||
$width=$this->_fourbytes2int_le(substr($data,18,4));
|
||||
$height=$this->_fourbytes2int_le(substr($data,22,4));
|
||||
$flip = ($height<0);
|
||||
if ($flip) $height =-$height;
|
||||
$biBitCount=$this->_twobytes2int_le(substr($data,28,2));
|
||||
$biCompression=$this->_fourbytes2int_le(substr($data,30,4));
|
||||
$info = array('w'=>$width, 'h'=>$height);
|
||||
if ($biBitCount<16){
|
||||
$info['cs'] = 'Indexed';
|
||||
$info['bpc'] = $biBitCount;
|
||||
$palStr = substr($data,54,($bfOffBits-54));
|
||||
$pal = '';
|
||||
$cnt = strlen($palStr)/4;
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$n = 4*$i;
|
||||
$pal .= $palStr[$n+2].$palStr[$n+1].$palStr[$n];
|
||||
}
|
||||
$info['pal'] = $pal;
|
||||
}
|
||||
else{
|
||||
$info['cs'] = 'DeviceRGB';
|
||||
$info['bpc'] = 8;
|
||||
}
|
||||
|
||||
if ($this->mpdf->restrictColorSpace==1 || $this->mpdf->PDFX || $this->mpdf->restrictColorSpace==3) {
|
||||
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) { $this->mpdf->PDFAXwarnings[] = "Image cannot be converted to suitable colour space for PDFA or PDFX file - ".$file." - (Image replaced by 'no-image'.)"; }
|
||||
return array('error' => "BMP Image cannot be converted to suitable colour space - ".$file." - (Image replaced by 'no-image'.)");
|
||||
}
|
||||
|
||||
$biXPelsPerMeter=$this->_fourbytes2int_le(substr($data,38,4)); // horizontal pixels per meter, usually set to zero
|
||||
//$biYPelsPerMeter=$this->_fourbytes2int_le(substr($data,42,4)); // vertical pixels per meter, usually set to zero
|
||||
$biXPelsPerMeter=round($biXPelsPerMeter/1000 *25.4);
|
||||
//$biYPelsPerMeter=round($biYPelsPerMeter/1000 *25.4);
|
||||
$info['set-dpi'] = $biXPelsPerMeter;
|
||||
|
||||
switch ($biCompression){
|
||||
case 0:
|
||||
$str = substr($data,$bfOffBits);
|
||||
break;
|
||||
case 1: # BI_RLE8
|
||||
$str = $this->rle8_decode(substr($data,$bfOffBits), $width);
|
||||
break;
|
||||
case 2: # BI_RLE4
|
||||
$str = $this->rle4_decode(substr($data,$bfOffBits), $width);
|
||||
break;
|
||||
}
|
||||
$bmpdata = '';
|
||||
$padCnt = (4-ceil(($width/(8/$biBitCount)))%4)%4;
|
||||
switch ($biBitCount){
|
||||
case 1:
|
||||
case 4:
|
||||
case 8:
|
||||
$w = floor($width/(8/$biBitCount)) + ($width%(8/$biBitCount)?1:0);
|
||||
$w_row = $w + $padCnt;
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$w;$x++)
|
||||
$bmpdata .= $str[$y0+$x];
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$w;$x++)
|
||||
$bmpdata .= $str[$y0+$x];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 16:
|
||||
$w_row = $width*2 + $padCnt;
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x]));
|
||||
$b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7128;
|
||||
$bmpdata .= chr($r) . chr($g) . chr($b);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x]));
|
||||
$b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7;
|
||||
$bmpdata .= chr($r) . chr($g) . chr($b);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 24:
|
||||
case 32:
|
||||
$byteCnt = $biBitCount/8;
|
||||
$w_row = $width*$byteCnt + $padCnt;
|
||||
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$i = $y0 + $x*$byteCnt ; # + 1
|
||||
$bmpdata .= $str[$i+2].$str[$i+1].$str[$i];
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$i = $y0 + $x*$byteCnt ; # + 1
|
||||
$bmpdata .= $str[$i+2].$str[$i+1].$str[$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return array('error' => 'Error parsing BMP image - Unsupported image biBitCount');
|
||||
}
|
||||
if ($this->mpdf->compress) {
|
||||
$bmpdata=gzcompress($bmpdata);
|
||||
$info['f']='FlateDecode';
|
||||
}
|
||||
$info['data']=$bmpdata;
|
||||
$info['type']='bmp';
|
||||
return $info;
|
||||
}
|
||||
|
||||
function _fourbytes2int_le($s) {
|
||||
//Read a 4-byte integer from string
|
||||
return (ord($s[3])<<24) + (ord($s[2])<<16) + (ord($s[1])<<8) + ord($s[0]);
|
||||
}
|
||||
|
||||
function _twobytes2int_le($s) {
|
||||
//Read a 2-byte integer from string
|
||||
return (ord(substr($s, 1, 1))<<8) + ord(substr($s, 0, 1));
|
||||
}
|
||||
|
||||
|
||||
# Decoder for RLE8 compression in windows bitmaps
|
||||
# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
|
||||
function rle8_decode ($str, $width){
|
||||
$lineWidth = $width + (3 - ($width-1) % 4);
|
||||
$out = '';
|
||||
$cnt = strlen($str);
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$o = ord($str[$i]);
|
||||
switch ($o){
|
||||
case 0: # ESCAPE
|
||||
$i++;
|
||||
switch (ord($str[$i])){
|
||||
case 0: # NEW LINE
|
||||
$padCnt = $lineWidth - strlen($out)%$lineWidth;
|
||||
if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line
|
||||
break;
|
||||
case 1: # END OF FILE
|
||||
$padCnt = $lineWidth - strlen($out)%$lineWidth;
|
||||
if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line
|
||||
break 3;
|
||||
case 2: # DELTA
|
||||
$i += 2;
|
||||
break;
|
||||
default: # ABSOLUTE MODE
|
||||
$num = ord($str[$i]);
|
||||
for ($j=0;$j<$num;$j++)
|
||||
$out .= $str[++$i];
|
||||
if ($num % 2) $i++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$out .= str_repeat($str[++$i], $o);
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
# Decoder for RLE4 compression in windows bitmaps
|
||||
# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
|
||||
function rle4_decode ($str, $width){
|
||||
$w = floor($width/2) + ($width % 2);
|
||||
$lineWidth = $w + (3 - ( ($width-1) / 2) % 4);
|
||||
$pixels = array();
|
||||
$cnt = strlen($str);
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$o = ord($str[$i]);
|
||||
switch ($o){
|
||||
case 0: # ESCAPE
|
||||
$i++;
|
||||
switch (ord($str[$i])){
|
||||
case 0: # NEW LINE
|
||||
while (count($pixels)%$lineWidth!=0)
|
||||
$pixels[]=0;
|
||||
break;
|
||||
case 1: # END OF FILE
|
||||
while (count($pixels)%$lineWidth!=0)
|
||||
$pixels[]=0;
|
||||
break 3;
|
||||
case 2: # DELTA
|
||||
$i += 2;
|
||||
break;
|
||||
default: # ABSOLUTE MODE
|
||||
$num = ord($str[$i]);
|
||||
for ($j=0;$j<$num;$j++){
|
||||
if ($j%2==0){
|
||||
$c = ord($str[++$i]);
|
||||
$pixels[] = ($c & 240)>>4;
|
||||
} else
|
||||
$pixels[] = $c & 15;
|
||||
}
|
||||
if ($num % 2) $i++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$c = ord($str[++$i]);
|
||||
for ($j=0;$j<$o;$j++)
|
||||
$pixels[] = ($j%2==0 ? ($c & 240)>>4 : $c & 15);
|
||||
}
|
||||
}
|
||||
|
||||
$out = '';
|
||||
if (count($pixels)%2) $pixels[]=0;
|
||||
$cnt = count($pixels)/2;
|
||||
for ($i=0;$i<$cnt;$i++)
|
||||
$out .= chr(16*$pixels[2*$i] + $pixels[2*$i+1]);
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
371
metadata/include/MPDF54/classes/directw.php
Normal file
@ -0,0 +1,371 @@
|
||||
<?php
|
||||
|
||||
class directw {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function directw(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function Write($h,$txt,$currentx=0,$link='',$directionality='ltr',$align='') {
|
||||
if (!$align) {
|
||||
if ($directionality=='rtl') { $align = 'R'; }
|
||||
else { $align = 'L'; }
|
||||
}
|
||||
if ($h == 0) { $this->mpdf->SetLineHeight(); $h = $this->mpdf->lineheight; }
|
||||
//Output text in flowing mode
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
$s=str_replace("\r",'',$txt);
|
||||
if ($this->mpdf->usingCoreFont) { $nb=strlen($s); }
|
||||
else {
|
||||
$nb=mb_strlen($s, $this->mpdf->mb_enc );
|
||||
// handle single space character
|
||||
if(($nb==1) && $s == " ") {
|
||||
$this->mpdf->x += $this->mpdf->GetStringWidth($s);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$sep=-1;
|
||||
$i=0;
|
||||
$j=0;
|
||||
$l=0;
|
||||
$nl=1;
|
||||
if (!$this->mpdf->usingCoreFont) {
|
||||
if (preg_match("/([".$this->mpdf->pregRTLchars."])/u", $txt)) { $this->mpdf->biDirectional = true; } // *RTL*
|
||||
$checkCursive=false;
|
||||
if ($this->mpdf->biDirectional) { $checkCursive=true; } // *RTL*
|
||||
else if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) { $checkCursive=true; } // *INDIC*
|
||||
while($i<$nb) {
|
||||
//Get next character
|
||||
$c = mb_substr($s,$i,1,$this->mpdf->mb_enc );
|
||||
if($c == "\n") {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
//Explicit line break
|
||||
$tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i++;
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl == 1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
}
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($c == " ") { $sep= $i; }
|
||||
$l += $this->mpdf->GetCharWidthNonCore($c); // mPDF 5.3.04
|
||||
if($l > $wmax) {
|
||||
//Automatic line break (word wrapping)
|
||||
if($sep == -1) {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
if($this->mpdf->x > $this->mpdf->lMargin) {
|
||||
//Move to next line
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$this->mpdf->y+=$h;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
$i++;
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($i==$j) { $i++; }
|
||||
$tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
}
|
||||
else {
|
||||
$tmp = rtrim(mb_substr($s,$j,$sep-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
|
||||
if($align=='J') {
|
||||
//////////////////////////////////////////
|
||||
// JUSTIFY J using Unicode fonts (Word spacing doesn't work)
|
||||
// WORD SPACING
|
||||
// Change NON_BREAKING SPACE to spaces so they are 'spaced' properly
|
||||
$tmp = str_replace(chr(194).chr(160),chr(32),$tmp );
|
||||
$len_ligne = $this->mpdf->GetStringWidth($tmp );
|
||||
$nb_carac = mb_strlen( $tmp , $this->mpdf->mb_enc ) ;
|
||||
$nb_spaces = mb_substr_count( $tmp ,' ', $this->mpdf->mb_enc ) ;
|
||||
$inclCursive=false;
|
||||
if ($checkCursive) {
|
||||
if (preg_match("/([".$this->mpdf->pregRTLchars."])/u", $tmp)) { $inclCursive = true; } // *RTL*
|
||||
if (preg_match("/([".$this->mpdf->pregHIchars.$this->mpdf->pregBNchars.$this->mpdf->pregPAchars."])/u", $tmp)) { $inclCursive = true; } // *INDIC*
|
||||
}
|
||||
list($charspacing,$ws) = $this->mpdf->GetJspacing($nb_carac,$nb_spaces,((($w-2) - $len_ligne) * _MPDFK),$inclCursive);
|
||||
$this->mpdf->SetSpacing($charspacing,$ws);
|
||||
//////////////////////////////////////////
|
||||
}
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i=$sep+1;
|
||||
}
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl==1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
}
|
||||
$nl++;
|
||||
}
|
||||
else { $i++; }
|
||||
}
|
||||
//Last chunk
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
}
|
||||
else {
|
||||
while($i<$nb) {
|
||||
//Get next character
|
||||
$c=$s[$i];
|
||||
if($c == "\n") {
|
||||
//Explicit line break
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
$this->mpdf->Cell($w, $h, substr($s, $j, $i-$j), 0, 2, $align, $fill, $link);
|
||||
$i++;
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl == 1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
}
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($c == " ") { $sep= $i; }
|
||||
$l += $this->mpdf->GetCharWidthCore($c); // mPDF 5.3.04
|
||||
if($l > $wmax) {
|
||||
//Automatic line break (word wrapping)
|
||||
if($sep == -1) {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
if($this->mpdf->x > $this->mpdf->lMargin) {
|
||||
//Move to next line
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$this->mpdf->y+=$h;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
$i++;
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($i==$j) { $i++; }
|
||||
$this->mpdf->Cell($w, $h, substr($s, $j, $i-$j), 0, 2, $align, $fill, $link);
|
||||
}
|
||||
else {
|
||||
$tmp = substr($s, $j, $sep-$j);
|
||||
if($align=='J') {
|
||||
//////////////////////////////////////////
|
||||
// JUSTIFY J using Unicode fonts (Word spacing doesn't work)
|
||||
// WORD SPACING
|
||||
// Change NON_BREAKING SPACE to spaces so they are 'spaced' properly
|
||||
$tmp = str_replace(chr(160),chr(32),$tmp );
|
||||
$len_ligne = $this->mpdf->GetStringWidth($tmp );
|
||||
$nb_carac = strlen( $tmp ) ;
|
||||
$nb_spaces = substr_count( $tmp ,' ' ) ;
|
||||
list($charspacing,$ws) = $this->mpdf->GetJspacing($nb_carac,$nb_spaces,((($w-2) - $len_ligne) * _MPDFK),$false);
|
||||
$this->mpdf->SetSpacing($charspacing,$ws);
|
||||
//////////////////////////////////////////
|
||||
}
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i=$sep+1;
|
||||
}
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl==1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
}
|
||||
$nl++;
|
||||
}
|
||||
else {
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
}
|
||||
//Last chunk
|
||||
if($i!=$j) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
if ($this->mpdf->usingCoreFont) { $tmp = substr($s,$j,$i-$j); }
|
||||
else {
|
||||
$tmp = mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc);
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
}
|
||||
$this->mpdf->Cell($w,$h,$tmp,0,0,$align,$fill,$link);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function CircularText($x, $y, $r, $text, $align='top', $fontfamily='', $fontsizePt=0, $fontstyle='', $kerning=120, $fontwidth=100) {
|
||||
if ($font || $fontstyle || $fontsizePt) $this->mpdf->SetFont($fontfamily,$fontstyle,$fontsizePt);
|
||||
$kerning/=100;
|
||||
$fontwidth/=100;
|
||||
if($kerning==0) $this->mpdf->Error('Please use values unequal to zero for kerning (CircularText)');
|
||||
if($fontwidth==0) $this->mpdf->Error('Please use values unequal to zero for font width (CircularText)');
|
||||
$t=0;
|
||||
$text=str_replace("\r",'',$text);
|
||||
if ($this->mpdf->usingCoreFont) {
|
||||
$nb=strlen($text);
|
||||
for($i=0; $i<$nb; $i++){
|
||||
$w[$i]=$this->mpdf->GetStringWidth($text[$i]);
|
||||
$w[$i]*=$kerning*$fontwidth;
|
||||
$t+=$w[$i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$nb=mb_strlen($text, $this->mpdf->mb_enc );
|
||||
$lastchar = '';
|
||||
$unicode = $this->mpdf->UTF8StringToArray($text);
|
||||
for($i=0; $i<$nb; $i++){
|
||||
$c = mb_substr($text,$i,1,$this->mpdf->mb_enc );
|
||||
$w[$i]=$this->mpdf->GetStringWidth($c);
|
||||
$w[$i]*=$kerning*$fontwidth;
|
||||
$char = $unicode[$i];
|
||||
if ($this->mpdf->useKerning && $lastchar) {
|
||||
if (isset($this->mpdf->CurrentFont['kerninfo'][$lastchar][$char])) {
|
||||
$tk = $this->mpdf->CurrentFont['kerninfo'][$lastchar][$char] * ($this->mpdf->FontSize/ 1000) * $kerning * $fontwidth;
|
||||
$w[$i] += $tk/2;
|
||||
$w[$i-1] += $tk/2;
|
||||
$t+=$tk;
|
||||
}
|
||||
}
|
||||
$lastchar = $char;
|
||||
$t+=$w[$i];
|
||||
}
|
||||
}
|
||||
//circumference
|
||||
$u=($r*2)*M_PI;
|
||||
//total width of string in degrees
|
||||
$d=($t/$u)*360;
|
||||
|
||||
$this->mpdf->StartTransform();
|
||||
// rotate matrix for the first letter to center the text
|
||||
// (half of total degrees)
|
||||
if($align=='top'){
|
||||
$this->mpdf->transformRotate(-$d/2, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate($d/2, $x, $y);
|
||||
}
|
||||
//run through the string
|
||||
for($i=0; $i<$nb; $i++){
|
||||
if($align=='top'){
|
||||
//rotate matrix half of the width of current letter + half of the width of preceding letter
|
||||
if($i==0){
|
||||
$this->mpdf->transformRotate((($w[$i]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate((($w[$i]/2+$w[$i-1]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformScale($fontwidth*100, 100, $x, $y);
|
||||
}
|
||||
$this->mpdf->SetXY($x-$w[$i]/2, $y-$r);
|
||||
}
|
||||
else{
|
||||
//rotate matrix half of the width of current letter + half of the width of preceding letter
|
||||
if($i==0){
|
||||
$this->mpdf->transformRotate(-(($w[$i]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate(-(($w[$i]/2+$w[$i-1]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformScale($fontwidth*100, 100, $x, $y);
|
||||
}
|
||||
$this->mpdf->SetXY($x-$w[$i]/2, $y+$r-($this->mpdf->FontSize));
|
||||
}
|
||||
if ($this->mpdf->usingCoreFont) { $c=$text[$i]; }
|
||||
else { $c = mb_substr($text,$i,1,$this->mpdf->mb_enc ); }
|
||||
$this->mpdf->Cell(($w[$i]),$this->mpdf->FontSize,$c,0,0,'C'); // mPDF 5.3.53
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StopTransform();
|
||||
}
|
||||
}
|
||||
$this->mpdf->StopTransform();
|
||||
}
|
||||
|
||||
function Shaded_box( $text,$font='',$fontstyle='B',$szfont='',$width='70%',$style='DF',$radius=2.5,$fill='#FFFFFF',$color='#000000',$pad=2 )
|
||||
{
|
||||
// F (shading - no line),S (line, no shading),DF (both)
|
||||
if (!$font) { $font= $this->mpdf->default_font; }
|
||||
if (!$szfont) { $szfont = ($this->mpdf->default_font_size * 1.8); }
|
||||
|
||||
$text = $this->mpdf->purify_utf8_text($text);
|
||||
if ($this->mpdf->text_input_as_HTML) {
|
||||
$text = $this->mpdf->all_entities_to_utf8($text);
|
||||
}
|
||||
if ($this->mpdf->usingCoreFont) { $text = mb_convert_encoding($text,$this->mpdf->mb_enc,'UTF-8'); }
|
||||
// DIRECTIONALITY
|
||||
$this->mpdf->magic_reverse_dir($text, true, $this->mpdf->directionality); // *RTL*
|
||||
// Font-specific ligature substitution for Indic fonts
|
||||
if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) $this->mpdf->ConvertIndic($text); // *INDIC*
|
||||
$text = ' '.$text.' ';
|
||||
if (!$width) { $width = $this->mpdf->pgwidth; } else { $width=$this->mpdf->ConvertSize($width,$this->mpdf->pgwidth); }
|
||||
$midpt = $this->mpdf->lMargin+($this->mpdf->pgwidth/2);
|
||||
$r1 = $midpt-($width/2); //($this->mpdf->w / 2) - 40;
|
||||
$r2 = $r1 + $width; //$r1 + 80;
|
||||
$y1 = $this->mpdf->y;
|
||||
|
||||
|
||||
$mid = ($r1 + $r2 ) / 2;
|
||||
$loop = 0;
|
||||
|
||||
while ( $loop == 0 )
|
||||
{
|
||||
$this->mpdf->SetFont( $font, $fontstyle, $szfont );
|
||||
$sz = $this->mpdf->GetStringWidth( $text );
|
||||
if ( ($r1+$sz) > $r2 )
|
||||
$szfont --;
|
||||
else
|
||||
$loop ++;
|
||||
}
|
||||
|
||||
$y2 = $this->mpdf->FontSize+($pad*2);
|
||||
|
||||
$this->mpdf->SetLineWidth(0.1);
|
||||
$fc = $this->mpdf->ConvertColor($fill);
|
||||
$tc = $this->mpdf->ConvertColor($color);
|
||||
$this->mpdf->SetFColor($fc);
|
||||
$this->mpdf->SetTColor($tc);
|
||||
$this->mpdf->RoundedRect($r1, $y1, ($r2 - $r1), $y2, $radius, $style);
|
||||
$this->mpdf->SetX( $r1);
|
||||
$this->mpdf->Cell($r2-$r1, $y2, $text, 0, 1, "C" );
|
||||
$this->mpdf->SetY($y1+$y2+2); // +2 = mm margin below shaded box
|
||||
$this->mpdf->Reset();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
1498
metadata/include/MPDF54/classes/form.php
Normal file
700
metadata/include/MPDF54/classes/gif.php
Normal file
@ -0,0 +1,700 @@
|
||||
<?php
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 2009-12-22 Adapted for mPDF 4.2
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// GIF Util - (C) 2003 Yamasoft (S/C)
|
||||
// http://www.yamasoft.com
|
||||
// All Rights Reserved
|
||||
// This file can be freely copied, distributed, modified, updated by anyone under the only
|
||||
// condition to leave the original address (Yamasoft, http://www.yamasoft.com) and this header.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 2009-12-22 Adapted INB
|
||||
// Functions calling functionname($x, $len = 0) were not working on PHP5.1.5 as pass by reference
|
||||
// All edited to $len = 0; then call function.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFLZW
|
||||
{
|
||||
var $MAX_LZW_BITS;
|
||||
var $Fresh, $CodeSize, $SetCodeSize, $MaxCode, $MaxCodeSize, $FirstCode, $OldCode;
|
||||
var $ClearCode, $EndCode, $Next, $Vals, $Stack, $sp, $Buf, $CurBit, $LastBit, $Done, $LastByte;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFLZW()
|
||||
{
|
||||
$this->MAX_LZW_BITS = 12;
|
||||
unSet($this->Next);
|
||||
unSet($this->Vals);
|
||||
unSet($this->Stack);
|
||||
unSet($this->Buf);
|
||||
|
||||
$this->Next = range(0, (1 << $this->MAX_LZW_BITS) - 1);
|
||||
$this->Vals = range(0, (1 << $this->MAX_LZW_BITS) - 1);
|
||||
$this->Stack = range(0, (1 << ($this->MAX_LZW_BITS + 1)) - 1);
|
||||
$this->Buf = range(0, 279);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function deCompress($data, &$datLen)
|
||||
{
|
||||
$stLen = strlen($data);
|
||||
$datLen = 0;
|
||||
$ret = "";
|
||||
$dp = 0; // data pointer
|
||||
|
||||
// INITIALIZATION
|
||||
$this->LZWCommandInit($data, $dp);
|
||||
|
||||
while(($iIndex = $this->LZWCommand($data, $dp)) >= 0) {
|
||||
$ret .= chr($iIndex);
|
||||
}
|
||||
|
||||
$datLen = $dp;
|
||||
|
||||
if($iIndex != -2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
function LZWCommandInit(&$data, &$dp)
|
||||
{
|
||||
$this->SetCodeSize = ord($data[0]);
|
||||
$dp += 1;
|
||||
|
||||
$this->CodeSize = $this->SetCodeSize + 1;
|
||||
$this->ClearCode = 1 << $this->SetCodeSize;
|
||||
$this->EndCode = $this->ClearCode + 1;
|
||||
$this->MaxCode = $this->ClearCode + 2;
|
||||
$this->MaxCodeSize = $this->ClearCode << 1;
|
||||
|
||||
$this->GetCodeInit($data, $dp);
|
||||
|
||||
$this->Fresh = 1;
|
||||
for($i = 0; $i < $this->ClearCode; $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = $i;
|
||||
}
|
||||
|
||||
for(; $i < (1 << $this->MAX_LZW_BITS); $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = 0;
|
||||
}
|
||||
|
||||
$this->sp = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function LZWCommand(&$data, &$dp)
|
||||
{
|
||||
if($this->Fresh) {
|
||||
$this->Fresh = 0;
|
||||
do {
|
||||
$this->FirstCode = $this->GetCode($data, $dp);
|
||||
$this->OldCode = $this->FirstCode;
|
||||
}
|
||||
while($this->FirstCode == $this->ClearCode);
|
||||
|
||||
return $this->FirstCode;
|
||||
}
|
||||
|
||||
if($this->sp > 0) {
|
||||
$this->sp--;
|
||||
return $this->Stack[$this->sp];
|
||||
}
|
||||
|
||||
while(($Code = $this->GetCode($data, $dp)) >= 0) {
|
||||
if($Code == $this->ClearCode) {
|
||||
for($i = 0; $i < $this->ClearCode; $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = $i;
|
||||
}
|
||||
|
||||
for(; $i < (1 << $this->MAX_LZW_BITS); $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = 0;
|
||||
}
|
||||
|
||||
$this->CodeSize = $this->SetCodeSize + 1;
|
||||
$this->MaxCodeSize = $this->ClearCode << 1;
|
||||
$this->MaxCode = $this->ClearCode + 2;
|
||||
$this->sp = 0;
|
||||
$this->FirstCode = $this->GetCode($data, $dp);
|
||||
$this->OldCode = $this->FirstCode;
|
||||
|
||||
return $this->FirstCode;
|
||||
}
|
||||
|
||||
if($Code == $this->EndCode) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
$InCode = $Code;
|
||||
if($Code >= $this->MaxCode) {
|
||||
$this->Stack[$this->sp++] = $this->FirstCode;
|
||||
$Code = $this->OldCode;
|
||||
}
|
||||
|
||||
while($Code >= $this->ClearCode) {
|
||||
$this->Stack[$this->sp++] = $this->Vals[$Code];
|
||||
|
||||
if($Code == $this->Next[$Code]) // Circular table entry, big GIF Error!
|
||||
return -1;
|
||||
|
||||
$Code = $this->Next[$Code];
|
||||
}
|
||||
|
||||
$this->FirstCode = $this->Vals[$Code];
|
||||
$this->Stack[$this->sp++] = $this->FirstCode;
|
||||
|
||||
if(($Code = $this->MaxCode) < (1 << $this->MAX_LZW_BITS)) {
|
||||
$this->Next[$Code] = $this->OldCode;
|
||||
$this->Vals[$Code] = $this->FirstCode;
|
||||
$this->MaxCode++;
|
||||
|
||||
if(($this->MaxCode >= $this->MaxCodeSize) && ($this->MaxCodeSize < (1 << $this->MAX_LZW_BITS))) {
|
||||
$this->MaxCodeSize *= 2;
|
||||
$this->CodeSize++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->OldCode = $InCode;
|
||||
if($this->sp > 0) {
|
||||
$this->sp--;
|
||||
return $this->Stack[$this->sp];
|
||||
}
|
||||
}
|
||||
|
||||
return $Code;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function GetCodeInit(&$data, &$dp)
|
||||
{
|
||||
$this->CurBit = 0;
|
||||
$this->LastBit = 0;
|
||||
$this->Done = 0;
|
||||
$this->LastByte = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function GetCode(&$data, &$dp)
|
||||
{
|
||||
if(($this->CurBit + $this->CodeSize) >= $this->LastBit) {
|
||||
if($this->Done) {
|
||||
if($this->CurBit >= $this->LastBit) {
|
||||
// Ran off the end of my bits
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
$this->Buf[0] = $this->Buf[$this->LastByte - 2];
|
||||
$this->Buf[1] = $this->Buf[$this->LastByte - 1];
|
||||
|
||||
$Count = ord($data[$dp]);
|
||||
$dp += 1;
|
||||
|
||||
if($Count) {
|
||||
for($i = 0; $i < $Count; $i++) {
|
||||
$this->Buf[2 + $i] = ord($data[$dp+$i]);
|
||||
}
|
||||
$dp += $Count;
|
||||
}
|
||||
else {
|
||||
$this->Done = 1;
|
||||
}
|
||||
|
||||
$this->LastByte = 2 + $Count;
|
||||
$this->CurBit = ($this->CurBit - $this->LastBit) + 16;
|
||||
$this->LastBit = (2 + $Count) << 3;
|
||||
}
|
||||
|
||||
$iRet = 0;
|
||||
for($i = $this->CurBit, $j = 0; $j < $this->CodeSize; $i++, $j++) {
|
||||
$iRet |= (($this->Buf[intval($i / 8)] & (1 << ($i % 8))) != 0) << $j;
|
||||
}
|
||||
|
||||
$this->CurBit += $this->CodeSize;
|
||||
return $iRet;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFCOLORTABLE
|
||||
{
|
||||
var $m_nColors;
|
||||
var $m_arColors;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFCOLORTABLE()
|
||||
{
|
||||
unSet($this->m_nColors);
|
||||
unSet($this->m_arColors);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, $num)
|
||||
{
|
||||
$this->m_nColors = 0;
|
||||
$this->m_arColors = array();
|
||||
|
||||
for($i = 0; $i < $num; $i++) {
|
||||
$rgb = substr($lpData, $i * 3, 3);
|
||||
if(strlen($rgb) < 3) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_arColors[] = (ord($rgb[2]) << 16) + (ord($rgb[1]) << 8) + ord($rgb[0]);
|
||||
$this->m_nColors++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function toString()
|
||||
{
|
||||
$ret = "";
|
||||
|
||||
for($i = 0; $i < $this->m_nColors; $i++) {
|
||||
$ret .=
|
||||
chr(($this->m_arColors[$i] & 0x000000FF)) . // R
|
||||
chr(($this->m_arColors[$i] & 0x0000FF00) >> 8) . // G
|
||||
chr(($this->m_arColors[$i] & 0x00FF0000) >> 16); // B
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function colorIndex($rgb)
|
||||
{
|
||||
$rgb = intval($rgb) & 0xFFFFFF;
|
||||
$r1 = ($rgb & 0x0000FF);
|
||||
$g1 = ($rgb & 0x00FF00) >> 8;
|
||||
$b1 = ($rgb & 0xFF0000) >> 16;
|
||||
$idx = -1;
|
||||
|
||||
for($i = 0; $i < $this->m_nColors; $i++) {
|
||||
$r2 = ($this->m_arColors[$i] & 0x000000FF);
|
||||
$g2 = ($this->m_arColors[$i] & 0x0000FF00) >> 8;
|
||||
$b2 = ($this->m_arColors[$i] & 0x00FF0000) >> 16;
|
||||
$d = abs($r2 - $r1) + abs($g2 - $g1) + abs($b2 - $b1);
|
||||
|
||||
if(($idx == -1) || ($d < $dif)) {
|
||||
$idx = $i;
|
||||
$dif = $d;
|
||||
}
|
||||
}
|
||||
|
||||
return $idx;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFFILEHEADER
|
||||
{
|
||||
var $m_lpVer;
|
||||
var $m_nWidth;
|
||||
var $m_nHeight;
|
||||
var $m_bGlobalClr;
|
||||
var $m_nColorRes;
|
||||
var $m_bSorted;
|
||||
var $m_nTableSize;
|
||||
var $m_nBgColor;
|
||||
var $m_nPixelRatio;
|
||||
var $m_colorTable;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFFILEHEADER()
|
||||
{
|
||||
unSet($this->m_lpVer);
|
||||
unSet($this->m_nWidth);
|
||||
unSet($this->m_nHeight);
|
||||
unSet($this->m_bGlobalClr);
|
||||
unSet($this->m_nColorRes);
|
||||
unSet($this->m_bSorted);
|
||||
unSet($this->m_nTableSize);
|
||||
unSet($this->m_nBgColor);
|
||||
unSet($this->m_nPixelRatio);
|
||||
unSet($this->m_colorTable);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, &$hdrLen)
|
||||
{
|
||||
$hdrLen = 0;
|
||||
|
||||
$this->m_lpVer = substr($lpData, 0, 6);
|
||||
if(($this->m_lpVer <> "GIF87a") && ($this->m_lpVer <> "GIF89a")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_nWidth = $this->w2i(substr($lpData, 6, 2));
|
||||
$this->m_nHeight = $this->w2i(substr($lpData, 8, 2));
|
||||
if(!$this->m_nWidth || !$this->m_nHeight) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$b = ord(substr($lpData, 10, 1));
|
||||
$this->m_bGlobalClr = ($b & 0x80) ? true : false;
|
||||
$this->m_nColorRes = ($b & 0x70) >> 4;
|
||||
$this->m_bSorted = ($b & 0x08) ? true : false;
|
||||
$this->m_nTableSize = 2 << ($b & 0x07);
|
||||
$this->m_nBgColor = ord(substr($lpData, 11, 1));
|
||||
$this->m_nPixelRatio = ord(substr($lpData, 12, 1));
|
||||
$hdrLen = 13;
|
||||
|
||||
if($this->m_bGlobalClr) {
|
||||
$this->m_colorTable = new CGIFCOLORTABLE();
|
||||
if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) {
|
||||
return false;
|
||||
}
|
||||
$hdrLen += 3 * $this->m_nTableSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFIMAGEHEADER
|
||||
{
|
||||
var $m_nLeft;
|
||||
var $m_nTop;
|
||||
var $m_nWidth;
|
||||
var $m_nHeight;
|
||||
var $m_bLocalClr;
|
||||
var $m_bInterlace;
|
||||
var $m_bSorted;
|
||||
var $m_nTableSize;
|
||||
var $m_colorTable;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFIMAGEHEADER()
|
||||
{
|
||||
unSet($this->m_nLeft);
|
||||
unSet($this->m_nTop);
|
||||
unSet($this->m_nWidth);
|
||||
unSet($this->m_nHeight);
|
||||
unSet($this->m_bLocalClr);
|
||||
unSet($this->m_bInterlace);
|
||||
unSet($this->m_bSorted);
|
||||
unSet($this->m_nTableSize);
|
||||
unSet($this->m_colorTable);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, &$hdrLen)
|
||||
{
|
||||
$hdrLen = 0;
|
||||
|
||||
$this->m_nLeft = $this->w2i(substr($lpData, 0, 2));
|
||||
$this->m_nTop = $this->w2i(substr($lpData, 2, 2));
|
||||
$this->m_nWidth = $this->w2i(substr($lpData, 4, 2));
|
||||
$this->m_nHeight = $this->w2i(substr($lpData, 6, 2));
|
||||
|
||||
if(!$this->m_nWidth || !$this->m_nHeight) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$b = ord($lpData{8});
|
||||
$this->m_bLocalClr = ($b & 0x80) ? true : false;
|
||||
$this->m_bInterlace = ($b & 0x40) ? true : false;
|
||||
$this->m_bSorted = ($b & 0x20) ? true : false;
|
||||
$this->m_nTableSize = 2 << ($b & 0x07);
|
||||
$hdrLen = 9;
|
||||
|
||||
if($this->m_bLocalClr) {
|
||||
$this->m_colorTable = new CGIFCOLORTABLE();
|
||||
if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) {
|
||||
return false;
|
||||
}
|
||||
$hdrLen += 3 * $this->m_nTableSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFIMAGE
|
||||
{
|
||||
var $m_disp;
|
||||
var $m_bUser;
|
||||
var $m_bTrans;
|
||||
var $m_nDelay;
|
||||
var $m_nTrans;
|
||||
var $m_lpComm;
|
||||
var $m_gih;
|
||||
var $m_data;
|
||||
var $m_lzw;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function CGIFIMAGE()
|
||||
{
|
||||
unSet($this->m_disp);
|
||||
unSet($this->m_bUser);
|
||||
unSet($this->m_bTrans);
|
||||
unSet($this->m_nDelay);
|
||||
unSet($this->m_nTrans);
|
||||
unSet($this->m_lpComm);
|
||||
unSet($this->m_data);
|
||||
$this->m_gih = new CGIFIMAGEHEADER();
|
||||
$this->m_lzw = new CGIFLZW();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($data, &$datLen)
|
||||
{
|
||||
$datLen = 0;
|
||||
|
||||
while(true) {
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$datLen++;
|
||||
|
||||
switch($b) {
|
||||
case 0x21: // Extension
|
||||
$len = 0;
|
||||
if(!$this->skipExt($data, $len)) {
|
||||
return false;
|
||||
}
|
||||
$datLen += $len;
|
||||
break;
|
||||
|
||||
case 0x2C: // Image
|
||||
// LOAD HEADER & COLOR TABLE
|
||||
$len = 0;
|
||||
if(!$this->m_gih->load($data, $len)) {
|
||||
return false;
|
||||
}
|
||||
$data = substr($data, $len);
|
||||
$datLen += $len;
|
||||
|
||||
// ALLOC BUFFER
|
||||
$len = 0;
|
||||
|
||||
if(!($this->m_data = $this->m_lzw->deCompress($data, $len))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = substr($data, $len);
|
||||
$datLen += $len;
|
||||
|
||||
if($this->m_gih->m_bInterlace) {
|
||||
$this->deInterlace();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case 0x3B: // EOF
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function skipExt(&$data, &$extLen)
|
||||
{
|
||||
$extLen = 0;
|
||||
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
|
||||
switch($b) {
|
||||
case 0xF9: // Graphic Control
|
||||
$b = ord($data[1]);
|
||||
$this->m_disp = ($b & 0x1C) >> 2;
|
||||
$this->m_bUser = ($b & 0x02) ? true : false;
|
||||
$this->m_bTrans = ($b & 0x01) ? true : false;
|
||||
$this->m_nDelay = $this->w2i(substr($data, 2, 2));
|
||||
$this->m_nTrans = ord($data[4]);
|
||||
break;
|
||||
|
||||
case 0xFE: // Comment
|
||||
$this->m_lpComm = substr($data, 1, ord($data[0]));
|
||||
break;
|
||||
|
||||
case 0x01: // Plain text
|
||||
break;
|
||||
|
||||
case 0xFF: // Application
|
||||
break;
|
||||
}
|
||||
|
||||
// SKIP DEFAULT AS DEFS MAY CHANGE
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
while($b > 0) {
|
||||
$data = substr($data, $b);
|
||||
$extLen += $b;
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function deInterlace()
|
||||
{
|
||||
$data = $this->m_data;
|
||||
|
||||
for($i = 0; $i < 4; $i++) {
|
||||
switch($i) {
|
||||
case 0:
|
||||
$s = 8;
|
||||
$y = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
$s = 8;
|
||||
$y = 4;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$s = 4;
|
||||
$y = 2;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$s = 2;
|
||||
$y = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
for(; $y < $this->m_gih->m_nHeight; $y += $s) {
|
||||
$lne = substr($this->m_data, 0, $this->m_gih->m_nWidth);
|
||||
$this->m_data = substr($this->m_data, $this->m_gih->m_nWidth);
|
||||
|
||||
$data =
|
||||
substr($data, 0, $y * $this->m_gih->m_nWidth) .
|
||||
$lne .
|
||||
substr($data, ($y + 1) * $this->m_gih->m_nWidth);
|
||||
}
|
||||
}
|
||||
|
||||
$this->m_data = $data;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIF
|
||||
{
|
||||
var $m_gfh;
|
||||
var $m_lpData;
|
||||
var $m_img;
|
||||
var $m_bLoaded;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIF()
|
||||
{
|
||||
$this->m_gfh = new CGIFFILEHEADER();
|
||||
$this->m_img = new CGIFIMAGE();
|
||||
$this->m_lpData = "";
|
||||
$this->m_bLoaded = false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
function ClearData() {
|
||||
$this->m_lpData = '';
|
||||
unSet($this->m_img->m_data);
|
||||
unSet($this->m_img->m_lzw->Next);
|
||||
unSet($this->m_img->m_lzw->Vals);
|
||||
unSet($this->m_img->m_lzw->Stack);
|
||||
unSet($this->m_img->m_lzw->Buf);
|
||||
}
|
||||
|
||||
function loadFile(&$data, $iIndex)
|
||||
{
|
||||
if($iIndex < 0) {
|
||||
return false;
|
||||
}
|
||||
$this->m_lpData = $data;
|
||||
|
||||
// GET FILE HEADER
|
||||
$len = 0;
|
||||
if(!$this->m_gfh->load($this->m_lpData, $len)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_lpData = substr($this->m_lpData, $len);
|
||||
|
||||
do {
|
||||
$imgLen = 0;
|
||||
if(!$this->m_img->load($this->m_lpData, $imgLen)) {
|
||||
return false;
|
||||
}
|
||||
$this->m_lpData = substr($this->m_lpData, $imgLen);
|
||||
}
|
||||
while($iIndex-- > 0);
|
||||
|
||||
$this->m_bLoaded = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
?>
|
||||
723
metadata/include/MPDF54/classes/grad.php
Normal file
@ -0,0 +1,723 @@
|
||||
<?php
|
||||
|
||||
class grad {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function grad(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
// mPDF 5.3.A1
|
||||
function CoonsPatchMesh($x, $y, $w, $h, $patch_array=array(), $x_min=0, $x_max=1, $y_min=0, $y_max=1, $colspace='RGB', $return=false){
|
||||
$s=' q ';
|
||||
$s.=sprintf(' %.3F %.3F %.3F %.3F re W n ', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK);
|
||||
$s.=sprintf(' %.3F 0 0 %.3F %.3F %.3F cm ', $w*_MPDFK, $h*_MPDFK, $x*_MPDFK, ($this->mpdf->h-($y+$h))*_MPDFK);
|
||||
$n = count($this->mpdf->gradients)+1;
|
||||
$this->mpdf->gradients[$n]['type'] = 6; //coons patch mesh
|
||||
$this->mpdf->gradients[$n]['colorspace'] = $colspace; //coons patch mesh
|
||||
$bpcd=65535; //16 BitsPerCoordinate
|
||||
$trans = false;
|
||||
$this->mpdf->gradients[$n]['stream']='';
|
||||
for($i=0;$i<count($patch_array);$i++){
|
||||
$this->mpdf->gradients[$n]['stream'].=chr($patch_array[$i]['f']); //start with the edge flag as 8 bit
|
||||
for($j=0;$j<count($patch_array[$i]['points']);$j++){
|
||||
//each point as 16 bit
|
||||
if (($j % 2) == 1) { // Y coordinate (adjusted as input is From top left)
|
||||
$patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$y_min)/($y_max-$y_min))*$bpcd;
|
||||
$patch_array[$i]['points'][$j]=$bpcd-$patch_array[$i]['points'][$j];
|
||||
}
|
||||
else {
|
||||
$patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$x_min)/($x_max-$x_min))*$bpcd;
|
||||
}
|
||||
if($patch_array[$i]['points'][$j]<0) $patch_array[$i]['points'][$j]=0;
|
||||
if($patch_array[$i]['points'][$j]>$bpcd) $patch_array[$i]['points'][$j]=$bpcd;
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]/256));
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]%256));
|
||||
}
|
||||
for($j=0;$j<count($patch_array[$i]['colors']);$j++){
|
||||
//each color component as 8 bit
|
||||
if ($colspace=='RGB') {
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]);
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][2]);
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][3]);
|
||||
if (isset($patch_array[$i]['colors'][$j][4]) && ord($patch_array[$i]['colors'][$j][4])<100) { $trans = true; }
|
||||
}
|
||||
else if ($colspace=='CMYK') {
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][1])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][2])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][3])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][4])*2.55);
|
||||
if (isset($patch_array[$i]['colors'][$j][5]) && ord($patch_array[$i]['colors'][$j][5])<100) { $trans = true; }
|
||||
}
|
||||
else if ($colspace=='Gray') {
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]);
|
||||
if ($patch_array[$i]['colors'][$j][2]==1) { $trans = true; } // transparency converted from rgba or cmyka()
|
||||
}
|
||||
}
|
||||
}
|
||||
// TRANSPARENCY
|
||||
if ($trans) {
|
||||
$this->mpdf->gradients[$n]['stream_trans']='';
|
||||
for($i=0;$i<count($patch_array);$i++){
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr($patch_array[$i]['f']);
|
||||
for($j=0;$j<count($patch_array[$i]['points']);$j++){
|
||||
//each point as 16 bit
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]/256));
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]%256));
|
||||
}
|
||||
for($j=0;$j<count($patch_array[$i]['colors']);$j++){
|
||||
//each color component as 8 bit // OPACITY
|
||||
if ($colspace=='RGB') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][4])*2.55));
|
||||
}
|
||||
else if ($colspace=='CMYK') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][5])*2.55));
|
||||
}
|
||||
else if ($colspace=='Gray') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][3])*2.55));
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->mpdf->gradients[$n]['trans'] = true;
|
||||
$s .= ' /TGS'.$n.' gs ';
|
||||
}
|
||||
//paint the gradient
|
||||
$s .= '/Sh'.$n.' sh'."\n";
|
||||
//restore previous Graphic State
|
||||
$s .= 'Q'."\n";
|
||||
if ($return) { return $s; }
|
||||
else { $this->mpdf->_out($s); }
|
||||
}
|
||||
|
||||
|
||||
// type = linear:2; radial: 3;
|
||||
// Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg).
|
||||
// The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
|
||||
// Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1,
|
||||
// (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg).
|
||||
// (fx, fy) should be inside the circle, otherwise some areas will not be defined
|
||||
// $col = array(R,G,B/255); or array(G/255); or array(C,M,Y,K/100)
|
||||
// $stops = array('col'=>$col [, 'opacity'=>0-1] [, 'offset'=>0-1])
|
||||
function Gradient($x, $y, $w, $h, $type, $stops=array(), $colorspace='RGB', $coords='', $extend='', $return=false, $is_mask=false) {
|
||||
if (strtoupper(substr($type,0,1)) == 'L') { $type = 2; } // linear
|
||||
else if (strtoupper(substr($type,0,1)) == 'R') { $type = 3; } // radial
|
||||
if ($colorspace != 'CMYK' && $colorspace != 'Gray') {
|
||||
$colorspace = 'RGB';
|
||||
}
|
||||
$bboxw = $w;
|
||||
$bboxh = $h;
|
||||
$usex = $x;
|
||||
$usey = $y;
|
||||
$usew = $bboxw;
|
||||
$useh = $bboxh;
|
||||
if ($type < 1) { $type = 2; }
|
||||
if ($coords[0]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $coords[0] = $tmp/$w; }
|
||||
}
|
||||
if ($coords[1]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $coords[1] = 1-($tmp/$h); }
|
||||
}
|
||||
// LINEAR
|
||||
if ($type == 2) {
|
||||
$angle = $coords[4];
|
||||
$repeat = $coords[5];
|
||||
// ALL POINTS SET (default for custom mPDF linear gradient) - no -moz
|
||||
if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false) {
|
||||
// do nothing - coords used as they are
|
||||
}
|
||||
|
||||
// If both a <point> and <angle> are defined, the gradient axis starts from the point and runs along the angle. The end point is
|
||||
// defined as before - in this case start points may not be in corners, and axis may not correctly fall in the right quadrant.
|
||||
// NO end points (Angle defined & Start points)
|
||||
else if ($angle!==false && $coords[0]!==false && $coords[1]!==false && $coords[2]===false && $coords[3]===false) {
|
||||
if ($angle==0 || $angle==360) { $coords[3]=$coords[1]; if ($coords[0]==1) $coords[2]=2; else $coords[2]=1; }
|
||||
else if ($angle==90) { $coords[2]=$coords[0]; $coords[3]=1; if ($coords[1]==1) $coords[3]=2; else $coords[3]=1; }
|
||||
else if ($angle==180) { if ($coords[4]==0) $coords[2]=-1; else $coords[2]=0; $coords[3]=$coords[1]; }
|
||||
else if ($angle==270) { $coords[2]=$coords[0]; if ($coords[1]==0) $coords[3]=-1; else $coords[3]=0; }
|
||||
else {
|
||||
$endx=1; $endy=1;
|
||||
if ($angle <=90) {
|
||||
if ($angle <=45) { $endy=tan(deg2rad($angle)); }
|
||||
else { $endx=tan(deg2rad(90-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = 1 - $coords[1] - (tan($b) * (1-$coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = 1+$tx; $coords[3] = 1-$ty;
|
||||
}
|
||||
else if ($angle <=180) {
|
||||
if ($angle <=135) { $endx=tan(deg2rad($angle-90)); }
|
||||
else { $endy=tan(deg2rad(180-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = 1 - $coords[1] - (tan($b) * ($coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = -$tx; $coords[3] = 1-$ty;
|
||||
}
|
||||
else if ($angle <=270) {
|
||||
if ($angle <=225) { $endy=tan(deg2rad($angle-180)); }
|
||||
else { $endx=tan(deg2rad(270-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = $coords[1] - (tan($b) * ($coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = -$tx; $coords[3] = $ty;
|
||||
}
|
||||
else {
|
||||
if ($angle <=315) { $endx=tan(deg2rad($angle-270)); }
|
||||
else { $endy=tan(deg2rad(360-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = $coords[1] - (tan($b) * (1-$coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = 1+$tx; $coords[3] = $ty;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -moz If the first parameter is only an <angle>, the gradient axis starts from the box's corner that would ensure the
|
||||
// axis goes through the box. The axis runs along the specified angle. The end point of the axis is defined such that the
|
||||
// farthest corner of the box from the starting point is perpendicular to the gradient axis at that point.
|
||||
// NO end points or Start points (Angle defined)
|
||||
else if ($angle!==false && $coords[0]===false && $coords[1]===false) {
|
||||
if ($angle==0 || $angle==360) { $coords[0]=0; $coords[1]=0; $coords[2]=1; $coords[3]=0; }
|
||||
else if ($angle==90) { $coords[0]=0; $coords[1]=0; $coords[2]=0; $coords[3]=1; }
|
||||
else if ($angle==180) { $coords[0]=1; $coords[1]=0; $coords[2]=0; $coords[3]=0; }
|
||||
else if ($angle==270) { $coords[0]=0; $coords[1]=1; $coords[2]=0; $coords[3]=0; }
|
||||
else {
|
||||
if ($angle <=90) {
|
||||
$coords[0]=0; $coords[1]=0;
|
||||
if ($angle <=45) { $endx=1; $endy=tan(deg2rad($angle)); }
|
||||
else { $endx=tan(deg2rad(90-$angle)); $endy=1; }
|
||||
}
|
||||
else if ($angle <=180) {
|
||||
$coords[0]=1; $coords[1]=0;
|
||||
if ($angle <=135) { $endx=tan(deg2rad($angle-90)); $endy=1; }
|
||||
else { $endx=1; $endy=tan(deg2rad(180-$angle)); }
|
||||
}
|
||||
else if ($angle <=270) {
|
||||
$coords[0]=1; $coords[1]=1;
|
||||
if ($angle <=225) { $endx=1; $endy=tan(deg2rad($angle-180)); }
|
||||
else { $endx=tan(deg2rad(270-$angle)); $endy=1; }
|
||||
}
|
||||
else {
|
||||
$coords[0]=0; $coords[1]=1;
|
||||
if ($angle <=315) { $endx=tan(deg2rad($angle-270)); $endy=1; }
|
||||
else { $endx=1; $endy=tan(deg2rad(360-$angle)); }
|
||||
}
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$h2 = $bboxh - ($bboxh * tan($b));
|
||||
$px = $bboxh + ($h2 * sin($b) * cos($b));
|
||||
$py = ($bboxh * tan($b)) + ($h2 * sin($b) * sin($b));
|
||||
$x1 = $px / $bboxh;
|
||||
$y1 = $py / $bboxh;
|
||||
if ($angle <=90) { $coords[2] = $x1; $coords[3] = $y1; }
|
||||
else if ($angle <=180) { $coords[2] = 1-$x1; $coords[3] = $y1; }
|
||||
else if ($angle <=270) { $coords[2] = 1-$x1; $coords[3] = 1-$y1; }
|
||||
else { $coords[2] = $x1; $coords[3] = 1-$y1; }
|
||||
}
|
||||
}
|
||||
// -moz If the first parameter to the gradient function is only a <point>, the gradient axis starts from the specified point,
|
||||
// and ends at the point you would get if you rotated the starting point by 180 degrees about the center of the box that the
|
||||
// gradient is to be applied to.
|
||||
// NO angle and NO end points (Start points defined)
|
||||
else if ((!isset($angle) || $angle===false) && $coords[0]!==false && $coords[1]!==false) { // should have start and end defined
|
||||
$coords[2] = 1-$coords[0]; $coords[3] = 1-$coords[1];
|
||||
$angle = rad2deg(atan2($coords[3]-$coords[1],$coords[2]-$coords[0]));
|
||||
if ($angle < 0) { $angle += 360; }
|
||||
else if ($angle > 360) { $angle -= 360; }
|
||||
if ($angle!=0 && $angle!=360 && $angle!=90 && $angle!=180 && $angle!=270) {
|
||||
if ($w >= $h) {
|
||||
$coords[1] *= $h/$w ;
|
||||
$coords[3] *= $h/$w ;
|
||||
$usew = $useh = $bboxw;
|
||||
$usey -= ($w-$h);
|
||||
}
|
||||
else {
|
||||
$coords[0] *= $w/$h ;
|
||||
$coords[2] *= $w/$h ;
|
||||
$usew = $useh = $bboxh;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -moz If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient
|
||||
// axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values T2B
|
||||
// All values are set in parseMozGradient - so won't appear here
|
||||
$coords = array(0,0,1,0); // default for original linear gradient (L2R)
|
||||
}
|
||||
$s = ' q';
|
||||
$s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n";
|
||||
$s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n";
|
||||
}
|
||||
|
||||
// RADIAL
|
||||
else if ($type == 3) {
|
||||
$radius = $coords[4];
|
||||
$angle = $coords[5]; // ?? no effect
|
||||
$shape = $coords[6];
|
||||
$size = $coords[7];
|
||||
$repeat = $coords[8];
|
||||
// ALL POINTS AND RADIUS SET (default for custom mPDF radial gradient) - no -moz
|
||||
if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false && $coords[4]!==false) {
|
||||
// do nothing - coords used as they are
|
||||
}
|
||||
// If a <point> is defined
|
||||
else if ($shape!==false && $size!==false) {
|
||||
if ($coords[2]==false) { $coords[2] = $coords[0]; }
|
||||
if ($coords[3]==false) { $coords[3] = $coords[1]; }
|
||||
// ELLIPSE
|
||||
if ($shape=='ellipse') {
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((1-$coords[0]),2) + pow((1-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); }
|
||||
else { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
}
|
||||
// CIRCLE
|
||||
else if ($shape=='circle') {
|
||||
if ($w >= $h) {
|
||||
$coords[1] = $coords[3] = ($coords[1] * $h/$w) ;
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((($h/$w)-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((1-$coords[0]),2) + pow((($h/$w)-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); }
|
||||
else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
$usew = $useh = $bboxw;
|
||||
$usey -= ($w-$h);
|
||||
}
|
||||
else {
|
||||
$coords[0] = $coords[2] = ($coords[0] * $w/$h) ;
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((($w/$h)-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((($w/$h)-$coords[0]),2) + pow((1-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
$usew = $useh = $bboxh;
|
||||
}
|
||||
}
|
||||
if ($radius==0) { $radius=0.001; } // to prevent error
|
||||
$coords[4] = $radius;
|
||||
}
|
||||
|
||||
// -moz If entire function consists of only <stop> values
|
||||
else { // default values
|
||||
// All values are set in parseMozGradient - so won't appear here
|
||||
$coords = array(0.5,0.5,0.5,0.5); // default for radial gradient (centred)
|
||||
}
|
||||
$s = ' q';
|
||||
$s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n";
|
||||
$s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n";
|
||||
}
|
||||
|
||||
$n = count($this->mpdf->gradients) + 1;
|
||||
$this->mpdf->gradients[$n]['type'] = $type;
|
||||
$this->mpdf->gradients[$n]['colorspace'] = $colorspace;
|
||||
$trans = false;
|
||||
$this->mpdf->gradients[$n]['is_mask'] = $is_mask;
|
||||
if ($is_mask) { $trans = true; }
|
||||
if (count($stops) == 1) { $stops[1] = $stops[0]; }
|
||||
if (!isset($stops[0]['offset'])) { $stops[0]['offset'] = 0; }
|
||||
if (!isset($stops[(count($stops)-1)]['offset'])) { $stops[(count($stops)-1)]['offset'] = 1; }
|
||||
|
||||
// Fix stop-offsets set as absolute lengths
|
||||
if ($type==2) {
|
||||
$axisx = ($coords[2]-$coords[0])*$usew;
|
||||
$axisy = ($coords[3]-$coords[1])*$useh;
|
||||
$axis_length = sqrt(pow($axisx,2) + pow($axisy,2));
|
||||
}
|
||||
else { $axis_length = $coords[4]*$usew; } // Absolute lengths are meaningless for an ellipse - Firefox uses Width as reference
|
||||
|
||||
for($i=0;$i<count($stops);$i++) {
|
||||
if (isset($stops[$i]['offset']) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$stops[$i]['offset'],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
$stops[$i]['offset'] = $tmp/$axis_length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isset($stops[0]['offset']) && $stops[0]['offset']>0) {
|
||||
$firststop = $stops[0];
|
||||
$firststop['offset'] = 0;
|
||||
array_unshift($stops, $firststop);
|
||||
}
|
||||
if (!$repeat && isset($stops[(count($stops)-1)]['offset']) && $stops[(count($stops)-1)]['offset']<1) {
|
||||
$endstop = $stops[(count($stops)-1)];
|
||||
$endstop['offset'] = 1;
|
||||
$stops[] = $endstop;
|
||||
}
|
||||
if ($stops[0]['offset'] > $stops[(count($stops)-1)]['offset']) {
|
||||
$stops[0]['offset'] = 0;
|
||||
$stops[(count($stops)-1)]['offset'] = 1;
|
||||
}
|
||||
|
||||
for($i=0;$i<count($stops);$i++) {
|
||||
// mPDF 5.3.74
|
||||
if ($colorspace == 'CMYK') {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F %.3F', (ord($stops[$i]['col']{1})/100), (ord($stops[$i]['col']{2})/100), (ord($stops[$i]['col']{3})/100), (ord($stops[$i]['col']{4})/100));
|
||||
}
|
||||
else if ($colorspace == 'Gray') {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F', (ord($stops[$i]['col']{1})/255));
|
||||
}
|
||||
else {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F', (ord($stops[$i]['col']{1})/255), (ord($stops[$i]['col']{2})/255), (ord($stops[$i]['col']{3})/255));
|
||||
}
|
||||
if (!isset($stops[$i]['opacity'])) { $stops[$i]['opacity'] = 1; }
|
||||
else if ($stops[$i]['opacity'] > 1 || $stops[$i]['opacity'] < 0) { $stops[$i]['opacity'] = 1; }
|
||||
else if ($stops[$i]['opacity'] < 1) {
|
||||
$trans = true;
|
||||
}
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['opacity'] = $stops[$i]['opacity'];
|
||||
// OFFSET
|
||||
if ($i>0 && $i<(count($stops)-1)) {
|
||||
if (!isset($stops[$i]['offset']) || (isset($stops[$i+1]['offset']) && $stops[$i]['offset']>$stops[$i+1]['offset']) || $stops[$i]['offset']<$stops[$i-1]['offset']) {
|
||||
if (isset($stops[$i-1]['offset']) && isset($stops[$i+1]['offset'])) {
|
||||
$stops[$i]['offset'] = ($stops[$i-1]['offset']+$stops[$i+1]['offset'])/2;
|
||||
}
|
||||
else {
|
||||
for($j=($i+1);$j<count($stops);$j++) {
|
||||
if(isset($stops[$j]['offset'])) { break; }
|
||||
}
|
||||
$int = ($stops[$j]['offset'] - $stops[($i-1)]['offset'])/($j-$i+1);
|
||||
for($f=0;$f<($j-$i-1);$f++) {
|
||||
$stops[($i+$f)]['offset'] = $stops[($i+$f-1)]['offset'] + ($int);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset'];
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset'];
|
||||
}
|
||||
|
||||
if ($repeat) {
|
||||
$ns = count($this->mpdf->gradients[$n]['stops']);
|
||||
$offs = array();
|
||||
for($i=0;$i<$ns;$i++) {
|
||||
$offs[$i] = $this->mpdf->gradients[$n]['stops'][$i]['offset'];
|
||||
}
|
||||
$gp = 0;
|
||||
$inside=true;
|
||||
while($inside) {
|
||||
$gp++;
|
||||
for($i=0;$i<$ns;$i++) {
|
||||
$this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)] = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+$i)];
|
||||
$tmp = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+($ns-1))]['offset']+$offs[$i] ;
|
||||
if ($tmp < 1) { $this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = $tmp; }
|
||||
else {
|
||||
$this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = 1;
|
||||
$inside = false;
|
||||
break(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($trans) {
|
||||
$this->mpdf->gradients[$n]['trans'] = true;
|
||||
$s .= ' /TGS'.$n.' gs ';
|
||||
}
|
||||
if (!is_array($extend) || count($extend) <1) {
|
||||
$extend=array('true', 'true'); // These are supposed to be quoted - appear in PDF file as text
|
||||
}
|
||||
$this->mpdf->gradients[$n]['coords'] = $coords;
|
||||
$this->mpdf->gradients[$n]['extend'] = $extend;
|
||||
//paint the gradient
|
||||
$s .= '/Sh'.$n.' sh '."\n";
|
||||
//restore previous Graphic State
|
||||
$s .= ' Q '."\n";
|
||||
if ($return) { return $s; }
|
||||
else { $this->mpdf->_out($s); }
|
||||
}
|
||||
|
||||
|
||||
function parseMozGradient($bg) {
|
||||
// background[-image]: -moz-linear-gradient(left, #c7Fdde 20%, #FF0000 );
|
||||
// background[-image]: linear-gradient(left, #c7Fdde 20%, #FF0000 ); // CSS3
|
||||
if (preg_match('/repeating-/',$bg)) { $repeat = true; }
|
||||
else { $repeat = false; }
|
||||
if (preg_match('/linear-gradient\((.*)\)/',$bg,$m)) {
|
||||
$g = array();
|
||||
$g['type'] = 2;
|
||||
$g['colorspace'] = 'RGB';
|
||||
$g['extend'] = array('true','true');
|
||||
$v = trim($m[1]);
|
||||
// Change commas inside e.g. rgb(x,x,x)
|
||||
while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); }
|
||||
// Remove spaces inside e.g. rgb(x, x, x)
|
||||
while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); }
|
||||
$bgr = preg_split('/\s*,\s*/',$v);
|
||||
for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); }
|
||||
// Is first part $bgr[0] a valid point/angle?
|
||||
$first = preg_split('/\s+/',trim($bgr[0]));
|
||||
if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) {
|
||||
$startStops = 1;
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") {
|
||||
$startStops = 1;
|
||||
}
|
||||
else {
|
||||
$check = $this->mpdf->ConvertColor($first[0]);
|
||||
if ($check) $startStops = 0;
|
||||
else $startStops = 1;
|
||||
}
|
||||
// first part a valid point/angle?
|
||||
if ($startStops == 1) { // default values
|
||||
// [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,]
|
||||
if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$bgr[0],$m)) {
|
||||
$angle = $m[1] + 0;
|
||||
if (strtolower($m[2])=='deg') { $angle = $angle; }
|
||||
else if (strtolower($m[2])=='grad') { $angle *= (360/400); }
|
||||
else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); }
|
||||
while($angle < 0) { $angle += 360; }
|
||||
$angle = ($angle % 360);
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") { $angle = 0; }
|
||||
if (preg_match('/left/i',$bgr[0])) { $startx = 0; }
|
||||
else if (preg_match('/right/i',$bgr[0])) { $startx = 1; }
|
||||
if (preg_match('/top/i',$bgr[0])) { $starty = 1; }
|
||||
else if (preg_match('/bottom/i',$bgr[0])) { $starty = 0; }
|
||||
// Check for %? ?% or %%
|
||||
if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; }
|
||||
else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $startx = $m[1]; }
|
||||
}
|
||||
if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); }
|
||||
else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $starty = $m[1]; }
|
||||
}
|
||||
if (isset($startx) && !isset($starty)) { $starty = 0.5; }
|
||||
if (!isset($startx) && isset($starty)) { $startx = 0.5; }
|
||||
|
||||
}
|
||||
// If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values T2B
|
||||
$starty = 1; $startx = 0.5;
|
||||
$endy = 0; $endx = 0.5;
|
||||
}
|
||||
$coords = array();
|
||||
if (!isset($startx)) { $startx = false; }
|
||||
if (!isset($starty)) { $starty = false; }
|
||||
if (!isset($endx)) { $endx = false; }
|
||||
if (!isset($endy)) { $endy = false; }
|
||||
if (!isset($angle)) { $angle = false; }
|
||||
$g['coords'] = array($startx ,$starty ,$endx ,$endy, $angle, $repeat );
|
||||
$g['stops'] = array();
|
||||
for($i=$startStops;$i<count($bgr);$i++) {
|
||||
$stop = array();
|
||||
// parse stops
|
||||
$el = preg_split('/\s+/',trim($bgr[$i]));
|
||||
// mPDF 5.3.74
|
||||
$col = $this->mpdf->ConvertColor($el[0]);
|
||||
if ($col) { $stop['col'] = $col; }
|
||||
else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); }
|
||||
if ($col{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba()
|
||||
else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka()
|
||||
else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka()
|
||||
|
||||
if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) {
|
||||
$stop['offset'] = $m[1]/100;
|
||||
if ($stop['offset']>1) { unset($stop['offset']); }
|
||||
}
|
||||
else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $stop['offset'] = $m[1]; }
|
||||
}
|
||||
$g['stops'][] = $stop;
|
||||
}
|
||||
if (count($g['stops'] )) { return $g; }
|
||||
}
|
||||
else if (preg_match('/radial-gradient\((.*)\)/',$bg,$m)) {
|
||||
$g = array();
|
||||
$g['type'] = 3;
|
||||
$g['colorspace'] = 'RGB';
|
||||
$g['extend'] = array('true','true');
|
||||
$v = trim($m[1]);
|
||||
// Change commas inside e.g. rgb(x,x,x)
|
||||
while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); }
|
||||
// Remove spaces inside e.g. rgb(x, x, x)
|
||||
while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); }
|
||||
$bgr = preg_split('/\s*,\s*/',$v);
|
||||
for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); }
|
||||
|
||||
// Is first part $bgr[0] a valid point/angle?
|
||||
$startStops = 0;
|
||||
$pos_angle = false;
|
||||
$shape_size = false;
|
||||
$first = preg_split('/\s+/',trim($bgr[0]));
|
||||
$checkCol = $this->mpdf->ConvertColor($first[0]);
|
||||
if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
else if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[0])) {
|
||||
$startStops=1;
|
||||
$shape_size = $bgr[0];
|
||||
}
|
||||
else if (!$checkCol) {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[1])) {
|
||||
$startStops=2;
|
||||
$shape_size = $bgr[1];
|
||||
}
|
||||
|
||||
// If valid point/angle?
|
||||
if ($pos_angle) { // default values
|
||||
// [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,]
|
||||
if (preg_match('/left/i',$pos_angle)) { $startx = 0; }
|
||||
else if (preg_match('/right/i',$pos_angle)) { $startx = 1; }
|
||||
if (preg_match('/top/i',$pos_angle)) { $starty = 1; }
|
||||
else if (preg_match('/bottom/i',$pos_angle)) { $starty = 0; }
|
||||
// Check for %? ?% or %%
|
||||
if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; }
|
||||
else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $startx = $m[1]; }
|
||||
}
|
||||
if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); }
|
||||
else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $starty = $m[1]; }
|
||||
}
|
||||
|
||||
/*
|
||||
// ?? Angle has no effect in radial gradient (does not exist in CSS3 spec.)
|
||||
if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$pos_angle,$m)) {
|
||||
$angle = $m[1] + 0;
|
||||
if (strtolower($m[2])=='deg') { $angle = $angle; }
|
||||
else if (strtolower($m[2])=='grad') { $angle *= (360/400); }
|
||||
else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); }
|
||||
while($angle < 0) { $angle += 360; }
|
||||
$angle = ($angle % 360);
|
||||
}
|
||||
*/
|
||||
if (!isset($starty)) { $starty = 0.5; }
|
||||
if (!isset($startx)) { $startx = 0.5; }
|
||||
|
||||
}
|
||||
// If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values Center
|
||||
$starty = 0.5; $startx = 0.5;
|
||||
$endy = 0.5; $endx = 0.5;
|
||||
}
|
||||
|
||||
// If valid shape/size?
|
||||
$shape = 'ellipse'; // default
|
||||
$size = 'farthest-corner'; // default
|
||||
if ($shape_size) { // default values
|
||||
if (preg_match('/(circle|ellipse)/i',$shape_size, $m)) {
|
||||
$shape = $m[1];
|
||||
}
|
||||
if (preg_match('/(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$shape_size, $m)) {
|
||||
$size = $m[1];
|
||||
if ($size=='contain') { $size = 'closest-side'; }
|
||||
else if ($size=='cover') { $size = 'farthest-corner'; }
|
||||
}
|
||||
}
|
||||
|
||||
$coords = array();
|
||||
if (!isset($startx)) { $startx = false; }
|
||||
if (!isset($starty)) { $starty = false; }
|
||||
if (!isset($endx)) { $endx = false; }
|
||||
if (!isset($endy)) { $endy = false; }
|
||||
if (!isset($radius)) { $radius = false; }
|
||||
if (!isset($angle)) { $angle = 0; }
|
||||
$g['coords'] = array($startx ,$starty ,$endx ,$endy, $radius, $angle, $shape, $size, $repeat );
|
||||
|
||||
$g['stops'] = array();
|
||||
for($i=$startStops;$i<count($bgr);$i++) {
|
||||
$stop = array();
|
||||
// parse stops
|
||||
$el = preg_split('/\s+/',trim($bgr[$i]));
|
||||
// mPDF 5.3.74
|
||||
$col = $this->mpdf->ConvertColor($el[0]);
|
||||
if ($col) { $stop['col'] = $col; }
|
||||
else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); }
|
||||
if ($col{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba()
|
||||
else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka()
|
||||
else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka()
|
||||
|
||||
if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) {
|
||||
$stop['offset'] = $m[1]/100;
|
||||
if ($stop['offset']>1) { unset($stop['offset']); }
|
||||
}
|
||||
else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
$stop['offset'] = $el[1];
|
||||
}
|
||||
$g['stops'][] = $stop;
|
||||
}
|
||||
if (count($g['stops'] )) { return $g; }
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
function parseBackgroundGradient($bg) {
|
||||
// background-gradient: linear #00FFFF #FFFF00 0 0.5 1 0.5; or
|
||||
// background-gradient: radial #00FFFF #FFFF00 0.5 0.5 1 1 1.2;
|
||||
|
||||
$v = trim($bg);
|
||||
$bgr = preg_split('/\s+/',$v);
|
||||
$g = array();
|
||||
if (count($bgr)> 6) {
|
||||
if (strtoupper(substr($bgr[0],0,1)) == 'L' && count($bgr)==7) { // linear
|
||||
$g['type'] = 2;
|
||||
//$coords = array(0,0,1,1 ); // 0 0 1 0 or 0 1 1 1 is L 2 R; 1,1,0,1 is R2L; 1,1,1,0 is T2B; 1,0,1,1 is B2T
|
||||
// Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg).
|
||||
// The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
|
||||
$g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6]);
|
||||
}
|
||||
else if (count($bgr)==8) { // radial
|
||||
$g['type'] = 3;
|
||||
// Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1,
|
||||
// (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg).
|
||||
// (fx, fy) should be inside the circle, otherwise some areas will not be defined
|
||||
$g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6], $bgr[7]);
|
||||
}
|
||||
$g['colorspace'] = 'RGB';
|
||||
// mPDF 5.3.74
|
||||
$cor = $this->mpdf->ConvertColor($bgr[1]);
|
||||
if ($cor{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($cor{0}==4 || $cor{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($cor) { $g['col'] = $cor; }
|
||||
else { $g['col'] = $this->mpdf->ConvertColor(255); }
|
||||
$cor = $this->mpdf->ConvertColor($bgr[2]);
|
||||
if ($cor) { $g['col2'] = $cor; }
|
||||
else { $g['col2'] = $this->mpdf->ConvertColor(255); }
|
||||
$g['extend'] = array('true','true');
|
||||
$g['stops'] = array(array('col'=>$g['col'], 'opacity'=>1, 'offset'=>0), array('col'=>$g['col2'], 'opacity'=>1, 'offset'=>1));
|
||||
return $g;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
433
metadata/include/MPDF54/classes/indic.php
Normal file
@ -0,0 +1,433 @@
|
||||
<?php
|
||||
|
||||
class indic {
|
||||
|
||||
function indic() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
function substituteIndic($earr, $lang, $font) {
|
||||
global $voltdata;
|
||||
|
||||
if (!isset($voltdata[$font])) {
|
||||
include_once(_MPDF_PATH.'includes/'.$font.'.volt.php');
|
||||
$voltdata[$font] = $volt;
|
||||
}
|
||||
|
||||
foreach($earr as $eid=>$char) {
|
||||
$earr[$eid] = sprintf("%04s", strtoupper(dechex($char)));
|
||||
}
|
||||
$vstr = "0020 ".implode(" ",$earr)." 0020";
|
||||
//============================
|
||||
// Common Indic Punctuation marks
|
||||
// If NOT devanagari
|
||||
if ($lang!='hi') {
|
||||
$vstr = str_replace('0964','007C', $vstr); // U+0964 replace with "|"
|
||||
$vstr = str_replace('0965','007C 007C', $vstr); // U+0964 replace with "|"
|
||||
}
|
||||
//============================
|
||||
// Tamil numeral for Zero missing Added mPDF 4.2
|
||||
if ($lang=='ta') {
|
||||
$vstr = str_replace('0BE6','0030', $vstr); // U+0BEB replace with "0"
|
||||
}
|
||||
|
||||
//============================
|
||||
// Re-order vowels
|
||||
|
||||
// DEVANAGARI vowel sign matraI[093F] before consonant
|
||||
if ($lang=='hi') {
|
||||
$prebasedvowels = "(093F)";
|
||||
$nukta = "093C";
|
||||
$halant = "094D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT == VIRAMA
|
||||
}
|
||||
|
||||
// BENGALI vowels [09BF 09C7 09C8]
|
||||
else if ($lang=='bn') {
|
||||
|
||||
// Khanda Ta 09CE not in font -> replace with 09A4|09CD
|
||||
$vstr = preg_replace('/09CE/','09A4 09CD 200D', $vstr); // mPDF 5.3.09
|
||||
|
||||
// BENGALI double-part vowels [09CB 09C7 09BE][09CC 09C7 09D7]
|
||||
$vstr = str_replace('09CB','09C7 09BE', $vstr); // convert to 2 parts
|
||||
$vstr = str_replace('09CC','09C7 09D7', $vstr); // 09C7 pre-based is then shifted below
|
||||
$prebasedvowels = "(09BF|09C7|09C8)";
|
||||
$nukta = "09BC";
|
||||
$halant = "09CD";
|
||||
// mPDF 5.0.044
|
||||
$bnfullcons = "0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
// mPDF 5.0.044
|
||||
// .. and shifting left-based vowel further to the left in case 3 consonants together.
|
||||
$vstr = preg_replace('/('.$bnfullcons.') '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr);
|
||||
|
||||
// mPDF 5.0.044
|
||||
// If left-based vowel has now been shifted to left of RA/Halant (09B0/09CD)
|
||||
// Convert here to above-line form (E068) as it would get missed later
|
||||
// e.g. 09B0 09CD 09AD 09C7 would be changed above =>
|
||||
// e.g. 09C7 09B0 09CD 09AD. The 09B0 09CD should => E068
|
||||
// ??? need to add 09BF as well (09BF|09C7|09C8)
|
||||
$vstr = preg_replace('/(09C7|09C8) 09B0 09CD/', '\\1 E068', $vstr);
|
||||
|
||||
}
|
||||
|
||||
// GUJARATI pre-based vowel [0ABF]
|
||||
else if ($lang=='gu') {
|
||||
$prebasedvowels = "(0ABF)";
|
||||
$nukta = "0ABC";
|
||||
$halant = "0ACD";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// GURMUKHI/PUNJABI pre-based vowel [0ABF]
|
||||
else if ($lang=='pa') {
|
||||
$prebasedvowels = "(0A3F)";
|
||||
$nukta = "0A3C";
|
||||
$halant = "0A4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// TAMIL pre-based vowel [0ABF]
|
||||
else if ($lang=='ta') {
|
||||
// Shrii (Shree)
|
||||
$vstr = preg_replace('/0BB6 0BCD 0BB0 0BC0/','E04B', $vstr);
|
||||
|
||||
// TAMIL double-part vowels [0BCA 0BC6 0BBE][0BCB 0BC7 0BBE][0BCC 0BC6 0BD7]
|
||||
$vstr = preg_replace('/0BCA/','0BC6 0BBE', $vstr); // convert to 2 parts
|
||||
$vstr = preg_replace('/0BCB/','0BC7 0BBE', $vstr); // pre-based is then shifted below
|
||||
$vstr = preg_replace('/0BCC/','0BC6 0BD7', $vstr);
|
||||
$prebasedvowels = "(0BC6|0BC7|0BC8)";
|
||||
// No nukta
|
||||
$halant = "0BCD"; // Doesn't seem to move most in front of halanted consonants
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
// ? Only for special case KSS (already moved to left of 0BB7)
|
||||
$vstr = preg_replace('/0B95 '.$halant.' '.$prebasedvowels.' 0BB7/','\\1 0B95 '.$halant.' 0BB7', $vstr);
|
||||
}
|
||||
|
||||
// ORIYA
|
||||
else if ($lang=='or') {
|
||||
// ORIYA double-part vowels []
|
||||
$vstr = str_replace('0B48','0B47 0B56', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0B4B','0B47 0B3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0B4C','0B47 0B57', $vstr); // 2-part Vowel
|
||||
$orprebasedvowels = "(0B47)";
|
||||
// No nukta
|
||||
$halant = "0B4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$orprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// MALAYALAM
|
||||
else if ($lang=='ml') {
|
||||
// Chillus - old forms - remove ZWNJ after
|
||||
// This font Volt rules recognises e.g. "Na Halant(Virama)" as ChilluN
|
||||
$vstr = preg_replace('/(0D23 0D4D|0D28 0D4D|0D30 0D4D|0D32 0D4D|0D33 0D4D) 200D/','\\1', $vstr);
|
||||
// See Chillus in Unicode [http://en.wikipedia.org/wiki/Malayalam_script]
|
||||
$vstr = str_replace('0D7A','0D23 0D4D', $vstr); // [mlymChilluNn]
|
||||
$vstr = str_replace('0D7B','0D28 0D4D', $vstr); // [mlymChilluN]
|
||||
$vstr = str_replace('0D7C','0D30 0D4D', $vstr); // [mlymChilluR]
|
||||
$vstr = str_replace('0D7D','0D32 0D4D', $vstr); // [mlymChilluL]
|
||||
$vstr = str_replace('0D7E','0D33 0D4D', $vstr); // [mlymChilluLl]
|
||||
/*
|
||||
// Chillus - 0D7A-0D7E not in font directly, but as E005-E009
|
||||
$vstr = preg_replace('/0D23 0D4D 200D/','0D7A', $vstr);
|
||||
$vstr = preg_replace('/0D28 0D4D 200D/','0D7B', $vstr);
|
||||
$vstr = preg_replace('/0D30 0D4D 200D/','0D7C', $vstr);
|
||||
$vstr = preg_replace('/0D32 0D4D 200D/','0D7D', $vstr);
|
||||
$vstr = preg_replace('/0D33 0D4D 200D/','0D7E', $vstr);
|
||||
|
||||
$vstr = preg_replace('/0D7F/','E004', $vstr); // [mlymChilluK]
|
||||
$vstr = preg_replace('/0D7A/','E005', $vstr); // [mlymChilluNn]
|
||||
$vstr = preg_replace('/0D7B/','E006', $vstr); // [mlymChilluN]
|
||||
$vstr = preg_replace('/0D7C/','E007', $vstr); // [mlymChilluR]
|
||||
$vstr = preg_replace('/0D7D/','E008', $vstr); // [mlymChilluL]
|
||||
$vstr = preg_replace('/0D7E/','E009', $vstr); // [mlymChilluLl]
|
||||
*/
|
||||
|
||||
// MALAYALAM double-part vowels []
|
||||
$vstr = str_replace('0D4A','0D46 0D3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0D4B','0D47 0D3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0D4C','0D46 0D57', $vstr); // 2-part Vowel
|
||||
$mlprebasedvowels = "(0D46|0D47|0D48)";
|
||||
// No nukta
|
||||
$halant = "0D4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$mlprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// TELUGU
|
||||
else if ($lang=='te') {
|
||||
// TELUGU double-part vowels [0C48 -> 0C46 0C56]
|
||||
$vstr = str_replace('0C48','0C46 0C56', $vstr); // 2-part Vowel
|
||||
$prebasedvowels = "(0C46)";
|
||||
$abvvowels = "(0C3E|0C3F|0C40|0C46|0C47|0C4A|0C4B|0C4C|0C55)";
|
||||
// No nukta
|
||||
$halant = "0C4D";
|
||||
$tefullforms = "0C15|0C17|0C18|0C1A|0C1B|0C1C|0C1D|0C20|0C21|0C22|0C24|0C25|0C26|0C27|0C28|0C2A|0C2B|0C2D|0C2E|0C2F|0C30|0C33|0C35|0C36|0C37|0C38|0C39|E028|E029|E02A|E02B|E078|E07A|E07B";
|
||||
$vstr = preg_replace('/('.$tefullforms .') '.$halant.' ('.$tefullforms .') '.$abvvowels .'/','\\1 \\3 '.$halant.' \\2', $vstr); // before HALANT
|
||||
}
|
||||
|
||||
|
||||
// KANNADA
|
||||
else if ($lang=='kn') {
|
||||
// KANNADA double-part vowels [0CC8 -> 0CC6 0CD6]
|
||||
$vstr = str_replace('0CC0','0CBF 0CD5', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CC7','0CC6 0CD5', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CC8','0CC6 0CD6', $vstr); // 2-part Vowel AI - no glyph for single
|
||||
$vstr = str_replace('0CCA','0CC6 0CC2', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CCB','0CC6 0CC2 0CD5', $vstr); // 2-part Vowel
|
||||
$prebasedvowels = "(0CBF|0CC6)";
|
||||
$halant = "0CCD";
|
||||
}
|
||||
|
||||
|
||||
//============================
|
||||
|
||||
// SPECIALS
|
||||
|
||||
// DEVANAGARI Ra Halant Ra
|
||||
if ($lang=='hi') {
|
||||
$vstr = str_replace('0930 094D 0930','E05D 0930', $vstr); // Ra Halant Ra => halfRa FullRa
|
||||
}
|
||||
|
||||
// GUJARATI
|
||||
if ($lang=='gu') {
|
||||
$vstr = str_replace('0AB0 0AC2','E02E', $vstr); // Ra VowelUu => SpecialForm RaUu
|
||||
}
|
||||
|
||||
// TELUGU Ra Halant <Consonant> Halant => halfRa Halant<Consonant> Halant
|
||||
if ($lang=='te') {
|
||||
$vstr = preg_replace('/0C30 0C4D ([A-F0-9]{4}) 0C4D/','E021 0C4D \\1 0C4D', $vstr);
|
||||
}
|
||||
|
||||
// KANNADA
|
||||
// Reph at end of word becomes E0CC instead of E00B
|
||||
if ($lang=='kn') {
|
||||
$vstr = str_replace('0CB0 0CCD 0020','E0CC 0020', $vstr); // mPDF 5.3.87
|
||||
}
|
||||
|
||||
|
||||
//============================
|
||||
// MAIN BIT FROM VOLT RULES
|
||||
foreach($voltdata[$font] AS $rid=>$reps) {
|
||||
//echo $rid . ': ' . $vstr.'<br />';
|
||||
$vstr = preg_replace('/'.$reps['match'].'/',$reps['replace'], $vstr);
|
||||
}
|
||||
//echo $vstr.'<br />'; exit;
|
||||
|
||||
|
||||
//============================
|
||||
|
||||
// SPECIALS
|
||||
|
||||
// KANNADA
|
||||
// <Base> <BelowBase1> [<BelowBase2> ] MatraI -> <Base/MatraI ligature> <Belowbase1> etc
|
||||
if ($lang=='kn') {
|
||||
$matraI = "0CBF";
|
||||
$knbase = preg_split('/\|/', "0C95|0C96|0C97|0C98|0C9A|0C9B|0C9C|0C9D|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E0A3|E07D|E07E");
|
||||
$knmatraIligature = preg_split('/\|/', "E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2");
|
||||
$belowbase1 = "E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081";
|
||||
$belowbase2 = "E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081";
|
||||
for ($i=0; $i<count($knbase);$i++) {
|
||||
$vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') ('.$belowbase2.') '.$matraI.'/', $knmatraIligature[$i].' \\1 \\2', $vstr);
|
||||
$vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') '.$matraI.'/', $knmatraIligature[$i].' \\1', $vstr);
|
||||
}
|
||||
}
|
||||
|
||||
// KANNADA
|
||||
// [KanTtaFull] [matraI] => [KanTtaPartial] [matraI]
|
||||
if ($lang=='kn') {
|
||||
$vstr = preg_replace('/0C9F '.$matraI.'/', 'E015 '.$matraI, $vstr);
|
||||
}
|
||||
|
||||
// ORIYA
|
||||
if ($lang=='or') {
|
||||
// SpecialCase Ra[0B30] Halant still left before [oryaFullNnNna] => E00F
|
||||
$vstr = preg_replace('/0B30 '.$halant.' E00F/','E00F E069', $vstr); // convert to Reph
|
||||
}
|
||||
|
||||
//============================
|
||||
// SHIFT REPH
|
||||
|
||||
// DEVANAGARI Shift Reph [E015]
|
||||
if ($lang=='hi') {
|
||||
// FIRSTLY - halfRa = E05D - Change this to Reph [E015]
|
||||
$himatchhalfforms = "E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145";
|
||||
$himatchfullforms = "0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029|0958|0959|095A|E02A|E02B|E02C|E02D|095B|E02E|E02F|E030|E031|095C|095D|E032|E033|E034|E035|E036|0929|E037|095E|E038|E039|E03A|095F|0931|E03B|0934|E03C|E03D|E03E|E03F|E040|E041|E042|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133";
|
||||
$vstr = preg_replace('/E05D ('.$himatchhalfforms.'|'.$himatchfullforms.')/', 'E015 \\1', $vstr);
|
||||
|
||||
// Reph = E015 - Shift Right to just after end of syllable
|
||||
// FullAllForms + HalfAllForms + 093E matraA
|
||||
while(preg_match('/E015 ('.$himatchhalfforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/E015 ('.$himatchhalfforms.')/', '\\1 E015', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/E015 ('.$himatchfullforms.')/', '\\1 E015', $vstr);
|
||||
|
||||
// Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198
|
||||
$vstr = str_replace('E015 093E', '093E E015', $vstr);
|
||||
$vstr = preg_replace('/E015 (0940|E194|E195|E196|E197|E198)/', '\\1 E014', $vstr); // (Small) reph [E014] to Right of matraI
|
||||
$vstr = str_replace('E015 0947', '0947 E014', $vstr); // (Small) reph [E014] to Right of matraI
|
||||
}
|
||||
|
||||
// BENGALI Shift Reph [E068]
|
||||
else if ($lang=='bn') {
|
||||
$bnfullconjuncts = "E002|E003|E004|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133|E134|E135|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E|E15F|E160|E161|E162|E163|E164|E165|E166|E167|E168|E169|E16A|E16B|E16C|E16D|E16E|E16F|E170|E171|E172|E173|E174|E175|E176|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E183|E184|E185|E186|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E18F|E190|E191|E192|E193|E194|E195|E196|E197|E198|E199|E19A";
|
||||
// $bnfullcons - set above;
|
||||
$vstr = preg_replace('/E068 ('.$bnfullconjuncts.'|'.$bnfullcons.')/', '\\1 E068', $vstr);
|
||||
// ? Need to shift it beyond post-base vowels 09BE, 09C0, 09D7 haven't found so can't test??
|
||||
$vstr = preg_replace('/E068 (09BE|09C0|09D7)/', '\\1 E068', $vstr);
|
||||
}
|
||||
|
||||
// GUJARATI Shift Reph [E032]
|
||||
else if ($lang=='gu') {
|
||||
$gufullforms = "0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5";
|
||||
$vstr = preg_replace('/E032 ('.$gufullforms.')/', '\\1 E032', $vstr);
|
||||
// Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198
|
||||
// ? Need to shift it beyond post-base vowels 0ABE, 0AC0 haven't found so can't test??
|
||||
$vstr = preg_replace('/E032 (0ABE|0AC0)/', '\\1 E032', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// TELUGU Shift Reph to LEFT [E046|E069|E077] [TelRaSmallOne] => E046 [TelRaSmallTwo] => E069 [TelRaSmallThree] => E077
|
||||
else if ($lang=='te') {
|
||||
// tefullforms defined earlier
|
||||
$tepartialforms = "E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E07C|E07D|E07E";
|
||||
$matraligs = "E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF";
|
||||
$tevowels = "0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C"
|
||||
."|0C41|0C42|0C43|0C44"; // post matras
|
||||
$vstr = preg_replace('/('.$tevowels.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
while(preg_match('/('.$tepartialforms.') (E046|E069|E077)/', $vstr)) {
|
||||
$vstr = preg_replace('/('.$tepartialforms.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/('.$tefullforms .'|'.$matraligs.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// KANNADA Shift Reph to RIGHT [E00B]
|
||||
else if ($lang=='kn') {
|
||||
$knfullforms = "0C95|0C96|0C97|0C98|0C99|0C9A|0C9B|0C9C|0C9D|0C9E|0C9F|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB1|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E07D|E07E|E0A3";
|
||||
$knpartialforms = "E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|0C9E|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E07F";
|
||||
while(preg_match('/E00B ('.$knpartialforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/E00B ('.$knpartialforms.')/', '\\1 E00B', $vstr);
|
||||
}
|
||||
// mPDF 5.3.47 Also move Reph to right of matraIligatures
|
||||
$knfullforms .= "|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2";
|
||||
$vstr = preg_replace('/E00B ('.$knfullforms.')/', '\\1 E00B', $vstr);
|
||||
|
||||
// ? Need to shift it beyond base or below-base forms - haven't found so can't test??
|
||||
// mPDF 5.3.87
|
||||
// E004 added to list (which is a transformed version of 0CBE)
|
||||
$knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6|E004";
|
||||
$vstr = preg_replace('/E00B ('.$knvowels.')/', '\\1 E00B', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// ORIYA Shift Reph to RIGHT [E069|E06A|E06B|E06C]
|
||||
else if ($lang=='or') {
|
||||
$orrephs = "E069|E06A|E06B|E06C";
|
||||
$orfullforms = "0B15|0B16|0B17|0B18|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B1F|0B20|0B21|0B22|0B23|0B24|0B25|0B26|0B27|0B28|0B29|0B2A|0B2B|0B2C|0B2D|0B2E|0B2F|0B30|0B31|0B32|0B33|0B34|0B35|0B36|0B37|0B38|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037";
|
||||
// E123 - E147 FullHalant forms ? add to FullForms
|
||||
$orpartialforms = "E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5";
|
||||
|
||||
// Combined MatraIReph[E06D] split [0B3F & E069] to allow reph to be shifted forwards
|
||||
$vstr = preg_replace('/('.$orfullforms.') E06D ('.$orfullforms.') 0B3E/', '\\1 0B3F E069 \\2 0B3E', $vstr);
|
||||
|
||||
|
||||
while(preg_match('/('.$orrephs.') ('.$orpartialforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/('.$orrephs.') ('.$orpartialforms.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/('.$orrephs.') ('.$orfullforms.')/', '\\2 \\1', $vstr);
|
||||
|
||||
|
||||
// Combine Reph and MatraI
|
||||
$vstr = str_replace('E069 0B3F', 'E06D', $vstr); // Reph and MatraI -> MatraIReph
|
||||
$vstr = str_replace('E06A 0B3F', 'E06E', $vstr); // Reph and MatraI -> MatraIReph
|
||||
$vstr = str_replace('E06B 0B3F', 'E06F', $vstr); // Reph and MatraI -> MatraIReph
|
||||
}
|
||||
|
||||
|
||||
// MALAYALAM Shift Reph to LEFT [E00E] (mlylmRaVattu)
|
||||
else if ($lang=='ml') {
|
||||
$halant = "0D4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' 0D30/','E00E \\1', $vstr); // 0D30 = Ra
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels .' 0D30/','\\2 E00E \\1', $vstr); // 0D30 = Ra
|
||||
|
||||
$mlfullforms = "0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39"
|
||||
."|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D";
|
||||
// = FullConsonants + FullConjuncts
|
||||
|
||||
// = Add Chillu characters // mPDF 5.0.024
|
||||
$mlfullforms .= "|E004|E005|E006|E007|E008|E009";
|
||||
while(preg_match('/('.$mlfullforms.') E00E/', $vstr))
|
||||
$vstr = preg_replace('/('.$mlfullforms.') E00E/', 'E00E \\1', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
|
||||
// SHIFT post-based vowels to Left of SmallForms (NOT to left of full forms)
|
||||
|
||||
// TELUGU Shift
|
||||
if ($lang=='te') {
|
||||
// NB $tevowels defined above
|
||||
// NB $tefullforms defined above
|
||||
$tebelowbase1 = "E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E"; //'Small1KaToHa'
|
||||
$tebelowbase2 = "E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071"; // 'Small2KaToHa'
|
||||
$vstr = preg_replace('/('.$tebelowbase2.') ('.$tevowels.')/', '\\2 \\1', $vstr);
|
||||
$vstr = preg_replace('/('.$tebelowbase1.') ('.$tevowels.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// KANNADA Shift
|
||||
else if ($lang=='kn') {
|
||||
$knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6"
|
||||
// mPDF 5.3.87 Shouldn't swop E082 and E047 (belowbase1) below
|
||||
// E082 is a matraIligature
|
||||
// ."|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB"
|
||||
."|E004|E007|E008|E009|E00A";
|
||||
|
||||
|
||||
// NB $knvowels defined above
|
||||
// NB $fullforms defined above
|
||||
// $belowbase1/2 defined above
|
||||
$vstr = preg_replace('/('.$belowbase2.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
// mPDF 5.3.87
|
||||
$vstr = preg_replace('/('.$belowbase1.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
|
||||
//$vstr = preg_replace('/('.$fullforms.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
// Clear unwanted ZWJ, ZWNJ
|
||||
// MALAYALAM
|
||||
if ($lang=='ml') {
|
||||
$vstr = preg_replace('/(200C|200D) /','', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
// END & PUT IT BACK TOGETHER
|
||||
$vstr = preg_replace('/^0020 (.*) 0020$/', '\\1', $vstr);
|
||||
|
||||
$varr = explode(" ",$vstr);
|
||||
$e = '';
|
||||
foreach($varr AS $v) {
|
||||
$e.=code2utf(hexdec($v));
|
||||
}
|
||||
//============================
|
||||
|
||||
return $e;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
2596
metadata/include/MPDF54/classes/svg.php
Normal file
589
metadata/include/MPDF54/classes/tocontents.php
Normal file
@ -0,0 +1,589 @@
|
||||
<?php
|
||||
|
||||
class tocontents {
|
||||
|
||||
var $mpdf = null;
|
||||
var $_toc;
|
||||
var $TOCmark;
|
||||
var $TOCfont;
|
||||
var $TOCfontsize;
|
||||
var $TOCindent;
|
||||
var $TOCheader;
|
||||
var $TOCfooter;
|
||||
var $TOCpreHTML;
|
||||
var $TOCpostHTML;
|
||||
var $TOCbookmarkText;
|
||||
var $TOCusePaging;
|
||||
var $TOCuseLinking;
|
||||
var $TOCorientation;
|
||||
var $TOC_margin_left;
|
||||
var $TOC_margin_right;
|
||||
var $TOC_margin_top;
|
||||
var $TOC_margin_bottom;
|
||||
var $TOC_margin_header;
|
||||
var $TOC_margin_footer;
|
||||
var $TOC_odd_header_name;
|
||||
var $TOC_even_header_name;
|
||||
var $TOC_odd_footer_name;
|
||||
var $TOC_even_footer_name;
|
||||
var $TOC_odd_header_value;
|
||||
var $TOC_even_header_value;
|
||||
var $TOC_odd_footer_value;
|
||||
var $TOC_even_footer_value;
|
||||
var $TOC_page_selector;
|
||||
var $m_TOC;
|
||||
|
||||
function tocontents(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
$this->_toc=array();
|
||||
$this->TOCmark = 0;
|
||||
$this->m_TOC=array();
|
||||
}
|
||||
|
||||
function TOCpagebreak($tocfont='', $tocfontsize='', $tocindent='', $TOCusePaging=true, $TOCuseLinking='', $toc_orientation='', $toc_mgl='',$toc_mgr='',$toc_mgt='',$toc_mgb='',$toc_mgh='',$toc_mgf='',$toc_ohname='',$toc_ehname='',$toc_ofname='',$toc_efname='',$toc_ohvalue=0,$toc_ehvalue=0,$toc_ofvalue=0, $toc_efvalue=0, $toc_preHTML='', $toc_postHTML='', $toc_bookmarkText='', $resetpagenum='', $pagenumstyle='', $suppress='', $orientation='', $mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0, $toc_id=0, $pagesel='', $toc_pagesel='', $sheetsize='', $toc_sheetsize='') {
|
||||
if (strtoupper($toc_id)=='ALL') { $toc_id = '_mpdf_all'; }
|
||||
else if (!$toc_id) { $toc_id = 0; }
|
||||
else { $toc_id = strtolower($toc_id); }
|
||||
|
||||
if (!$tocfont) { $tocfont = $this->mpdf->default_font; }
|
||||
if (!$tocfontsize) { $tocfontsize = $this->mpdf->default_font_size; }
|
||||
if (!$tocindent && $tocindent !== 0) { $tocindent = 5; }
|
||||
if ($TOCusePaging === false || strtolower($TOCusePaging) == "off" || $TOCusePaging === 0 || $TOCusePaging === "0" || $TOCusePaging === "") { $TOCusePaging = false; }
|
||||
else { $TOCusePaging = true; }
|
||||
if (!$TOCuseLinking) { $TOCuseLinking = false; }
|
||||
if ($toc_id) {
|
||||
$this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['TOCfont'] = $tocfont;
|
||||
$this->m_TOC[$toc_id]['TOCfontsize'] = $tocfontsize;
|
||||
$this->m_TOC[$toc_id]['TOCindent'] = $tocindent;
|
||||
$this->m_TOC[$toc_id]['TOCorientation'] = $toc_orientation;
|
||||
$this->m_TOC[$toc_id]['TOCuseLinking'] = $TOCuseLinking;
|
||||
$this->m_TOC[$toc_id]['TOCusePaging'] = $TOCusePaging;
|
||||
|
||||
if ($toc_preHTML) { $this->m_TOC[$toc_id]['TOCpreHTML'] = $toc_preHTML; }
|
||||
if ($toc_postHTML) { $this->m_TOC[$toc_id]['TOCpostHTML'] = $toc_postHTML; }
|
||||
if ($toc_bookmarkText) { $this->m_TOC[$toc_id]['TOCbookmarkText'] = $toc_bookmarkText; }
|
||||
|
||||
$this->m_TOC[$toc_id]['TOC_margin_left'] = $toc_mgl;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_right'] = $toc_mgr;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_top'] = $toc_mgt;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_bottom'] = $toc_mgb;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_header'] = $toc_mgh;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_footer'] = $toc_mgf;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_name'] = $toc_ohname;
|
||||
$this->m_TOC[$toc_id]['TOC_even_header_name'] = $toc_ehname;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $toc_ofname;
|
||||
$this->m_TOC[$toc_id]['TOC_even_footer_name'] = $toc_efname;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_value'] = $toc_ohvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_even_header_value'] = $toc_ehvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_footer_value'] = $toc_ofvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_even_footer_value'] = $toc_efvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_page_selector'] = $toc_pagesel;
|
||||
$this->m_TOC[$toc_id]['TOCsheetsize'] = $toc_sheetsize;
|
||||
}
|
||||
else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCfont = $tocfont;
|
||||
$this->TOCfontsize = $tocfontsize;
|
||||
$this->TOCindent = $tocindent;
|
||||
$this->TOCorientation = $toc_orientation;
|
||||
$this->TOCuseLinking = $TOCuseLinking;
|
||||
$this->TOCusePaging = $TOCusePaging;
|
||||
|
||||
if ($toc_preHTML) { $this->TOCpreHTML = $toc_preHTML; }
|
||||
if ($toc_postHTML) { $this->TOCpostHTML = $toc_postHTML; }
|
||||
if ($toc_bookmarkText) { $this->TOCbookmarkText = $toc_bookmarkText; }
|
||||
|
||||
$this->TOC_margin_left = $toc_mgl;
|
||||
$this->TOC_margin_right = $toc_mgr;
|
||||
$this->TOC_margin_top = $toc_mgt;
|
||||
$this->TOC_margin_bottom = $toc_mgb;
|
||||
$this->TOC_margin_header = $toc_mgh;
|
||||
$this->TOC_margin_footer = $toc_mgf;
|
||||
$this->TOC_odd_header_name = $toc_ohname;
|
||||
$this->TOC_even_header_name = $toc_ehname;
|
||||
$this->TOC_odd_footer_name = $toc_ofname;
|
||||
$this->TOC_even_footer_name = $toc_efname;
|
||||
$this->TOC_odd_header_value = $toc_ohvalue;
|
||||
$this->TOC_even_header_value = $toc_ehvalue;
|
||||
$this->TOC_odd_footer_value = $toc_ofvalue;
|
||||
$this->TOC_even_footer_value = $toc_efvalue;
|
||||
$this->TOC_page_selector = $toc_pagesel;
|
||||
$this->TOCsheetsize = $toc_sheetsize;
|
||||
}
|
||||
}
|
||||
|
||||
// Initiate, and Mark a place for the Table of Contents to be inserted
|
||||
function TOC($tocfont='', $tocfontsize=8, $tocindent=5, $resetpagenum='', $pagenumstyle='', $suppress='', $toc_orientation='', $TOCusePaging=true, $TOCuseLinking=false, $toc_id=0) {
|
||||
if (strtoupper($toc_id)=='ALL') { $toc_id = '_mpdf_all'; }
|
||||
else if (!$toc_id) { $toc_id = 0; }
|
||||
else { $toc_id = strtolower($toc_id); }
|
||||
// To use odd and even pages
|
||||
// Cannot start table of contents on an even page
|
||||
if (($this->mpdf->mirrorMargins) && (($this->mpdf->page)%2==0)) { // EVEN
|
||||
if ($this->mpdf->ColActive) {
|
||||
if (count($this->mpdf->columnbuffer)) { $this->mpdf->printcolumnbuffer(); }
|
||||
}
|
||||
$this->mpdf->AddPage($this->mpdf->CurOrientation,'',$resetpagenum, $pagenumstyle, $suppress);
|
||||
}
|
||||
else {
|
||||
$this->mpdf->PageNumSubstitutions[] = array('from'=>$this->mpdf->page, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=>$suppress);
|
||||
}
|
||||
if (!$tocfont) { $tocfont = $this->mpdf->default_font; }
|
||||
if (!$tocfontsize) { $tocfontsize = $this->mpdf->default_font_size; }
|
||||
if ($toc_id) {
|
||||
$this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['TOCfont'] = $tocfont;
|
||||
$this->m_TOC[$toc_id]['TOCfontsize'] = $tocfontsize;
|
||||
$this->m_TOC[$toc_id]['TOCindent'] = $tocindent;
|
||||
$this->m_TOC[$toc_id]['TOCorientation'] = $toc_orientation;
|
||||
$this->m_TOC[$toc_id]['TOCuseLinking'] = $TOCuseLinking;
|
||||
$this->m_TOC[$toc_id]['TOCusePaging'] = $TOCusePaging;
|
||||
}
|
||||
else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCfont = $tocfont;
|
||||
$this->TOCfontsize = $tocfontsize;
|
||||
$this->TOCindent = $tocindent;
|
||||
$this->TOCorientation = $toc_orientation;
|
||||
$this->TOCuseLinking = $TOCuseLinking;
|
||||
$this->TOCusePaging = $TOCusePaging;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function insertTOC() {
|
||||
$notocs = 0;
|
||||
if ($this->TOCmark) { $notocs = 1; }
|
||||
$notocs += count($this->m_TOC);
|
||||
|
||||
if ($notocs==0) { return; }
|
||||
|
||||
if (count($this->m_TOC)) { reset($this->m_TOC); }
|
||||
$added_toc_pages = 0;
|
||||
|
||||
if ($this->mpdf->ColActive) { $this->mpdf->SetColumns(0); }
|
||||
if (($this->mpdf->mirrorMargins) && (($this->mpdf->page)%2==1)) { // ODD
|
||||
$this->mpdf->AddPage($this->mpdf->CurOrientation);
|
||||
$extrapage = true;
|
||||
}
|
||||
else { $extrapage = false; }
|
||||
|
||||
for ($toci = 0; $toci<$notocs; $toci++) {
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$toc_id = 0;
|
||||
$toc_page = $this->TOCmark;
|
||||
$tocfont = $this->TOCfont;
|
||||
$tocfontsize = $this->TOCfontsize;
|
||||
$tocindent = $this->TOCindent;
|
||||
$toc_orientation = $this->TOCorientation;
|
||||
$TOCuseLinking = $this->TOCuseLinking;
|
||||
$TOCusePaging = $this->TOCusePaging;
|
||||
$toc_preHTML = $this->TOCpreHTML;
|
||||
$toc_postHTML = $this->TOCpostHTML;
|
||||
$toc_bookmarkText = $this->TOCbookmarkText;
|
||||
$toc_mgl = $this->TOC_margin_left;
|
||||
$toc_mgr = $this->TOC_margin_right;
|
||||
$toc_mgt = $this->TOC_margin_top;
|
||||
$toc_mgb = $this->TOC_margin_bottom;
|
||||
$toc_mgh = $this->TOC_margin_header;
|
||||
$toc_mgf = $this->TOC_margin_footer;
|
||||
$toc_ohname = $this->TOC_odd_header_name;
|
||||
$toc_ehname = $this->TOC_even_header_name;
|
||||
$toc_ofname = $this->TOC_odd_footer_name;
|
||||
$toc_efname = $this->TOC_even_footer_name;
|
||||
$toc_ohvalue = $this->TOC_odd_header_value;
|
||||
$toc_ehvalue = $this->TOC_even_header_value;
|
||||
$toc_ofvalue = $this->TOC_odd_footer_value;
|
||||
$toc_efvalue = $this->TOC_even_footer_value;
|
||||
$toc_page_selector = $this->TOC_page_selector;
|
||||
$toc_sheet_size = $this->TOCsheetsize;
|
||||
}
|
||||
else {
|
||||
$arr = current($this->m_TOC);
|
||||
|
||||
$toc_id = key($this->m_TOC);
|
||||
$toc_page = $this->m_TOC[$toc_id]['TOCmark'];
|
||||
$tocfont = $this->m_TOC[$toc_id]['TOCfont'];
|
||||
$tocfontsize = $this->m_TOC[$toc_id]['TOCfontsize'];
|
||||
$tocindent = $this->m_TOC[$toc_id]['TOCindent'];
|
||||
$toc_orientation = $this->m_TOC[$toc_id]['TOCorientation'];
|
||||
$TOCuseLinking = $this->m_TOC[$toc_id]['TOCuseLinking'];
|
||||
$TOCusePaging = $this->m_TOC[$toc_id]['TOCusePaging'];
|
||||
if (isset($this->m_TOC[$toc_id]['TOCpreHTML'])) { $toc_preHTML = $this->m_TOC[$toc_id]['TOCpreHTML']; }
|
||||
else { $toc_preHTML = ''; }
|
||||
if (isset($this->m_TOC[$toc_id]['TOCpostHTML'])) { $toc_postHTML = $this->m_TOC[$toc_id]['TOCpostHTML']; }
|
||||
else { $toc_postHTML = ''; }
|
||||
if (isset($this->m_TOC[$toc_id]['TOCbookmarkText'])) { $toc_bookmarkText = $this->m_TOC[$toc_id]['TOCbookmarkText']; }
|
||||
else { $toc_bookmarkText = ''; } // *BOOKMARKS*
|
||||
$toc_mgl = $this->m_TOC[$toc_id]['TOC_margin_left'];
|
||||
$toc_mgr = $this->m_TOC[$toc_id]['TOC_margin_right'];
|
||||
$toc_mgt = $this->m_TOC[$toc_id]['TOC_margin_top'];
|
||||
$toc_mgb = $this->m_TOC[$toc_id]['TOC_margin_bottom'];
|
||||
$toc_mgh = $this->m_TOC[$toc_id]['TOC_margin_header'];
|
||||
$toc_mgf = $this->m_TOC[$toc_id]['TOC_margin_footer'];
|
||||
$toc_ohname = $this->m_TOC[$toc_id]['TOC_odd_header_name'];
|
||||
$toc_ehname = $this->m_TOC[$toc_id]['TOC_even_header_name'];
|
||||
$toc_ofname = $this->m_TOC[$toc_id]['TOC_odd_footer_name'];
|
||||
$toc_efname = $this->m_TOC[$toc_id]['TOC_even_footer_name'];
|
||||
$toc_ohvalue = $this->m_TOC[$toc_id]['TOC_odd_header_value'];
|
||||
$toc_ehvalue = $this->m_TOC[$toc_id]['TOC_even_header_value'];
|
||||
$toc_ofvalue = $this->m_TOC[$toc_id]['TOC_odd_footer_value'];
|
||||
$toc_efvalue = $this->m_TOC[$toc_id]['TOC_even_footer_value'];
|
||||
$toc_page_selector = $this->m_TOC[$toc_id]['TOC_page_selector'];
|
||||
$toc_sheet_size = $this->m_TOC[$toc_id]['TOCsheetsize'];
|
||||
next($this->m_TOC);
|
||||
}
|
||||
if ($this->TOCheader) { $this->mpdf->SetHeader($this->TOCheader); }
|
||||
else if ($this->TOCheader !== false) { $this->mpdf->SetHeader(); }
|
||||
|
||||
if (!$tocindent && $tocindent !== 0) { $tocindent = 5; }
|
||||
if (!$toc_orientation) { $toc_orientation= $this->mpdf->DefOrientation; }
|
||||
$this->mpdf->AddPage($toc_orientation, '', '', '', "on", $toc_mgl, $toc_mgr, $toc_mgt, $toc_mgb, $toc_mgh, $toc_mgf, $toc_ohname, $toc_ehname, $toc_ofname, $toc_efname, $toc_ohvalue, $toc_ehvalue, $toc_ofvalue, $toc_efvalue, $toc_page_selector, $toc_sheet_size );
|
||||
|
||||
if ($this->TOCfooter) { $this->mpdf->SetFooter($this->TOCfooter); }
|
||||
else if ($this->TOCfooter !== false) { $this->mpdf->SetFooter(); }
|
||||
|
||||
$tocstart=count($this->mpdf->pages);
|
||||
if ($toc_preHTML) { $this->mpdf->WriteHTML($toc_preHTML); }
|
||||
|
||||
foreach($this->_toc as $t) {
|
||||
if ($t['toc_id']==='_mpdf_all' || $t['toc_id']===$toc_id ) {
|
||||
$tpgno = $this->mpdf->docPageNum($t['p']);
|
||||
$lineheightcorr = 2-$t['l'];
|
||||
//Offset
|
||||
$level=$t['l'];
|
||||
|
||||
if ($TOCuseLinking) { $tlink = $t['link']; }
|
||||
else { $tlink = ''; }
|
||||
|
||||
if ($this->mpdf->directionality == 'rtl') {
|
||||
$weight='';
|
||||
if($level==0)
|
||||
$weight='B';
|
||||
$str=$t['t'];
|
||||
$fullstr = $str;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$PageCellSize=$this->mpdf->GetStringWidth($tpgno )+2;
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$repdots = $this->mpdf->GetStringWidth(str_repeat('.',5)); // mPDF 5.3.07
|
||||
$cw = count(explode(' ',$str));
|
||||
while (($strsize + $repdots +4 + $PageCellSize) > $this->mpdf->pgwidth && $cw>1) { // mPDF 5.3.07
|
||||
$str = implode(' ',explode(' ',$str,-1));
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$cw = count(explode(' ',$str));
|
||||
}
|
||||
$sl = strlen($str);
|
||||
$rem = substr($fullstr, ($sl+1));
|
||||
|
||||
$this->mpdf->magic_reverse_dir($str, true, $this->mpdf->directionality); // *RTL*
|
||||
|
||||
if ($TOCusePaging) {
|
||||
//Page number
|
||||
$this->mpdf->SetFont($tocfont,'',$tocfontsize);
|
||||
$this->mpdf->Cell($PageCellSize,$this->mpdf->FontSize+$lineheightcorr,$tpgno ,0,0,'L',0,$tlink);
|
||||
|
||||
//Filling dots
|
||||
$w=$this->mpdf->w-$this->mpdf->lMargin-$this->mpdf->rMargin-$PageCellSize-($level*$tocindent)-($strsize+2);
|
||||
$nb=intval($w/$this->mpdf->GetCharWidth('.',false)); // mPDF 5.3.04
|
||||
if ($nb>0) {
|
||||
$dots=str_repeat('.',$nb);
|
||||
$this->mpdf->Cell($w+2,$this->mpdf->FontSize+$lineheightcorr,$dots,0,0,'L');
|
||||
}
|
||||
// Text
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize);
|
||||
$this->mpdf->Cell($strsize-($level*$tocindent),$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'R',0,$tlink);
|
||||
}
|
||||
else {
|
||||
// Text
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize);
|
||||
$this->mpdf->Cell($this->mpdf->pgwidth -($level*$tocindent),$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'R',0,$tlink);
|
||||
}
|
||||
|
||||
if ($rem) {
|
||||
$this->mpdf->x += 10;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$this->mpdf->MultiCell($this->mpdf->pgwidth -($level*$tocindent)-15,$this->mpdf->FontSize+$lineheightcorr,$rem,0,R,0,$tlink,'rtl',true);
|
||||
}
|
||||
}
|
||||
// LTR
|
||||
else {
|
||||
// Text
|
||||
$weight='';
|
||||
if($level==0)
|
||||
$weight='B';
|
||||
$str=$t['t'];
|
||||
$fullstr = $str;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
if($level>0 && $tocindent) { $this->mpdf->Cell($level*$tocindent,$this->mpdf->FontSize+$lineheightcorr); }
|
||||
|
||||
// Font-specific ligature substitution for Indic fonts
|
||||
if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) $this->mpdf->ConvertIndic($str); // *INDIC*
|
||||
|
||||
$PageCellSize=$this->mpdf->GetStringWidth($tpgno )+2;
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$repdots = $this->mpdf->GetStringWidth(str_repeat('.',5)); // mPDF 5.3.07
|
||||
$cw = count(explode(' ',$str));
|
||||
while (($strsize + $repdots +4+ $PageCellSize + ($level*$tocindent)) > $this->mpdf->pgwidth && $cw>1) { // mPDF 5.3.07
|
||||
$str = implode(' ',explode(' ',$str,-1));
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$cw = count(explode(' ',$str));
|
||||
}
|
||||
$sl = strlen($str);
|
||||
$rem = substr($fullstr, ($sl+1));
|
||||
|
||||
if ($TOCusePaging) {
|
||||
// Text
|
||||
$this->mpdf->Cell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$str,0,0,'',0,$tlink);
|
||||
|
||||
//Filling dots
|
||||
$this->mpdf->SetFont($tocfont,'',$tocfontsize);
|
||||
$w=$this->mpdf->w-$this->mpdf->lMargin-$this->mpdf->rMargin-$PageCellSize-($level*$tocindent)-($strsize+2);
|
||||
$nb=intval($w/$this->mpdf->GetCharWidth('.',false)); // mPDF 5.3.04
|
||||
if ($nb>0) { $dots=str_repeat('.',$nb); }
|
||||
else { $this->mpdf->y += $this->mpdf->lineheight; $dots=str_repeat('.',5); } // ..... 5 dots?
|
||||
$this->mpdf->Cell($w,$this->mpdf->FontSize+$lineheightcorr,$dots,0,0,'R');
|
||||
|
||||
//Page number
|
||||
$this->mpdf->Cell($PageCellSize,$this->mpdf->FontSize+$lineheightcorr,$tpgno ,0,1,'R',0,$tlink);
|
||||
}
|
||||
else {
|
||||
// Text only
|
||||
$this->mpdf->Cell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'',0,$tlink); // forces new line
|
||||
}
|
||||
if ($rem) {
|
||||
$this->mpdf->x += 5 + $PageCellSize + ($level*$tocindent);
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$this->mpdf->MultiCell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$rem,0,L,0,$tlink,'ltr',true);
|
||||
}
|
||||
|
||||
} // *RTL*
|
||||
}
|
||||
}
|
||||
|
||||
if ($toc_postHTML) { $this->mpdf->WriteHTML($toc_postHTML); }
|
||||
$this->mpdf->AddPage($toc_orientation,'E');
|
||||
|
||||
$n_toc = $this->mpdf->page - $tocstart + 1;
|
||||
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$TOC_start = $tocstart ;
|
||||
$TOC_end = $this->mpdf->page;
|
||||
$TOC_npages = $n_toc;
|
||||
}
|
||||
else {
|
||||
$this->m_TOC[$toc_id]['start'] = $tocstart ;
|
||||
$this->m_TOC[$toc_id]['end'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['npages'] = $n_toc;
|
||||
}
|
||||
}
|
||||
|
||||
$s = '';
|
||||
|
||||
$s .= $this->mpdf->PrintBodyBackgrounds();
|
||||
|
||||
$s .= $this->mpdf->PrintPageBackgrounds();
|
||||
$this->mpdf->pages[$this->mpdf->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', "\n".$s."\n".'\\1', $this->mpdf->pages[$this->mpdf->page]);
|
||||
$this->mpdf->pageBackgrounds = array();
|
||||
|
||||
//Page footer
|
||||
$this->mpdf->InFooter=true;
|
||||
$this->mpdf->Footer();
|
||||
$this->mpdf->InFooter=false;
|
||||
|
||||
// 2nd time through to move pages etc.
|
||||
$added_toc_pages = 0;
|
||||
if (count($this->m_TOC)) { reset($this->m_TOC); }
|
||||
|
||||
for ($toci = 0; $toci<$notocs; $toci++) {
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$toc_id = 0;
|
||||
$toc_page = $this->TOCmark + $added_toc_pages;
|
||||
$toc_orientation = $this->TOCorientation;
|
||||
$TOCuseLinking = $this->TOCuseLinking;
|
||||
$TOCusePaging = $this->TOCusePaging;
|
||||
$toc_bookmarkText = $this->TOCbookmarkText; // *BOOKMARKS*
|
||||
|
||||
$tocstart = $TOC_start ;
|
||||
$tocend = $n = $TOC_end;
|
||||
$n_toc = $TOC_npages;
|
||||
}
|
||||
else {
|
||||
$arr = current($this->m_TOC);
|
||||
|
||||
$toc_id = key($this->m_TOC);
|
||||
$toc_page = $this->m_TOC[$toc_id]['TOCmark'] + $added_toc_pages;
|
||||
$toc_orientation = $this->m_TOC[$toc_id]['TOCorientation'];
|
||||
$TOCuseLinking = $this->m_TOC[$toc_id]['TOCuseLinking'];
|
||||
$TOCusePaging = $this->m_TOC[$toc_id]['TOCusePaging'];
|
||||
$toc_bookmarkText = $this->m_TOC[$toc_id]['TOCbookmarkText']; // *BOOKMARKS*
|
||||
|
||||
$tocstart = $this->m_TOC[$toc_id]['start'] ;
|
||||
$tocend = $n = $this->m_TOC[$toc_id]['end'] ;
|
||||
$n_toc = $this->m_TOC[$toc_id]['npages'] ;
|
||||
|
||||
next($this->m_TOC);
|
||||
}
|
||||
|
||||
// Now pages moved
|
||||
$added_toc_pages += $n_toc;
|
||||
|
||||
$this->mpdf->MovePages($toc_page, $tocstart, $tocend) ;
|
||||
$this->mpdf->pgsIns[$toc_page] = $tocend - $tocstart + 1;
|
||||
|
||||
/*-- BOOKMARKS --*/
|
||||
// Insert new Bookmark for Bookmark
|
||||
if ($toc_bookmarkText) {
|
||||
$insert = -1;
|
||||
foreach($this->mpdf->BMoutlines as $i=>$o) {
|
||||
if($o['p']<$toc_page) { // i.e. before point of insertion
|
||||
$insert = $i;
|
||||
}
|
||||
}
|
||||
$txt = $this->mpdf->purify_utf8_text($toc_bookmarkText);
|
||||
if ($this->mpdf->text_input_as_HTML) {
|
||||
$txt = $this->mpdf->all_entities_to_utf8($txt);
|
||||
}
|
||||
$newBookmark[0] = array('t'=>$txt,'l'=>0,'y'=>0,'p'=>$toc_page );
|
||||
array_splice($this->mpdf->BMoutlines,($insert+1),0,$newBookmark);
|
||||
}
|
||||
/*-- END BOOKMARKS --*/
|
||||
|
||||
}
|
||||
|
||||
// Delete empty page that was inserted earlier
|
||||
if ($extrapage) {
|
||||
unset($this->mpdf->pages[count($this->mpdf->pages)]);
|
||||
$this->mpdf->page--; // Reset page pointer
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function openTagTOC($attr) {
|
||||
if (isset($attr['FONT-SIZE']) && $attr['FONT-SIZE']) { $tocfontsize = $attr['FONT-SIZE']; } else { $tocfontsize = ''; }
|
||||
if (isset($attr['FONT']) && $attr['FONT']) { $tocfont = $attr['FONT']; } else { $tocfont = ''; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $tocindent = $attr['INDENT']; } else { $tocindent = ''; }
|
||||
if (isset($attr['RESETPAGENUM']) && $attr['RESETPAGENUM']) { $resetpagenum = $attr['RESETPAGENUM']; } else { $resetpagenum = ''; }
|
||||
if (isset($attr['PAGENUMSTYLE']) && $attr['PAGENUMSTYLE']) { $pagenumstyle = $attr['PAGENUMSTYLE']; } else { $pagenumstyle= ''; }
|
||||
if (isset($attr['SUPPRESS']) && $attr['SUPPRESS']) { $suppress = $attr['SUPPRESS']; } else { $suppress = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $toc_orientation = $attr['TOC-ORIENTATION']; } else { $toc_orientation = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $paging = false; }
|
||||
else { $paging = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $links = true; }
|
||||
else { $links = false; }
|
||||
if (isset($attr['NAME']) && $attr['NAME']) { $toc_id = strtolower($attr['NAME']); } else { $toc_id = 0; }
|
||||
$this->TOC($tocfont,$tocfontsize,$tocindent,$resetpagenum, $pagenumstyle, $suppress, $toc_orientation, $paging, $links, $toc_id);
|
||||
}
|
||||
|
||||
|
||||
function openTagTOCPAGEBREAK($attr) {
|
||||
if (isset($attr['NAME']) && $attr['NAME']) { $toc_id = strtolower($attr['NAME']); } else { $toc_id = 0; }
|
||||
if ($toc_id) {
|
||||
if (isset($attr['FONT-SIZE'])) { $this->m_TOC[$toc_id]['TOCfontsize'] = $attr['FONT-SIZE']; } else { $this->m_TOC[$toc_id]['TOCfontsize'] = $this->mpdf->default_font_size; }
|
||||
if (isset($attr['FONT'])) { $this->m_TOC[$toc_id]['TOCfont'] = $attr['FONT']; } else { $this->m_TOC[$toc_id]['TOCfont'] = $this->mpdf->default_font; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $this->m_TOC[$toc_id]['TOCindent'] = $attr['INDENT']; } else { $this->m_TOC[$toc_id]['TOCindent'] = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $this->m_TOC[$toc_id]['TOCorientation'] = $attr['TOC-ORIENTATION']; } else { $this->m_TOC[$toc_id]['TOCorientation'] = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $this->m_TOC[$toc_id]['TOCusePaging'] = false; }
|
||||
else { $this->m_TOC[$toc_id]['TOCusePaging'] = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $this->m_TOC[$toc_id]['TOCuseLinking'] = true; }
|
||||
else { $this->m_TOC[$toc_id]['TOCuseLinking'] = false; }
|
||||
|
||||
$this->m_TOC[$toc_id]['TOC_margin_left'] = $this->m_TOC[$toc_id]['TOC_margin_right'] = $this->m_TOC[$toc_id]['TOC_margin_top'] = $this->m_TOC[$toc_id]['TOC_margin_bottom'] = $this->m_TOC[$toc_id]['TOC_margin_header'] = $this->m_TOC[$toc_id]['TOC_margin_footer'] = '';
|
||||
if (isset($attr['TOC-MARGIN-RIGHT'])) { $this->m_TOC[$toc_id]['TOC_margin_right'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-RIGHT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-LEFT'])) { $this->m_TOC[$toc_id]['TOC_margin_left'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-LEFT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-TOP'])) { $this->m_TOC[$toc_id]['TOC_margin_top'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-TOP'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-BOTTOM'])) { $this->m_TOC[$toc_id]['TOC_margin_bottom'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-BOTTOM'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-HEADER'])) { $this->m_TOC[$toc_id]['TOC_margin_header'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-HEADER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-FOOTER'])) { $this->m_TOC[$toc_id]['TOC_margin_footer'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-FOOTER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_name'] = $this->m_TOC[$toc_id]['TOC_even_header_name'] = $this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $this->m_TOC[$toc_id]['TOC_even_footer_name'] = '';
|
||||
if (isset($attr['TOC-ODD-HEADER-NAME']) && $attr['TOC-ODD-HEADER-NAME']) { $this->m_TOC[$toc_id]['TOC_odd_header_name'] = $attr['TOC-ODD-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-NAME']) && $attr['TOC-EVEN-HEADER-NAME']) { $this->m_TOC[$toc_id]['TOC_even_header_name'] = $attr['TOC-EVEN-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-NAME']) && $attr['TOC-ODD-FOOTER-NAME']) { $this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $attr['TOC-ODD-FOOTER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-NAME']) && $attr['TOC-EVEN-FOOTER-NAME']) { $this->m_TOC[$toc_id]['TOC_even_footer_name'] = $attr['TOC-EVEN-FOOTER-NAME']; }
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_value'] = $this->m_TOC[$toc_id]['TOC_even_header_value'] = $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = $this->m_TOC[$toc_id]['TOC_even_footer_value'] = 0;
|
||||
if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_odd_header_value'] = 1; }
|
||||
else if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_odd_header_value'] = -1; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_even_header_value'] = 1; }
|
||||
else if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_even_header_value'] = -1; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = 1; }
|
||||
else if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = -1; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_even_footer_value'] = 1; }
|
||||
else if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_even_footer_value'] = -1; }
|
||||
if (isset($attr['TOC-PAGE-SELECTOR']) && $attr['TOC-PAGE-SELECTOR']) { $this->m_TOC[$toc_id]['TOC_page_selector'] = $attr['TOC-PAGE-SELECTOR']; }
|
||||
else { $this->m_TOC[$toc_id]['TOC_page_selector'] = ''; }
|
||||
if (isset($attr['TOC-SHEET-SIZE']) && $attr['TOC-SHEET-SIZE']) { $this->m_TOC[$toc_id]['TOCsheetsize'] = $attr['TOC-SHEET-SIZE']; } else { $this->m_TOC[$toc_id]['TOCsheetsize'] = ''; }
|
||||
|
||||
|
||||
if (isset($attr['TOC-PREHTML']) && $attr['TOC-PREHTML']) { $this->m_TOC[$toc_id]['TOCpreHTML'] = htmlspecialchars_decode($attr['TOC-PREHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-POSTHTML']) && $attr['TOC-POSTHTML']) { $this->m_TOC[$toc_id]['TOCpostHTML'] = htmlspecialchars_decode($attr['TOC-POSTHTML'],ENT_QUOTES); }
|
||||
|
||||
if (isset($attr['TOC-BOOKMARKTEXT']) && $attr['TOC-BOOKMARKTEXT']) { $this->m_TOC[$toc_id]['TOCbookmarkText'] = htmlspecialchars_decode($attr['TOC-BOOKMARKTEXT'],ENT_QUOTES); } // *BOOKMARKS*
|
||||
}
|
||||
else {
|
||||
if (isset($attr['FONT-SIZE'])) { $this->TOCfontsize = $attr['FONT-SIZE']; } else { $this->TOCfontsize = $this->mpdf->default_font_size; }
|
||||
if (isset($attr['FONT'])) { $this->TOCfont = $attr['FONT']; } else { $this->TOCfont = $this->mpdf->default_font; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $this->TOCindent = $attr['INDENT']; } else { $this->TOCindent = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $this->TOCorientation = $attr['TOC-ORIENTATION']; } else { $this->TOCorientation = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $this->TOCusePaging = false; }
|
||||
else { $this->TOCusePaging = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $this->TOCuseLinking = true; }
|
||||
else { $this->TOCuseLinking = false; }
|
||||
|
||||
$this->TOC_margin_left = $this->TOC_margin_right = $this->TOC_margin_top = $this->TOC_margin_bottom = $this->TOC_margin_header = $this->TOC_margin_footer = '';
|
||||
if (isset($attr['TOC-MARGIN-RIGHT'])) { $this->TOC_margin_right = $this->mpdf->ConvertSize($attr['TOC-MARGIN-RIGHT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-LEFT'])) { $this->TOC_margin_left = $this->mpdf->ConvertSize($attr['TOC-MARGIN-LEFT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-TOP'])) { $this->TOC_margin_top = $this->mpdf->ConvertSize($attr['TOC-MARGIN-TOP'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-BOTTOM'])) { $this->TOC_margin_bottom = $this->mpdf->ConvertSize($attr['TOC-MARGIN-BOTTOM'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-HEADER'])) { $this->TOC_margin_header = $this->mpdf->ConvertSize($attr['TOC-MARGIN-HEADER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-FOOTER'])) { $this->TOC_margin_footer = $this->mpdf->ConvertSize($attr['TOC-MARGIN-FOOTER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
$this->TOC_odd_header_name = $this->TOC_even_header_name = $this->TOC_odd_footer_name = $this->TOC_even_footer_name = '';
|
||||
if (isset($attr['TOC-ODD-HEADER-NAME']) && $attr['TOC-ODD-HEADER-NAME']) { $this->TOC_odd_header_name = $attr['TOC-ODD-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-NAME']) && $attr['TOC-EVEN-HEADER-NAME']) { $this->TOC_even_header_name = $attr['TOC-EVEN-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-NAME']) && $attr['TOC-ODD-FOOTER-NAME']) { $this->TOC_odd_footer_name = $attr['TOC-ODD-FOOTER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-NAME']) && $attr['TOC-EVEN-FOOTER-NAME']) { $this->TOC_even_footer_name = $attr['TOC-EVEN-FOOTER-NAME']; }
|
||||
$this->TOC_odd_header_value = $this->TOC_even_header_value = $this->TOC_odd_footer_value = $this->TOC_even_footer_value = 0;
|
||||
if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='ON')) { $this->TOC_odd_header_value = 1; }
|
||||
else if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='OFF')) { $this->TOC_odd_header_value = -1; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='ON')) { $this->TOC_even_header_value = 1; }
|
||||
else if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='OFF')) { $this->TOC_even_header_value = -1; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='ON')) { $this->TOC_odd_footer_value = 1; }
|
||||
else if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='OFF')) { $this->TOC_odd_footer_value = -1; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='ON')) { $this->TOC_even_footer_value = 1; }
|
||||
else if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='OFF')) { $this->TOC_even_footer_value = -1; }
|
||||
if (isset($attr['TOC-PAGE-SELECTOR']) && $attr['TOC-PAGE-SELECTOR']) { $this->TOC_page_selector = $attr['TOC-PAGE-SELECTOR']; }
|
||||
else { $this->TOC_page_selector = ''; }
|
||||
if (isset($attr['TOC-SHEET-SIZE']) && $attr['TOC-SHEET-SIZE']) { $this->TOCsheetsize = $attr['TOC-SHEET-SIZE']; } else { $this->TOCsheetsize = ''; }
|
||||
|
||||
|
||||
if (isset($attr['TOC-PREHTML']) && $attr['TOC-PREHTML']) { $this->TOCpreHTML = htmlspecialchars_decode($attr['TOC-PREHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-POSTHTML']) && $attr['TOC-POSTHTML']) { $this->TOCpostHTML = htmlspecialchars_decode($attr['TOC-POSTHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-BOOKMARKTEXT']) && $attr['TOC-BOOKMARKTEXT']) { $this->TOCbookmarkText = htmlspecialchars_decode($attr['TOC-BOOKMARKTEXT'],ENT_QUOTES); }
|
||||
}
|
||||
|
||||
if ($this->mpdf->y == $this->mpdf->tMargin && (!$this->mpdf->mirrorMargins ||($this->mpdf->mirrorMargins && $this->mpdf->page % 2==1))) {
|
||||
if ($toc_id) { $this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page; }
|
||||
else { $this->TOCmark = $this->mpdf->page; }
|
||||
// Don't add a page
|
||||
if ($this->mpdf->page==1 && count($this->mpdf->PageNumSubstitutions)==0) {
|
||||
$resetpagenum = '';
|
||||
$pagenumstyle = '';
|
||||
$suppress = '';
|
||||
if (isset($attr['RESETPAGENUM'])) { $resetpagenum = $attr['RESETPAGENUM']; }
|
||||
if (isset($attr['PAGENUMSTYLE'])) { $pagenumstyle = $attr['PAGENUMSTYLE']; }
|
||||
if (isset($attr['SUPPRESS'])) { $suppress = $attr['SUPPRESS']; }
|
||||
if (!$suppress) { $suppress = 'off'; }
|
||||
if (!$resetpagenum) { $resetpagenum= 1; }
|
||||
$this->mpdf->PageNumSubstitutions[] = array('from'=>1, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=> $suppress);
|
||||
}
|
||||
return array(true, $toc_id);
|
||||
}
|
||||
// No break - continues as PAGEBREAK...
|
||||
return array(false, $toc_id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
2373
metadata/include/MPDF54/classes/ttfontsuni.php
Normal file
236
metadata/include/MPDF54/classes/wmf.php
Normal file
@ -0,0 +1,236 @@
|
||||
<?php
|
||||
|
||||
class wmf {
|
||||
|
||||
var $mpdf = null;
|
||||
var $gdiObjectArray;
|
||||
|
||||
function wmf(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function _getWMFimage($data) {
|
||||
$k = _MPDFK;
|
||||
|
||||
$this->gdiObjectArray = array();
|
||||
$a=unpack('stest',"\1\0");
|
||||
if ($a['test']!=1)
|
||||
return array(0, 'Error parsing WMF image - Big-endian architecture not supported');
|
||||
// check for Aldus placeable metafile header
|
||||
$key = unpack('Lmagic', substr($data, 0, 4));
|
||||
$p = 18; // WMF header
|
||||
if ($key['magic'] == (int)0x9AC6CDD7) { $p +=22; } // Aldus header
|
||||
// define some state variables
|
||||
$wo=null; // window origin
|
||||
$we=null; // window extent
|
||||
$polyFillMode = 0;
|
||||
$nullPen = false;
|
||||
$nullBrush = false;
|
||||
$endRecord = false;
|
||||
$wmfdata = '';
|
||||
while ($p < strlen($data) && !$endRecord) {
|
||||
$recordInfo = unpack('Lsize/Sfunc', substr($data, $p, 6)); $p += 6;
|
||||
// size of record given in WORDs (= 2 bytes)
|
||||
$size = $recordInfo['size'];
|
||||
// func is number of GDI function
|
||||
$func = $recordInfo['func'];
|
||||
if ($size > 3) {
|
||||
$parms = substr($data, $p, 2*($size-3)); $p += 2*($size-3);
|
||||
}
|
||||
switch ($func) {
|
||||
case 0x020b: // SetWindowOrg
|
||||
// do not allow window origin to be changed
|
||||
// after drawing has begun
|
||||
if (!$wmfdata)
|
||||
$wo = array_reverse(unpack('s2', $parms));
|
||||
break;
|
||||
case 0x020c: // SetWindowExt
|
||||
// do not allow window extent to be changed
|
||||
// after drawing has begun
|
||||
if (!$wmfdata)
|
||||
$we = array_reverse(unpack('s2', $parms));
|
||||
break;
|
||||
case 0x02fc: // CreateBrushIndirect
|
||||
$brush = unpack('sstyle/Cr/Cg/Cb/Ca/Shatch', $parms);
|
||||
$brush['type'] = 'B';
|
||||
$this->_AddGDIObject($brush);
|
||||
break;
|
||||
case 0x02fa: // CreatePenIndirect
|
||||
$pen = unpack('Sstyle/swidth/sdummy/Cr/Cg/Cb/Ca', $parms);
|
||||
// convert width from twips to user unit
|
||||
$pen['width'] /= (20 * $k);
|
||||
$pen['type'] = 'P';
|
||||
$this->_AddGDIObject($pen);
|
||||
break;
|
||||
|
||||
// MUST create other GDI objects even if we don't handle them
|
||||
case 0x06fe: // CreateBitmap
|
||||
case 0x02fd: // CreateBitmapIndirect
|
||||
case 0x00f8: // CreateBrush
|
||||
case 0x02fb: // CreateFontIndirect
|
||||
case 0x00f7: // CreatePalette
|
||||
case 0x01f9: // CreatePatternBrush
|
||||
case 0x06ff: // CreateRegion
|
||||
case 0x0142: // DibCreatePatternBrush
|
||||
$dummyObject = array('type'=>'D');
|
||||
$this->_AddGDIObject($dummyObject);
|
||||
break;
|
||||
case 0x0106: // SetPolyFillMode
|
||||
$polyFillMode = unpack('smode', $parms);
|
||||
$polyFillMode = $polyFillMode['mode'];
|
||||
break;
|
||||
case 0x01f0: // DeleteObject
|
||||
$idx = unpack('Sidx', $parms);
|
||||
$idx = $idx['idx'];
|
||||
$this->_DeleteGDIObject($idx);
|
||||
break;
|
||||
case 0x012d: // SelectObject
|
||||
$idx = unpack('Sidx', $parms);
|
||||
$idx = $idx['idx'];
|
||||
$obj = $this->_GetGDIObject($idx);
|
||||
switch ($obj['type']) {
|
||||
case 'B':
|
||||
$nullBrush = false;
|
||||
if ($obj['style'] == 1) { $nullBrush = true; }
|
||||
else {
|
||||
$wmfdata .= $this->mpdf->SetFColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n";
|
||||
}
|
||||
break;
|
||||
case 'P':
|
||||
$nullPen = false;
|
||||
$dashArray = array();
|
||||
// dash parameters are custom
|
||||
switch ($obj['style']) {
|
||||
case 0: // PS_SOLID
|
||||
break;
|
||||
case 1: // PS_DASH
|
||||
$dashArray = array(3,1);
|
||||
break;
|
||||
case 2: // PS_DOT
|
||||
$dashArray = array(0.5,0.5);
|
||||
break;
|
||||
case 3: // PS_DASHDOT
|
||||
$dashArray = array(2,1,0.5,1);
|
||||
break;
|
||||
case 4: // PS_DASHDOTDOT
|
||||
$dashArray = array(2,1,0.5,1,0.5,1);
|
||||
break;
|
||||
case 5: // PS_NULL
|
||||
$nullPen = true;
|
||||
break;
|
||||
}
|
||||
if (!$nullPen) {
|
||||
$wmfdata .= $this->mpdf->SetDColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n";
|
||||
$wmfdata .= sprintf("%.3F w\n",$obj['width']*$k);
|
||||
}
|
||||
if (!empty($dashArray)) {
|
||||
$s = '[';
|
||||
for ($i=0; $i<count($dashArray);$i++) {
|
||||
$s .= $dashArray[$i] * $k;
|
||||
if ($i != count($dashArray)-1) { $s .= ' '; }
|
||||
}
|
||||
$s .= '] 0 d';
|
||||
$wmfdata .= $s."\n";
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x0325: // Polyline
|
||||
case 0x0324: // Polygon
|
||||
$coords = unpack('s'.($size-3), $parms);
|
||||
$numpoints = $coords[1];
|
||||
for ($i = $numpoints; $i > 0; $i--) {
|
||||
$px = $coords[2*$i];
|
||||
$py = $coords[2*$i+1];
|
||||
|
||||
if ($i < $numpoints) { $wmfdata .= $this->_LineTo($px, $py); }
|
||||
else { $wmfdata .= $this->_MoveTo($px, $py); }
|
||||
}
|
||||
if ($func == 0x0325) { $op = 's'; }
|
||||
else if ($func == 0x0324) {
|
||||
if ($nullPen) {
|
||||
if ($nullBrush) { $op = 'n'; } // no op
|
||||
else { $op = 'f'; } // fill
|
||||
}
|
||||
else {
|
||||
if ($nullBrush) { $op = 's'; } // stroke
|
||||
else { $op = 'b'; } // stroke and fill
|
||||
}
|
||||
if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule
|
||||
}
|
||||
$wmfdata .= $op."\n";
|
||||
break;
|
||||
case 0x0538: // PolyPolygon
|
||||
$coords = unpack('s'.($size-3), $parms);
|
||||
$numpolygons = $coords[1];
|
||||
$adjustment = $numpolygons;
|
||||
for ($j = 1; $j <= $numpolygons; $j++) {
|
||||
$numpoints = $coords[$j + 1];
|
||||
for ($i = $numpoints; $i > 0; $i--) {
|
||||
$px = $coords[2*$i + $adjustment];
|
||||
$py = $coords[2*$i+1 + $adjustment];
|
||||
if ($i == $numpoints) { $wmfdata .= $this->_MoveTo($px, $py); }
|
||||
else { $wmfdata .= $this->_LineTo($px, $py); }
|
||||
}
|
||||
$adjustment += $numpoints * 2;
|
||||
}
|
||||
|
||||
if ($nullPen) {
|
||||
if ($nullBrush) { $op = 'n'; } // no op
|
||||
else { $op = 'f'; } // fill
|
||||
}
|
||||
else {
|
||||
if ($nullBrush) { $op = 's'; } // stroke
|
||||
else { $op = 'b'; } // stroke and fill
|
||||
}
|
||||
if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule
|
||||
$wmfdata .= $op."\n";
|
||||
break;
|
||||
case 0x0000:
|
||||
$endRecord = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return array(1,$wmfdata,$wo,$we);
|
||||
}
|
||||
|
||||
|
||||
function _MoveTo($x, $y) {
|
||||
return "$x $y m\n";
|
||||
}
|
||||
|
||||
// a line must have been started using _MoveTo() first
|
||||
function _LineTo($x, $y) {
|
||||
return "$x $y l\n";
|
||||
}
|
||||
|
||||
function _AddGDIObject($obj) {
|
||||
// find next available slot
|
||||
$idx = 0;
|
||||
if (!empty($this->gdiObjectArray)) {
|
||||
$empty = false;
|
||||
$i = 0;
|
||||
while (!$empty) {
|
||||
$empty = !isset($this->gdiObjectArray[$i]);
|
||||
$i++;
|
||||
}
|
||||
$idx = $i-1;
|
||||
}
|
||||
$this->gdiObjectArray[$idx] = $obj;
|
||||
}
|
||||
|
||||
function _GetGDIObject($idx) {
|
||||
return $this->gdiObjectArray[$idx];
|
||||
}
|
||||
|
||||
function _DeleteGDIObject($idx) {
|
||||
unset($this->gdiObjectArray[$idx]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
172
metadata/include/MPDF54/compress.php
Normal file
@ -0,0 +1,172 @@
|
||||
<?php
|
||||
|
||||
$excl = array( 'HTML-CSS', 'DIRECTW', 'TABLES', 'LISTS', 'IMAGES-CORE',
|
||||
'IMAGES-BMP', 'IMAGES-WMF', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'COLUMNS', 'TOC', 'INDEX', 'BOOKMARKS', 'BARCODES', 'FORMS', 'WATERMARK', 'CJK-FONTS', 'RTL', 'INDIC', 'ANNOTATIONS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS', 'HYPHENATION', 'ENCRYPTION', 'IMPORTS', 'PROGRESS-BAR');
|
||||
|
||||
|
||||
// *DIRECTW* = Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText
|
||||
// IMAGES-CORE = [PNG, GIF, and JPG] NB background-images and watermark images
|
||||
|
||||
// Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS'
|
||||
|
||||
// Text is marked in mpdf_source.php with e.g. :
|
||||
/*-- TABLES-ADVANCED-BORDERS --*/
|
||||
/*-- END TABLES-ADVANCED-BORDERS --*/
|
||||
// *TABLES-ADVANCED-BORDERS*
|
||||
|
||||
|
||||
if (!isset($_POST['generate']) || $_POST['generate']!='generate') {
|
||||
|
||||
|
||||
if (!file_exists('mpdf_source.php')) {
|
||||
die("ERROR - Could not find mpdf_source.php file in current directory. Please rename mpdf.php as mpdf_source.php");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
echo '<html>
|
||||
<head>
|
||||
<script language=javascript>
|
||||
checked=false;
|
||||
function checkedAll (frm1) {
|
||||
var aa= document.getElementById("frm1");
|
||||
if (checked == false)
|
||||
{
|
||||
checked = true
|
||||
}
|
||||
else
|
||||
{
|
||||
checked = false
|
||||
}
|
||||
for (var i =0; i < aa.elements.length; i++)
|
||||
{
|
||||
aa.elements[i].checked = checked;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p><span style="color:red; font-weight: bold;">WARNING</span>: This utility will OVERWRITE mpdf.php file in the current directory.</p>
|
||||
<p>Select the functions you wish to INCLUDE in your mpdf.php program. When you click generate, a new mpdf.php file will be written to the current directory.</p>
|
||||
<div><b>Notes</b>
|
||||
<ul>
|
||||
<li>HTML-CSS is required for many of the other functions to work including: Tables, Lists, Backgrounds, Forms, Border-radius and all other CSS</li>
|
||||
<li>DIRECTW includes the functions to Write directly to the PDF file e.g. Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText</li>
|
||||
<li>You must include either HTML-CSS or DIRECTW</li>
|
||||
<li>JPG, PNG and JPG images are supported with IMAGES-CORE</li>
|
||||
<li>For WMF Images, you must include both IMAGES-CORE and IMAGES-WMF</li>
|
||||
<li>IMAGES-CORE are required for BACKGROUNDS (IMAGES) or WATERMARKS to work</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" name="checkall" onclick="checkedAll(frm1);"> <i>Select/Unselect All</i><br /><br />
|
||||
|
||||
<form id="frm1" action="compress.php" method="POST">
|
||||
';
|
||||
foreach($excl AS $k=>$ex) {
|
||||
echo '<input type="checkbox" value="1" name="inc['.$ex.']"';
|
||||
if ($k==0 || ($k > 1 && $k < 5)) {
|
||||
echo ' checked="checked"';
|
||||
}
|
||||
echo ' /> '.$ex.'<br />';
|
||||
}
|
||||
|
||||
echo '<br />
|
||||
<input type="submit" name="generate" value="generate" />
|
||||
</form>
|
||||
</body>
|
||||
</html>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$inc = $_POST['inc'];
|
||||
if (is_array($inc) && count($inc)>0 ) {
|
||||
foreach($inc AS $i=>$v) {
|
||||
$key = array_search($i, $excl);
|
||||
unset($excl[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!defined('PHP_VERSION_ID')) {
|
||||
$version = explode('.', PHP_VERSION);
|
||||
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
|
||||
}
|
||||
if (PHP_VERSION_ID < 50300) { $mqr = @get_magic_quotes_runtime(); }
|
||||
else { $mqr=0; }
|
||||
if ($mqr) { set_magic_quotes_runtime(0); }
|
||||
|
||||
$l = file('mpdf_source.php');
|
||||
if (!count($l)) { die("ERROR - Could not find mpdf_source.php file in current directory"); }
|
||||
$exclflags = array();
|
||||
$x = '';
|
||||
|
||||
// Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS'
|
||||
if ($excl[0]=='HTML-CSS') {
|
||||
$excl[] = 'TABLES';
|
||||
$excl[] = 'LISTS';
|
||||
$excl[] = 'TABLES-ADVANCED-BORDERS';
|
||||
$excl[] = 'HTMLHEADERS-FOOTERS';
|
||||
$excl[] = 'FORMS';
|
||||
$excl[] = 'BACKGROUNDS';
|
||||
$excl[] = 'CSS-FLOAT';
|
||||
$excl[] = 'CSS-IMAGE-FLOAT';
|
||||
$excl[] = 'CSS-POSITION';
|
||||
$excl[] = 'CSS-PAGE';
|
||||
$excl[] = 'BORDER-RADIUS';
|
||||
}
|
||||
$excl = array_unique($excl);
|
||||
|
||||
foreach($l AS $k=>$ln) {
|
||||
$exclude = false;
|
||||
// *XXXXX*
|
||||
preg_match_all("/\/\/ \*([A-Za-z\-]+)\*/", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
$exclude = true;
|
||||
}
|
||||
}
|
||||
/*-- XXXXX --*/
|
||||
preg_match_all("/\/\*-- ([A-Za-z\-]+) --\*\//", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
$exclflags[$mm] = true;
|
||||
}
|
||||
$exclude = true;
|
||||
}
|
||||
$exclflags = array_unique($exclflags);
|
||||
/*-- END XXXX --*/
|
||||
preg_match_all("/\/\*-- END ([A-Za-z\-]+) --\*\//", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
unset($exclflags[$mm]);
|
||||
}
|
||||
$exclude = true;
|
||||
}
|
||||
if (count($exclflags)==0 && !$exclude) {
|
||||
$x .= $ln;
|
||||
}
|
||||
}
|
||||
// mPDF 5.0
|
||||
if (function_exists('file_put_contents')) {
|
||||
$check = file_put_contents('mpdf.php', $x);
|
||||
}
|
||||
else {
|
||||
$f=fopen('mpdf.php', 'w');
|
||||
$check = fwrite($f, $x);
|
||||
fclose($f);
|
||||
}
|
||||
if (!$check) { die("ERROR - Could not write to mpdf.php file. Are permissions correctly set?"); }
|
||||
echo '<p><b>mPDF file generated successfully!</b></p>';
|
||||
echo '<div>mPDF file size '.number_format((strlen($x)/1024)).' kB</div>';
|
||||
|
||||
unset($l);
|
||||
unset($x);
|
||||
|
||||
include('mpdf.php');
|
||||
$mpdf = new mPDF();
|
||||
|
||||
echo '<div>Memory usage on loading mPDF class '.number_format((memory_get_usage(true)/(1024*1024)),2).' MB</div>';
|
||||
|
||||
exit;
|
||||
|
||||
?>
|
||||
548
metadata/include/MPDF54/config.php
Normal file
@ -0,0 +1,548 @@
|
||||
<?php
|
||||
|
||||
// mPDF 5.4
|
||||
// Using disk to cache table data can reduce memory usage dramatically, but at a cost of increased
|
||||
// executon time and disk access (read and write)
|
||||
$this->cacheTables = false;
|
||||
|
||||
// Set an optional array to specify appearance of Bookmarks (by level)
|
||||
// Default values are Black and normal style
|
||||
/*
|
||||
Example:
|
||||
$this->bookmarkStyles = array(
|
||||
0 => array('color'=> array(0,64,128), 'style'=>'B'),
|
||||
1 => array('color'=> array(128,0,0), 'style'=>''),
|
||||
2 => array('color'=> array(0,128,0), 'style'=>'I'),
|
||||
);
|
||||
*/
|
||||
$this->bookmarkStyles = array();
|
||||
|
||||
// ACTIVE FORMS
|
||||
$this->useActiveForms = false;
|
||||
|
||||
// When embedding full TTF font files, remakes the font file using only core tables
|
||||
// May improve function with some PostScript printers (GhostScript/GSView)
|
||||
// Does not work with TTC font collections
|
||||
// Slightly smaller file; increased processing time
|
||||
$this->repackageTTF = false;
|
||||
|
||||
// Set maximum size of TTF font file to allow non-subsets - in kB
|
||||
// Used to avoid e.g. Arial Unicode MS (perhaps used for substitutions) to ever be fully embedded
|
||||
// NB Free serif is 1.5MB, most files are <= 600kB (most 200-400KB)
|
||||
$this->maxTTFFilesize = 2000;
|
||||
|
||||
// this value determines whether to subset or not
|
||||
// 0 - 100 = percent characters
|
||||
// i.e. if ==40, mPDF will embed whole font if >40% characters in that font
|
||||
// or embed subset if <40% characters
|
||||
// 0 will force whole file to be embedded (NO subsetting)
|
||||
// 100 will force always to subset
|
||||
// This value is overridden if you set new mPDF('s)
|
||||
// and/or Can set at runtime
|
||||
$this->percentSubset = 30;
|
||||
|
||||
$this->useAdobeCJK = false; // Uses Adobe CJK fonts for CJK languages
|
||||
// default TRUE; only set false if you have defined some available fonts that support CJK
|
||||
// If true this will not stop use of other CJK fonts if specified by font-family:
|
||||
// and vice versa i.e. only dictates behaviour when specified by lang="" incl. AutoFont()
|
||||
|
||||
|
||||
// Small Caps
|
||||
$this->smCapsScale = 0.75; // Factor of 1 to scale capital letters
|
||||
$this->smCapsStretch = 110; // % to stretch small caps horizontally (i.e. 100 = no stretch)
|
||||
|
||||
|
||||
// PAGING
|
||||
$this->mirrorMargins = 0;
|
||||
$this->restoreBlockPagebreaks = false;
|
||||
$this->forcePortraitMargins = false;
|
||||
$this->displayDefaultOrientation = false;
|
||||
$this->printers_info = false; // Adds date and page info for printer when using @page and "marks:crop;"
|
||||
$this->bleedMargin = 5; // mPDF 5.0.047
|
||||
$this->crossMarkMargin = 5; // Distance of cross mark from margin in mm
|
||||
$this->cropMarkMargin = 8; // Distance of crop mark from margin in mm
|
||||
$this->cropMarkLength = 18; // Default length in mm of crop line
|
||||
$this->nonPrintMargin = 8; // Non-printable border at edge of paper sheet in mm
|
||||
|
||||
|
||||
// PAGE NUMBERING
|
||||
// Page numbering - Conditional Text
|
||||
$this->pagenumPrefix;
|
||||
$this->pagenumSuffix;
|
||||
$this->nbpgPrefix;
|
||||
$this->nbpgSuffix;
|
||||
|
||||
|
||||
// FONTS LANGUAGES & CHARACTER SETS
|
||||
// Allows automatic character set conversion if "charset=xxx" detected in html header (WriteHTML() )
|
||||
$this->allow_charset_conversion = true;
|
||||
$this->biDirectional=false; // automatically determine BIDI text in LTR page
|
||||
$this->autoFontGroupSize = 2; // 1: individual words are spanned; 2: words+; 3: as big chunks as possible.
|
||||
$this->useLang = true; // Default changed in mPDF 4.0
|
||||
|
||||
$this->useSubstitutions = false; // Substitute missing characters in UTF-8(multibyte) documents - from other fonts
|
||||
$this->falseBoldWeight = 5; // Weight for bold text when using an artificial (outline) bold; value 0 (off) - 10 (rec. max)
|
||||
|
||||
// CONFIGURATION
|
||||
$this->allow_output_buffering = false;
|
||||
|
||||
$this->enableImports = false; // Adding mPDFI functions
|
||||
|
||||
$this->collapseBlockMargins = true; // Allows top and bottom margins to collapse between block elements
|
||||
$this->progressBar = 0; // Shows progress-bars whilst generating file 0 off, 1 simple, 2 advanced
|
||||
$this->progbar_heading = 'mPDF file progress';
|
||||
$this->progbar_altHTML = ''; // Should include <html> and <body> but NOT end tags
|
||||
// Can incude <head> and link to stylesheet etc.
|
||||
// e.g. '<html><body><p><img src="loading.gif" /> Creating PDF file. Please wait...</p>';
|
||||
|
||||
$this->dpi = 96; // To interpret "px" pixel values in HTML/CSS (see img_dpi below)
|
||||
|
||||
// Automatically correct for tags where HTML specifies optional end tags e.g. P,LI,DD,TD
|
||||
// If you are confident input html is valid XHTML, turning this off may make it more reliable(?)
|
||||
$this->allow_html_optional_endtags = true;
|
||||
$this->ignore_invalid_utf8 = false;
|
||||
$this->text_input_as_HTML = false; // Converts all entities in Text inputs to UTF-8 before encoding
|
||||
$this->useGraphs = false;
|
||||
|
||||
|
||||
|
||||
// COLORSPACE
|
||||
// 1 - allow GRAYSCALE only [convert CMYK/RGB->gray]
|
||||
// 2 - allow RGB / SPOT COLOR / Grayscale [convert CMYK->RGB]
|
||||
// 3 - allow CMYK / SPOT COLOR / Grayscale [convert RGB->CMYK]
|
||||
$this->restrictColorSpace = 0;
|
||||
|
||||
// PDFX/1-a Compliant files
|
||||
$this->PDFX = false; // true=Forces compliance with PDFX-1a spec
|
||||
// Cannot be used with $this->restrictColorSpace (i.e. no RGB)
|
||||
$this->PDFXauto = false; // Overrides warnings making changes when possible to force PDFX1-a compliance
|
||||
|
||||
|
||||
// PDFA1-b Compliant files
|
||||
$this->PDFA = false; // true=Forces compliance with PDFA-1b spec
|
||||
// Can use with $this->restrictColorSpace=3 (for a CMYK file)
|
||||
// Any other settings, uses RGB profile
|
||||
$this->PDFAauto = false; // Overrides warnings making changes when possible to force PDFA1-b compliance
|
||||
|
||||
$this->ICCProfile = ''; // Colour profile OutputIntent
|
||||
// sRGB_IEC61966-2-1 (=default if blank and PDFA), or other added .icc profile
|
||||
// Must be CMYK for PDFX, or appropriate type for PDFA(RGB or CMYK)
|
||||
|
||||
|
||||
// When writing a block element with position:fixed and overflow:auto, mPDF scales it down to fit in the space
|
||||
// by repeatedly rewriting it and making adjustments. These values give the adjustments used, depending how far out
|
||||
// the previous guess was. The lower the number, the quicker it will finish, but the less accurate the fit may be.
|
||||
// FPR1 is for coarse adjustments, and FPR4 for fine adjustments when it is getting closer.
|
||||
$this->incrementFPR1 = 10; // i.e. will alter by 1/[10]th of width and try again until within closer limits
|
||||
$this->incrementFPR2 = 20;
|
||||
$this->incrementFPR3 = 30;
|
||||
$this->incrementFPR4 = 50; // i.e. will alter by 1/[50]th of width and try again when it nearly fits
|
||||
|
||||
|
||||
// DEBUGGING & DEVELOPERS
|
||||
$this->showStats = false;
|
||||
$this->debug = false;
|
||||
$this->debugfonts = false; // Checks and reports on errors when parsing TTF files - adds significantly to processing time
|
||||
$this->showImageErrors = false;
|
||||
$this->table_error_report = false; // Die and report error if table is too wide to contain whole words
|
||||
$this->table_error_report_param = ''; // Parameter which can be passed to show in error report i.e. chapter number being processed//
|
||||
|
||||
|
||||
// ANNOTATIONS
|
||||
$this->title2annots = false;
|
||||
$this->annotSize = 0.5; // default mm for Adobe annotations - nominal
|
||||
$this->annotMargin; // default position for Annotations
|
||||
$this->annotOpacity = 0.5; // default opacity for Annotations
|
||||
|
||||
// BOOKMARKS
|
||||
$this->anchor2Bookmark = 0; // makes <a name=""> into a bookmark as well as internal link target; 1 = just name; 2 = name (p.34)
|
||||
|
||||
// CSS & STYLES
|
||||
$this->CSSselectMedia='print'; // screen, print, or any other CSS @media type (not "all")
|
||||
|
||||
|
||||
// PAGE HEADERS & FOOTERS
|
||||
$this->forcePortraitHeaders = false;
|
||||
// Values used if simple FOOTER/HEADER given i.e. not array
|
||||
$this->defaultheaderfontsize = 8; // pt
|
||||
$this->defaultheaderfontstyle = 'BI'; // '', or 'B' or 'I' or 'BI'
|
||||
$this->defaultheaderline = 1; // 1 or 0 - line under the header
|
||||
$this->defaultfooterfontsize = 8; // pt
|
||||
$this->defaultfooterfontstyle = 'BI'; // '', or 'B' or 'I' or 'BI'
|
||||
$this->defaultfooterline = 1; // 1 or 0 - line over the footer
|
||||
$this->header_line_spacing = 0.25; // spacing between bottom of header and line (if present) - function of fontsize
|
||||
$this->footer_line_spacing = 0.25; // spacing between bottom of header and line (if present) - function of fontsize
|
||||
// If 'pad' margin-top sets fixed distance in mm (padding) between bottom of header and top of text.
|
||||
// If 'stretch' margin-top sets a minimum distance in mm between top of page and top of text, which expands if header is too large to fit.
|
||||
$this->setAutoTopMargin = false;
|
||||
$this->setAutoBottomMargin = false;
|
||||
$this->autoMarginPadding = 2; // distance in mm used as padding if 'stretch' mode is used
|
||||
|
||||
|
||||
|
||||
// TABLES
|
||||
$this->simpleTables = false; // Forces all cells to have same border, background etc. Improves performance
|
||||
$this->packTableData = false; // Reduce memory usage processing tables (but with increased processing time)
|
||||
$this->ignore_table_percents = false;
|
||||
$this->ignore_table_widths = false;
|
||||
$this->keep_table_proportions = false; // If table width set > page width, force resizing but keep relative sizes
|
||||
// Also forces respect of cell widths set by %
|
||||
$this->shrink_tables_to_fit = 1.4; // automatically reduce fontsize in table if words would have to split ( not in CJK)
|
||||
// 0 or false to disable; value (if set) gives maximum factor to reduce fontsize
|
||||
|
||||
$this->tableMinSizePriority = false; // If page-break-inside:avoid but cannot fit on full page without
|
||||
// exceeding autosize; setting this value to true will force respsect for
|
||||
// autosize, and disable the page-break-inside:avoid
|
||||
|
||||
$this->use_kwt = false;
|
||||
$this->iterationCounter = false; // Set to TRUE to use table Head iteration counter
|
||||
|
||||
// IMAGES
|
||||
$this->img_dpi = 96; // Default dpi to output images if size not defined
|
||||
// See also above "dpi"
|
||||
|
||||
// TEXT SPACING & JUSTIFICATION
|
||||
$this->useKerning = false; // true to use kerning
|
||||
$this->justifyB4br = false; // In justified text, <BR> does not cause the preceding text to be justified in browsers
|
||||
// Change to true to force justification (as in MS Word)
|
||||
|
||||
$this->tabSpaces = 8; // Number of spaces to replace for a TAB in <pre> sections
|
||||
// Notepad uses 6, HTML specification recommends 8
|
||||
$this->jSWord = 0.4; // Proportion (/1) of space (when justifying margins) to allocate to Word vs. Character
|
||||
$this->jSmaxChar = 2; // Maximum spacing to allocate to character spacing. (0 = no maximum)
|
||||
|
||||
$this->jSmaxCharLast = 1; // Maximum character spacing allowed (carried over) when finishing a last line
|
||||
$this->jSmaxWordLast = 2; // Maximum word spacing allowed (carried over) when finishing a last line
|
||||
$this->orphansAllowed = 5; // No of SUP or SUB characters to include on line to avoid leaving e.g. end of line//<sup>32</sup>
|
||||
$this->normalLineheight = 1.33; // Value used for line-height when CSS specified as 'normal' (default)
|
||||
|
||||
|
||||
// CJK Line-breaking
|
||||
$this->allowCJKorphans = true; // FALSE=always wrap to next line; TRUE=squeeze or overflow
|
||||
$this->allowCJKoverflow = false; // FALSE=squeeze; TRUE=overflow (only some characters, and disabled in tables)
|
||||
|
||||
|
||||
// HYPHENATION
|
||||
$this->hyphenate = false;
|
||||
$this->hyphenateTables = false;
|
||||
$this->SHYlang = "en"; // Should be one of: 'en','de','es','fi','fr','it','nl','pl','ru','sv'
|
||||
$this->SHYleftmin = 2;
|
||||
$this->SHYrightmin = 2;
|
||||
$this->SHYcharmin = 2;
|
||||
$this->SHYcharmax = 10;
|
||||
|
||||
// COLUMNS
|
||||
$this->keepColumns = false; // Set to go to the second column only when the first is full of text etc.
|
||||
$this->max_colH_correction = 1.15; // Maximum ratio to adjust column height when justifying - too large a value can give ugly results
|
||||
$this->ColGap=5;
|
||||
|
||||
|
||||
// LISTS
|
||||
$this->list_align_style = 'R'; // Determines alignment of numbers in numbered lists
|
||||
$this->list_indent_first_level = 0; // 1/0 yex/no to indent first level of list
|
||||
$this->list_number_suffix = '.'; // Content to follow a numbered list marker e.g. '.' gives 1. or IV.; ')' gives 1) or a)
|
||||
|
||||
|
||||
// WATERMARKS
|
||||
$this->watermarkImgBehind = false;
|
||||
$this->showWatermarkText = 0;
|
||||
$this->showWatermarkImage = 0;
|
||||
$this->watermarkText = '';
|
||||
$this->watermarkImage = '';
|
||||
$this->watermark_font = '';
|
||||
$this->watermarkTextAlpha = 0.2;
|
||||
$this->watermarkImageAlpha = 0.2;
|
||||
$this->watermarkImgAlphaBlend = 'Normal';
|
||||
// Accepts any PDF spec. value: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn,
|
||||
// HardLight, SoftLight, Difference, Exclusion
|
||||
// "Multiply" works well for watermark image on top
|
||||
|
||||
// BORDERS
|
||||
$this->autoPadding = false; // Automatically increases padding in block elements when border-radius set - if required
|
||||
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
||||
// Default values if no style sheet offered (cf. http://www.w3.org/TR/CSS21/sample.html)
|
||||
$this->defaultCSS = array(
|
||||
'BODY' => array(
|
||||
'FONT-FAMILY' => 'serif',
|
||||
'FONT-SIZE' => '11pt',
|
||||
'TEXT-INDENT' => '0pt',
|
||||
'LINE-HEIGHT' => 'normal',
|
||||
'MARGIN-COLLAPSE' => 'collapse', /* Custom property to collapse top/bottom margins at top/bottom of page - ignored in tables/lists */
|
||||
),
|
||||
'P' => array(
|
||||
'MARGIN' => '1.12em 0',
|
||||
),
|
||||
'H1' => array(
|
||||
'FONT-SIZE' => '2em',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '0.67em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'H2' => array(
|
||||
'FONT-SIZE' => '1.5em',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '0.75em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'H3' => array(
|
||||
'FONT-SIZE' => '1.17em',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '0.83em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'H4' => array(
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '1.12em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'H5' => array(
|
||||
'FONT-SIZE' => '0.83em',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '1.5em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'H6' => array(
|
||||
'FONT-SIZE' => '0.75em',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'MARGIN' => '1.67em 0',
|
||||
'PAGE-BREAK-AFTER' => 'avoid',
|
||||
),
|
||||
'HR' => array(
|
||||
'COLOR' => '#888888',
|
||||
'TEXT-ALIGN' => 'center',
|
||||
'WIDTH' => '100%',
|
||||
'HEIGHT' => '0.2mm',
|
||||
'MARGIN-TOP' => '0.83em',
|
||||
'MARGIN-BOTTOM' => '0.83em',
|
||||
),
|
||||
'PRE' => array(
|
||||
'MARGIN' => '0.83em 0',
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
),
|
||||
'S' => array(
|
||||
'TEXT-DECORATION' => 'line-through',
|
||||
),
|
||||
'STRIKE' => array(
|
||||
'TEXT-DECORATION' => 'line-through',
|
||||
),
|
||||
'DEL' => array(
|
||||
'TEXT-DECORATION' => 'line-through',
|
||||
),
|
||||
'SUB' => array(
|
||||
'VERTICAL-ALIGN' => 'sub',
|
||||
'FONT-SIZE' => '55%', /* Recommended 0.83em */
|
||||
),
|
||||
'SUP' => array(
|
||||
'VERTICAL-ALIGN' => 'super',
|
||||
'FONT-SIZE' => '55%', /* Recommended 0.83em */
|
||||
),
|
||||
'U' => array(
|
||||
'TEXT-DECORATION' => 'underline',
|
||||
),
|
||||
'INS' => array(
|
||||
'TEXT-DECORATION' => 'underline',
|
||||
),
|
||||
'B' => array(
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
),
|
||||
'STRONG' => array(
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
),
|
||||
'I' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'CITE' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'Q' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'EM' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'VAR' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'SAMP' => array(
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
),
|
||||
'CODE' => array(
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
),
|
||||
'KBD' => array(
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
),
|
||||
'TT' => array(
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
),
|
||||
'SMALL' => array(
|
||||
'FONT-SIZE' => '83%',
|
||||
),
|
||||
'BIG' => array(
|
||||
'FONT-SIZE' => '117%',
|
||||
),
|
||||
'ACRONYM' => array(
|
||||
'FONT-SIZE' => '77%',
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
),
|
||||
'ADDRESS' => array(
|
||||
'FONT-STYLE' => 'italic',
|
||||
),
|
||||
'BLOCKQUOTE' => array(
|
||||
'MARGIN-LEFT' => '40px',
|
||||
'MARGIN-RIGHT' => '40px',
|
||||
'MARGIN-TOP' => '1.12em',
|
||||
'MARGIN-BOTTOM' => '1.12em',
|
||||
),
|
||||
'A' => array(
|
||||
'COLOR' => '#0000FF',
|
||||
'TEXT-DECORATION' => 'underline',
|
||||
),
|
||||
'UL' => array(
|
||||
'MARGIN' => '0.83em 0', /* only applied to top-level of nested lists */
|
||||
'TEXT-INDENT' => '1.3em', /* Custom effect - list indent */
|
||||
),
|
||||
'OL' => array(
|
||||
'MARGIN' => '0.83em 0', /* only applied to top-level of nested lists */
|
||||
'TEXT-INDENT' => '1.3em', /* Custom effect - list indent */
|
||||
),
|
||||
'DL' => array(
|
||||
'MARGIN' => '1.67em 0',
|
||||
),
|
||||
'DT' => array(
|
||||
),
|
||||
'DD' => array(
|
||||
'PADDING-LEFT' => '40px',
|
||||
),
|
||||
'TABLE' => array(
|
||||
'MARGIN' => '0',
|
||||
'BORDER-COLLAPSE' => 'separate',
|
||||
'BORDER-SPACING' => '2px',
|
||||
'EMPTY-CELLS' => 'show',
|
||||
'LINE-HEIGHT' => '1.2',
|
||||
'VERTICAL-ALIGN' => 'middle',
|
||||
),
|
||||
'THEAD' => array(
|
||||
),
|
||||
'TFOOT' => array(
|
||||
),
|
||||
'TH' => array(
|
||||
'FONT-WEIGHT' => 'bold',
|
||||
'TEXT-ALIGN' => 'center',
|
||||
'PADDING-LEFT' => '0.1em',
|
||||
'PADDING-RIGHT' => '0.1em',
|
||||
'PADDING-TOP' => '0.1em',
|
||||
'PADDING-BOTTOM' => '0.1em',
|
||||
),
|
||||
'TD' => array(
|
||||
'PADDING-LEFT' => '0.1em',
|
||||
'PADDING-RIGHT' => '0.1em',
|
||||
'PADDING-TOP' => '0.1em',
|
||||
'PADDING-BOTTOM' => '0.1em',
|
||||
),
|
||||
'CAPTION' => array(
|
||||
'TEXT-ALIGN' => 'center', /* Added mPDF 5.4 */
|
||||
),
|
||||
'IMG' => array(
|
||||
'MARGIN' => '0',
|
||||
'VERTICAL-ALIGN' => 'baseline',
|
||||
),
|
||||
'INPUT' => array(
|
||||
'FONT-FAMILY' => 'sans-serif',
|
||||
'VERTICAL-ALIGN' => 'middle',
|
||||
'FONT-SIZE' => '0.9em',
|
||||
),
|
||||
'SELECT' => array(
|
||||
'FONT-FAMILY' => 'sans-serif',
|
||||
'FONT-SIZE' => '0.9em',
|
||||
'VERTICAL-ALIGN' => 'middle',
|
||||
),
|
||||
'TEXTAREA' => array(
|
||||
'FONT-FAMILY' => 'monospace',
|
||||
'FONT-SIZE' => '0.9em',
|
||||
'VERTICAL-ALIGN' => 'text-bottom',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// VALUES ONLY LIKELY TO BE CHANGED BY DEVELOPERS
|
||||
//////////////////////////////////////////////////
|
||||
$this->pdf_version = '1.4';
|
||||
|
||||
// Hyphenation
|
||||
$this->SHYlanguages = array('en','de','es','fi','fr','it','nl','pl','ru','sv'); // existing defined patterns
|
||||
|
||||
$this->default_lineheight_correction=1.2; // Value 1 sets lineheight=fontsize height;
|
||||
// Value used if line-height not set by CSS (usuallly is)
|
||||
|
||||
$this->fontsizes = array('XX-SMALL'=>0.7, 'X-SMALL'=>0.77, 'SMALL'=>0.86, 'MEDIUM'=>1, 'LARGE'=>1.2, 'X-LARGE'=>1.5, 'XX-LARGE'=>2);
|
||||
|
||||
// CHARACTER PATTERN MATCHES TO DETECT LANGUAGES
|
||||
// pattern used to detect RTL characters -> force RTL
|
||||
$this->pregRTLchars = "\x{0590}-\x{06FF}\x{0700}-\x{083E}\x{FB00}-\x{FDFD}\x{FE70}-\x{FEFF}";
|
||||
// mPDF 5 Now includes Syriac, Thaana, N'Ko and Samaritan
|
||||
|
||||
// CJK Chars which require changing and are distinctive of specific charset
|
||||
$this->pregUHCchars = "\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}";
|
||||
$this->pregSJISchars = "\x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{3190}-\x{319F}\x{31F0}-\x{31FF}";
|
||||
|
||||
// Chars which distinguish CJK but not between different
|
||||
$this->pregCJKchars = "\x{1100}-\x{11FF}\x{2E80}-\x{A4CF}\x{A800}-\x{D7AF}\x{F900}-\x{FAFF}\x{FE30}-\x{FE6F}\x{FF00}-\x{FFEF}\x{20000}-\x{2FA1F}";
|
||||
|
||||
// For CJK Line-breaking
|
||||
//Leading characters - Not allowed at end of line
|
||||
$this->CJKleading = "\$\(\*\[\{\x{00a3}\x{00a5}\x{00ab}\x{00b7}\x{2018}\x{201c}\x{2035}\x{3005}\x{3007}\x{3008}\x{300a}\x{300c}\x{300e}\x{3010}\x{3014}\x{3016}\x{3018}\x{301d}\x{fe34}\x{fe57}\x{fe59}\x{fe5b}\x{ff04}\x{ff08}\x{ff0e}\x{ff3b}\x{ff5b}\x{ff5f}\x{ffe1}\x{ffe5}\x{ffe6}";
|
||||
// Following characters - Not allowed at start
|
||||
$this->CJKfollowing = "!%\),\.:;>\?\]\}\x{00a2}\x{00a8}\x{00b0}\x{00b7}\x{00bb}\x{02c7}\x{02c9}\x{2010}\x{2013}-\x{2016}\x{2019}\x{201d}-\x{201f}\x{2020}-\x{2022}\x{2025}\x{2027}\x{203a}\x{203c}\x{2047}-\x{2049}\x{2103}\x{2236}\x{2574}\x{3001}-\x{3003}\x{3005}\x{3006}\x{3009}\x{300b}\x{300d}\x{300f}\x{3011}\x{3015}\x{3017}\x{3019}\x{301c}\x{301e}\x{301f}\x{303b}\x{3041}\x{3043}\x{3045}\x{3047}\x{3049}\x{3063}\x{3083}\x{3085}\x{3087}\x{308e}\x{3095}\x{3096}\x{30a0}\x{30a1}\x{30a3}\x{30a5}\x{30a7}\x{30a9}\x{30c3}\x{30e3}\x{30e5}\x{30e7}\x{30ee}\x{30f5}\x{30f6}\x{30fb}-\x{30fe}\x{31f0}-\x{31ff}\x{fe30}-\x{fe33}\x{fe50}-\x{fe56}\x{fe58}\x{fe5a}\x{fe5c}\x{ff01}\x{ff02}\x{ff05}\x{ff07}\x{ff09}\x{ff0c}\x{ff0e}\x{ff1a}\x{ff1b}\x{ff1f}\x{ff3d}\x{ff40}\x{ff5c}-\x{ff5e}\x{ff60}\x{ff64}";
|
||||
// Characters which are allowed to overflow the right margin
|
||||
$this->CJKoverflow = "\.,\x{ff61}\x{ff64}\x{3001}\x{3002}\x{ff0c}\x{ff0e}";
|
||||
|
||||
|
||||
|
||||
// ASCII Chars which shouldn't break string
|
||||
// Use for very specific words
|
||||
$this->pregASCIIchars1 = "\x{0021}-\x{002E}\x{0030}-\x{003B}?"; // no [SPACE]
|
||||
// Use for words+
|
||||
$this->pregASCIIchars2 = "\x{0020}-\x{002E}\x{0030}-\x{003B}?"; // [SPACE] punctuation and 0-9
|
||||
// Use for chunks > words
|
||||
$this->pregASCIIchars3 = "\x{0000}-\x{002E}\x{0030}-\x{003B}\x{003F}-\x{007E}"; // all except <>
|
||||
// Vietnamese - specific
|
||||
$this->pregVIETchars = "\x{01A0}\x{01A1}\x{01AF}\x{01B0}\x{1EA0}-\x{1EF1}";
|
||||
// Vietnamese - Chars which shouldn't break string
|
||||
$this->pregVIETPluschars = "\x{0000}-\x{003B}\x{003F}-\x{00FF}\x{0300}-\x{036F}\x{0102}\x{0103}\x{0110}\x{0111}\x{0128}\x{0129}\x{0168}\x{0169}\x{1EF1}-\x{1EF9}"; // omits < >
|
||||
|
||||
// Arabic
|
||||
$this->pregARABICchars = "\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{FB50}-\x{FDFD}\x{FE70}-\x{FEFF}";
|
||||
// Characters of Urdu, Pashto, Sindhi (but NOT arabic or persian/farsi) [not covered by DejavuSans font]
|
||||
$this->pregNonARABICchars = "\x{0671}-\x{067D}\x{067F}-\x{0685}\x{0687}-\x{0697}\x{0699}-\x{06A8}\x{06AA}-\x{06AE}\x{06B0}-\x{06CB}\x{06CD}-\x{06D3}";
|
||||
|
||||
$this->pregHEBchars = "\x{0590}-\x{05FF}\x{FB00}-\x{FB49}"; // Hebrew
|
||||
|
||||
// INDIC
|
||||
$this->pregHIchars = "\x{0900}-\x{0963}\x{0966}-\x{097F}"; // Devanagari (Hindi) minus the common indic punctuation 0964,0965
|
||||
$this->pregBNchars = "\x{0980}-\x{09FF}"; // Bengali
|
||||
$this->pregPAchars = "\x{0A00}-\x{0A7F}"; // Gurmukhi (Punjabi)
|
||||
$this->pregGUchars = "\x{0A80}-\x{0AFF}"; // Gujarati
|
||||
$this->pregORchars = "\x{0B00}-\x{0B7F}"; // Oriya
|
||||
$this->pregTAchars = "\x{0B80}-\x{0BFF}"; // Tamil
|
||||
$this->pregTEchars = "\x{0C00}-\x{0C7F}"; // Telugu
|
||||
$this->pregKNchars = "\x{0C80}-\x{0CFF}"; // Kannada
|
||||
$this->pregMLchars = "\x{0D00}-\x{0D7F}"; // Malayalam
|
||||
$this->pregSHchars = "\x{0D80}-\x{0DFF}"; // Sinhala
|
||||
|
||||
$this->pregINDextra = "\x{200B}-\x{200D}\x{0964}\x{0965}\x{0020}-\x{0022}\x{0024}-\x{002E}\x{003A}-\x{003F}\x{005B}-\x{0060}\x{007B}-\x{007E}\x{00A0}";
|
||||
// 200B-D=Zero-width joiners; 0964,0965=Generic Indic punctuation; NBSP & general punctuation (excludes # and / so can use in autoFont() )
|
||||
|
||||
$this->allowedCSStags = 'DIV|P|H1|H2|H3|H4|H5|H6|FORM|IMG|A|BODY|TABLE|HR|THEAD|TFOOT|TBODY|TH|TR|TD|UL|OL|LI|PRE|BLOCKQUOTE|ADDRESS|DL|DT|DD';
|
||||
$this->allowedCSStags .= '|SPAN|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|STRIKE|S|U|DEL|INS|Q|FONT';
|
||||
$this->allowedCSStags .= '|SELECT|INPUT|TEXTAREA|CAPTION'; // mPDF 5.4
|
||||
|
||||
$this->outerblocktags = array('DIV','FORM','CENTER','DL');
|
||||
$this->innerblocktags = array('P','BLOCKQUOTE','ADDRESS','PRE','H1','H2','H3','H4','H5','H6','DT','DD','CAPTION'); // mPDF 5.4
|
||||
|
||||
|
||||
?>
|
||||
153
metadata/include/MPDF54/config_cp.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
|
||||
function GetLangOpts($llcc, $adobeCJK) {
|
||||
if (strlen($llcc) == 5) {
|
||||
$lang = substr(strtolower($llcc),0,2);
|
||||
$country = substr(strtoupper($llcc),3,2);
|
||||
}
|
||||
else { $lang = strtolower($llcc); $country = ''; }
|
||||
$unifonts = "";
|
||||
$coreSuitable = false;
|
||||
|
||||
switch($lang){
|
||||
CASE "en":
|
||||
CASE "ca":
|
||||
CASE "cy":
|
||||
CASE "da":
|
||||
CASE "de":
|
||||
CASE "es":
|
||||
CASE "eu":
|
||||
CASE "fr":
|
||||
CASE "ga":
|
||||
CASE "fi":
|
||||
CASE "is":
|
||||
CASE "it":
|
||||
CASE "nl":
|
||||
CASE "no":
|
||||
CASE "pt":
|
||||
CASE "sv":
|
||||
// Edit this value to define how mPDF behaves when using new mPDF('-x')
|
||||
// If set to TRUE, mPDF will use Adobe core fonts only when it recognises the languages above
|
||||
$coreSuitable = true; break;
|
||||
|
||||
|
||||
|
||||
// RTL Languages
|
||||
CASE "he":
|
||||
CASE "yi":
|
||||
$unifonts = "dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break;
|
||||
|
||||
// Arabic
|
||||
CASE "ar":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "fa":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "ps":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "ur":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
|
||||
// Sindhi (can be Arabic or Devanagari)
|
||||
CASE "sd":
|
||||
if ($country == "IN") { $unifonts = "ind_hi_1_001"; }
|
||||
// else if ($country == "PK") { $unifonts = ""; }
|
||||
// else { $unifonts = ""; }
|
||||
break;
|
||||
|
||||
|
||||
// INDIC
|
||||
// Assamese
|
||||
CASE "as": $unifonts = "ind_bn_1_001"; break;
|
||||
// Bengali
|
||||
CASE "bn": $unifonts = "ind_bn_1_001"; break;
|
||||
// Gujarati
|
||||
CASE "gu": $unifonts = "ind_gu_1_001"; break;
|
||||
// Hindi (Devanagari)
|
||||
CASE "hi": $unifonts = "ind_hi_1_001"; break;
|
||||
// Kannada
|
||||
CASE "kn": $unifonts = "ind_kn_1_001"; break;
|
||||
// Kashmiri
|
||||
CASE "ks": $unifonts = "ind_hi_1_001"; break;
|
||||
// Malayalam
|
||||
CASE "ml": $unifonts = "ind_ml_1_001"; break;
|
||||
// Nepali (Devanagari)
|
||||
CASE "ne": $unifonts = "ind_hi_1_001"; break;
|
||||
// Oriya
|
||||
CASE "or": $unifonts = "ind_or_1_001"; break;
|
||||
// Punjabi (Gurmukhi)
|
||||
CASE "pa": $unifonts = "ind_pa_1_001"; break;
|
||||
// Tamil
|
||||
CASE "ta": $unifonts = "ind_ta_1_001"; break;
|
||||
// Telegu
|
||||
CASE "te": $unifonts = "ind_te_1_001"; break;
|
||||
|
||||
// THAI
|
||||
CASE "th": $unifonts = "garuda,garudaB,garudaI,garudaBI,norasi,norasiB,norasiI,norasiBI"; break;
|
||||
|
||||
// VIETNAMESE
|
||||
CASE "vi":
|
||||
$unifonts = "dejavusanscondensed,dejavusanscondensedB,dejavusanscondensedI,dejavusanscondensedBI,dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break;
|
||||
|
||||
// CJK Langauges
|
||||
CASE "ja":
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "sjis,sjisB,sjisI,sjisBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
break;
|
||||
|
||||
CASE "ko":
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "uhc,uhcB,uhcI,uhcBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "unbatang_0613";
|
||||
// }
|
||||
break;
|
||||
|
||||
CASE "zh":
|
||||
if ($country == "HK" || $country == "TW") {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "big5,big5B,big5I,big5BI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
else if ($country == "CN") {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "gb,gbB,gbI,gbBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
else {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "gb,gbB,gbI,gbBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
$unifonts_arr = array();
|
||||
if ($unifonts) {
|
||||
$unifonts_arr = preg_split('/\s*,\s*/',$unifonts);
|
||||
}
|
||||
return array($coreSuitable ,$unifonts_arr);
|
||||
}
|
||||
|
||||
?>
|
||||
302
metadata/include/MPDF54/config_fonts.php
Normal file
@ -0,0 +1,302 @@
|
||||
<?php
|
||||
|
||||
|
||||
// Optionally define a folder which contains TTF fonts
|
||||
// mPDF will look here before looking in the usual _MPDF_TTFONTPATH
|
||||
// Useful if you already have a folder for your fonts
|
||||
// e.g. on Windows: define("_MPDF_SYSTEM_TTFONTS", 'C:/Windows/Fonts/');
|
||||
// Leave undefined if not required
|
||||
|
||||
// define("_MPDF_SYSTEM_TTFONTS", '');
|
||||
|
||||
|
||||
// Optionally set font(s) (names as defined below in $this->fontdata) to use for missing characters
|
||||
// when using useSubstitutions. Use a font with wide coverage - dejavusanscondensed is a good start
|
||||
// only works using subsets (otherwise would add very large file)
|
||||
// doesn't do Indic or arabic
|
||||
// More than 1 font can be specified but each will add to the processing time of the script
|
||||
|
||||
$this->backupSubsFont = array('dejavusanscondensed');
|
||||
|
||||
|
||||
// Optionally set a font (name as defined below in $this->fontdata) to use for CJK characters
|
||||
// in Plane 2 Unicode (> U+20000) when using useSubstitutions.
|
||||
// Use a font like hannomb or sun-extb if available
|
||||
// only works using subsets (otherwise would add very large file)
|
||||
// Leave undefined or blank if not not required
|
||||
|
||||
// $this->backupSIPFont = 'sun-extb';
|
||||
|
||||
|
||||
/*
|
||||
This array defines translations from font-family in CSS or HTML
|
||||
to the internal font-family name used in mPDF.
|
||||
Can include as many as want, regardless of which fonts are installed.
|
||||
By default mPDF will take a CSS/HTML font-family and remove spaces
|
||||
and change to lowercase e.g. "Arial Unicode MS" will be recognised as
|
||||
"arialunicodems"
|
||||
You only need to define additional translations.
|
||||
You can also use it to define specific substitutions e.g.
|
||||
'frutiger55roman' => 'arial'
|
||||
Generic substitutions (i.e. to a sans-serif or serif font) are set
|
||||
by including the font-family in $this->sans_fonts below
|
||||
To aid backwards compatability some are included:
|
||||
*/
|
||||
$this->fonttrans = array(
|
||||
'helvetica' => 'arial',
|
||||
'times' => 'timesnewroman',
|
||||
'courier' => 'couriernew',
|
||||
'trebuchet' => 'trebuchetms',
|
||||
'comic' => 'comicsansms',
|
||||
'franklin' => 'franklingothicbook',
|
||||
'albertus' => 'albertusmedium',
|
||||
'arialuni' => 'arialunicodems',
|
||||
'zn_hannom_a' => 'hannoma',
|
||||
'ocr-b' => 'ocrb',
|
||||
'ocr-b10bt' => 'ocrb',
|
||||
|
||||
|
||||
);
|
||||
|
||||
/*
|
||||
This array lists the file names of the TrueType .ttf or .otf font files
|
||||
for each variant of the (internal mPDF) font-family name.
|
||||
['R'] = Regular (Normal), others are Bold, Italic, and Bold-Italic
|
||||
Each entry must contain an ['R'] entry, but others are optional.
|
||||
Only the font (files) entered here will be available to use in mPDF.
|
||||
Put preferred default first in order.
|
||||
This will be used if a named font cannot be found in any of
|
||||
$this->sans_fonts, $this->serif_fonts or $this->mono_fonts
|
||||
|
||||
['indic'] = true; for special mPDF fonts containing Indic characters
|
||||
['sip-ext'] = 'hannomb'; name a related font file containing SIP characters
|
||||
|
||||
If a .ttc TrueType collection file is referenced, the number of the font
|
||||
within the collection is required. Fonts in the collection are numbered
|
||||
starting at 1, as they appear in the .ttc file e.g.
|
||||
"cambria" => array(
|
||||
'R' => "cambria.ttc",
|
||||
'B' => "cambriab.ttf",
|
||||
'I' => "cambriai.ttf",
|
||||
'BI' => "cambriaz.ttf",
|
||||
'TTCfontID' => array(
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
"cambriamath" => array(
|
||||
'R' => "cambria.ttc",
|
||||
'TTCfontID' => array(
|
||||
'R' => 2,
|
||||
),
|
||||
),
|
||||
*/
|
||||
|
||||
$this->fontdata = array(
|
||||
"dejavusanscondensed" => array(
|
||||
'R' => "DejaVuSansCondensed.ttf",
|
||||
'B' => "DejaVuSansCondensed-Bold.ttf",
|
||||
'I' => "DejaVuSansCondensed-Oblique.ttf",
|
||||
'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
|
||||
),
|
||||
"dejavusans" => array(
|
||||
'R' => "DejaVuSans.ttf",
|
||||
'B' => "DejaVuSans-Bold.ttf",
|
||||
'I' => "DejaVuSans-Oblique.ttf",
|
||||
'BI' => "DejaVuSans-BoldOblique.ttf",
|
||||
),
|
||||
"dejavuserif" => array(
|
||||
'R' => "DejaVuSerif.ttf",
|
||||
'B' => "DejaVuSerif-Bold.ttf",
|
||||
'I' => "DejaVuSerif-Italic.ttf",
|
||||
'BI' => "DejaVuSerif-BoldItalic.ttf",
|
||||
),
|
||||
"dejavuserifcondensed" => array(
|
||||
'R' => "DejaVuSerifCondensed.ttf",
|
||||
'B' => "DejaVuSerifCondensed-Bold.ttf",
|
||||
'I' => "DejaVuSerifCondensed-Italic.ttf",
|
||||
'BI' => "DejaVuSerifCondensed-BoldItalic.ttf",
|
||||
),
|
||||
"dejavusansmono" => array(
|
||||
'R' => "DejaVuSansMono.ttf",
|
||||
'B' => "DejaVuSansMono-Bold.ttf",
|
||||
'I' => "DejaVuSansMono-Oblique.ttf",
|
||||
'BI' => "DejaVuSansMono-BoldOblique.ttf",
|
||||
),
|
||||
|
||||
|
||||
/* OCR-B font for Barcodes */
|
||||
"ocrb" => array(
|
||||
'R' => "ocrb10.ttf",
|
||||
),
|
||||
|
||||
/* Thai fonts */
|
||||
"garuda" => array(
|
||||
'R' => "Garuda.ttf",
|
||||
'B' => "Garuda-Bold.ttf",
|
||||
'I' => "Garuda-Oblique.ttf",
|
||||
'BI' => "Garuda-BoldOblique.ttf",
|
||||
),
|
||||
"norasi" => array(
|
||||
'R' => "Norasi.ttf",
|
||||
'B' => "Norasi-Bold.ttf",
|
||||
'I' => "Norasi-Oblique.ttf",
|
||||
'BI' => "Norasi-BoldOblique.ttf",
|
||||
),
|
||||
|
||||
|
||||
/* Indic fonts */
|
||||
"ind_bn_1_001" => array(
|
||||
'R' => "ind_bn_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_hi_1_001" => array(
|
||||
'R' => "ind_hi_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_ml_1_001" => array(
|
||||
'R' => "ind_ml_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_kn_1_001" => array(
|
||||
'R' => "ind_kn_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_gu_1_001" => array(
|
||||
'R' => "ind_gu_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_or_1_001" => array(
|
||||
'R' => "ind_or_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_ta_1_001" => array(
|
||||
'R' => "ind_ta_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_te_1_001" => array(
|
||||
'R' => "ind_te_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_pa_1_001" => array(
|
||||
'R' => "ind_pa_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
|
||||
|
||||
/* XW Zar Arabic fonts */
|
||||
"xbriyaz" => array(
|
||||
'R' => "XB Riyaz.ttf",
|
||||
'B' => "XB RiyazBd.ttf",
|
||||
'I' => "XB RiyazIt.ttf",
|
||||
'BI' => "XB RiyazBdIt.ttf",
|
||||
),
|
||||
"xbzar" => array(
|
||||
'R' => "XB Zar.ttf",
|
||||
'B' => "XB Zar Bd.ttf",
|
||||
'I' => "XB Zar It.ttf",
|
||||
'BI' => "XB Zar BdIt.ttf",
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
/* Examples of some CJK fonts */
|
||||
/*
|
||||
"unbatang_0613" => array(
|
||||
'R' => "UnBatang_0613.ttf",
|
||||
),
|
||||
"sun-exta" => array(
|
||||
'R' => "Sun-ExtA.ttf",
|
||||
'sip-ext' => 'sun-extb',
|
||||
),
|
||||
"sun-extb" => array(
|
||||
'R' => "Sun-ExtB.ttf",
|
||||
),
|
||||
"hannoma" => array(
|
||||
'R' => "HAN NOM A.ttf",
|
||||
'sip-ext' => 'hannomb',
|
||||
),
|
||||
"hannomb" => array(
|
||||
'R' => "HAN NOM B.ttf",
|
||||
),
|
||||
|
||||
|
||||
'mingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
'sip-ext' => 'mingliu-extb',
|
||||
),
|
||||
'pmingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 2,
|
||||
),
|
||||
'sip-ext' => 'pmingliu-extb',
|
||||
),
|
||||
'mingliu_hkscs' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
'sip-ext' => 'mingliu_hkscs-extb',
|
||||
),
|
||||
'mingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
'pmingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 2,
|
||||
),
|
||||
),
|
||||
'mingliu_hkscs-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
),
|
||||
*/
|
||||
|
||||
);
|
||||
|
||||
|
||||
// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes
|
||||
// but you do not require them. This allows a more efficient form of subsetting to be used.
|
||||
$this->BMPonly = array(
|
||||
"dejavusanscondensed",
|
||||
"dejavusans",
|
||||
"dejavuserifcondensed",
|
||||
"dejavuserif",
|
||||
"dejavusansmono",
|
||||
);
|
||||
|
||||
// These next 3 arrays do two things:
|
||||
// 1. If a font referred to in HTML/CSS is not available to mPDF, these arrays will determine whether
|
||||
// a serif/sans-serif or monospace font is substituted
|
||||
// 2. The first font in each array will be the font which is substituted in circumstances as above
|
||||
// (Otherwise the order is irrelevant)
|
||||
// Use the mPDF font-family names i.e. lowercase and no spaces (after any translations in $fonttrans)
|
||||
// Always include "sans-serif", "serif" and "monospace" etc.
|
||||
$this->sans_fonts = array('dejavusanscondensed','dejavusans','freesans','liberationsans','sans','sans-serif','cursive','fantasy',
|
||||
'arial','helvetica','verdana','geneva','lucida','arialnarrow','arialblack','arialunicodems',
|
||||
'franklin','franklingothicbook','tahoma','garuda','calibri','trebuchet','lucidagrande','microsoftsansserif',
|
||||
'trebuchetms','lucidasansunicode','franklingothicmedium','albertusmedium','xbriyaz','albasuper','quillscript'
|
||||
|
||||
);
|
||||
|
||||
$this->serif_fonts = array('dejavuserifcondensed','dejavuserif','freeserif','liberationserif','serif',
|
||||
'timesnewroman','times','centuryschoolbookl','palatinolinotype','centurygothic',
|
||||
'bookmanoldstyle','bookantiqua','cyberbit','cambria',
|
||||
'norasi','charis','palatino','constantia','georgia','albertus','xbzar','algerian','garamond',
|
||||
);
|
||||
|
||||
$this->mono_fonts = array('dejavusansmono','freemono','liberationmono','courier', 'mono','monospace','ocrb','ocr-b','lucidaconsole',
|
||||
'couriernew','monotypecorsiva'
|
||||
);
|
||||
|
||||
?>
|
||||
3
metadata/include/MPDF54/examples/.htaccess
Normal file
@ -0,0 +1,3 @@
|
||||
RewriteEngine on
|
||||
RewriteBase /
|
||||
RewriteRule ^.*$ http://%{HTTP_HOST} [R=301,L]
|
||||
9
metadata/include/MPDF54/font/ccourier.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-23 -250 715 805]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
?>
|
||||
9
metadata/include/MPDF54/font/ccourierb.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-113 -250 749 801]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
||||
9
metadata/include/MPDF54/font/ccourierbi.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-57 -250 869 801]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
||||
9
metadata/include/MPDF54/font/ccourieri.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-27 -250 849 805]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
||||
20
metadata/include/MPDF54/font/chelvetica.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-166 -225 1000 931]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -37, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -18, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -74, chr(89)=> -74, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -110, chr(99)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(114)=> -37, chr(115)=> -110, chr(117)=> -37, chr(119)=> -55, chr(121)=> -55, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -37, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -37, chr(97)=> -37, chr(101)=> -18, chr(105)=> 0, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -8, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(112)=> -74, chr(113)=> -91, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -18, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -18, ), );
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/chelveticab.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -228 1003 962]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(118)=> -37, chr(119)=> -18, chr(121)=> -37, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -74, chr(99)=> -74, chr(101)=> -74, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(115)=> -74, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -74, chr(65)=> -91, chr(97)=> -55, chr(101)=> -55, chr(105)=> -37, chr(111)=> -74, chr(112)=> -55, chr(113)=> -74, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/chelveticabi.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-174 -228 1114 962]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -74, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -55, chr(89)=> -74, chr(146)=> -74, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -37, chr(99)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(115)=> -37, chr(117)=> -18, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -37, chr(65)=> -55, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(112)=> -37, chr(113)=> -37, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(116)=> 18, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/chelveticai.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -225 1116 931]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -18, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -8, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -37, chr(89)=> -91, chr(121)=> -18, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -8, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -37, chr(46)=> -37, chr(65)=> -18, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -55, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(112)=> -55, chr(113)=> -55, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(146)=> 37, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -37, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/csymbol.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('FontBBox'=>'[-180 -293 1090 1010]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/ctimes.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>662,'FontBBox'=>'[-168 -218 1000 898]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -37, ), chr(65)=> array ( chr(84)=> -110, chr(86)=> -128, chr(87)=> -80, chr(89)=> -91, chr(118)=> -74, chr(119)=> -91, chr(121)=> -91, chr(146)=> -110, ), chr(70)=> array ( chr(44)=> -80, chr(46)=> -80, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -74, chr(89)=> -100, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -91, ), chr(82)=> array ( chr(84)=> -60, chr(86)=> -80, chr(87)=> -55, chr(89)=> -55, chr(121)=> -40, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -49, chr(65)=> -80, chr(79)=> -18, chr(97)=> -69, chr(99)=> -69, chr(101)=> -69, chr(105)=> -35, chr(111)=> -69, chr(114)=> -35, chr(115)=> -69, chr(117)=> -35, chr(119)=> -69, chr(121)=> -69, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -128, chr(97)=> -110, chr(101)=> -110, chr(105)=> -60, chr(111)=> -128, chr(114)=> -60, chr(117)=> -60, chr(121)=> -110, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -110, chr(97)=> -80, chr(101)=> -80, chr(105)=> -40, chr(111)=> -80, chr(114)=> -40, chr(117)=> -40, chr(121)=> -60, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -110, chr(97)=> -100, chr(101)=> -100, chr(105)=> -55, chr(111)=> -100, chr(112)=> -91, chr(113)=> -110, chr(117)=> -110, chr(118)=> -100, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -40, chr(46)=> -55, chr(103)=> -18, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(119)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(121)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -55, chr(116)=> -18, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/ctimesb.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>676,'FontBBox'=>'[-168 -218 1000 935]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -128, chr(87)=> -110, chr(89)=> -91, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -91, chr(89)=> -91, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -35, chr(86)=> -35, chr(87)=> -35, chr(89)=> -35, chr(121)=> -35, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -18, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -91, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -128, chr(79)=> -20, chr(97)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -74, chr(117)=> -91, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -110, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -18, chr(117)=> -18, chr(121)=> -37, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -91, chr(65)=> -91, chr(97)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -110, ), chr(102)=> array ( chr(102)=> 0, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -91, chr(46)=> -91, chr(99)=> -18, chr(101)=> -18, chr(104)=> 0, chr(111)=> -18, chr(113)=> -18, chr(116)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(122)=> 0, chr(146)=> 18, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/ctimesbi.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>669,'FontBBox'=>'[-200 -218 996 921]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -55, chr(86)=> -74, chr(87)=> -91, chr(89)=> -55, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -91, ), chr(76)=> array ( chr(84)=> -18, chr(86)=> -37, chr(87)=> -37, chr(89)=> -37, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -55, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -37, chr(115)=> -91, chr(117)=> -37, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -74, chr(97)=> -110, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(114)=> -55, chr(117)=> -55, chr(121)=> -74, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -74, chr(105)=> -37, chr(111)=> -74, chr(114)=> -74, chr(117)=> -55, chr(121)=> -55, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -74, chr(58)=> -91, chr(65)=> -74, chr(97)=> -91, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(112)=> -74, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -74, chr(116)=> -37, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/ctimesi.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>653,'FontBBox'=>'[-169 -217 1010 883]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -37, chr(86)=> -49, chr(87)=> -37, chr(89)=> -55, chr(118)=> -55, chr(119)=> -55, chr(121)=> -55, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(76)=> array ( chr(84)=> -20, chr(86)=> -37, chr(87)=> -37, chr(89)=> -20, chr(121)=> -29, chr(146)=> -37, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(82)=> array ( chr(84)=> 0, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(115)=> -91, chr(117)=> -55, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -64, chr(65)=> -74, chr(79)=> -29, chr(97)=> -110, chr(101)=> -110, chr(105)=> -74, chr(111)=> -110, chr(114)=> -74, chr(117)=> -74, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(117)=> -55, chr(121)=> -91, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -74, chr(111)=> -91, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(146)=> 91, ), chr(114)=> array ( chr(44)=> -110, chr(46)=> -110, chr(99)=> -37, chr(100)=> -37, chr(101)=> -37, chr(103)=> -37, chr(104)=> -18, chr(111)=> -37, chr(113)=> -37, chr(114)=> 0, chr(116)=> 0, chr(117)=> 0, chr(118)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -110, ), chr(146)=> array ( chr(115)=> -128, chr(116)=> -110, chr(146)=> -110, ), );
|
||||
|
||||
?>
|
||||
21
metadata/include/MPDF54/font/czapfdingbats.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$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);
|
||||
|
||||
$desc=array('FontBBox'=>'[-1 -143 981 820]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
||||
721
metadata/include/MPDF54/graph.php
Normal file
@ -0,0 +1,721 @@
|
||||
<?php
|
||||
|
||||
|
||||
// mPDF 4.5.009
|
||||
define("FF_USERFONT", 15); // See jpgraph_ttf.inc.php for font IDs
|
||||
global $JpgUseSVGFormat;
|
||||
$JpgUseSVGFormat = true;
|
||||
|
||||
//======================================================================================================
|
||||
// DELETE OLD GRAPH FILES FIRST - Housekeeping
|
||||
// First clear any files in directory that are >1 hrs old
|
||||
$interval = 3600;
|
||||
if ($handle = opendir(_MPDF_PATH.'graph_cache')) {
|
||||
while (false !== ($file = readdir($handle))) {
|
||||
if (((filemtime(_MPDF_PATH.'graph_cache/'.$file)+$interval) < time()) && ($file != "..") && ($file != ".")) {
|
||||
@unlink(_MPDF_PATH.'graph_cache/'.$file); // mPDF 4.0
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
//==============================================================================================================
|
||||
// LOAD GRAPHS
|
||||
|
||||
include_once(_JPGRAPH_PATH.'jpgraph.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_line.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_log.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_scatter.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_regstat.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_pie.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_pie3d.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_bar.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_radar.php');
|
||||
|
||||
|
||||
//======================================================================================================
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
//======================================================================================================
|
||||
function print_graph($g,$pgwidth) {
|
||||
$splines = false;
|
||||
$bandw = false;
|
||||
$percent = false;
|
||||
$show_percent = false;
|
||||
$stacked = false;
|
||||
$h = false;
|
||||
$show_values = false;
|
||||
$hide_grid = false;
|
||||
$hide_y_axis = false;
|
||||
|
||||
if (isset($g['attr']['TYPE']) && $g['attr']['TYPE']) { $type = strtolower($g['attr']['TYPE']); }
|
||||
if (!in_array($type,array('bar','horiz_bar','line','radar','pie','pie3d','xy','scatter'))) { $type = 'bar'; } // Default=bar
|
||||
|
||||
if (isset($g['attr']['STACKED']) && $g['attr']['STACKED']) { $stacked = true; } // stacked for bar or horiz_bar
|
||||
if (isset($g['attr']['SPLINES']) && $g['attr']['SPLINES'] && $type=='xy') { $splines = true; } // splines for XY line graphs
|
||||
if (isset($g['attr']['BANDW']) && $g['attr']['BANDW']) { $bandw = true; } // black and white
|
||||
if (isset($g['attr']['LEGEND-OVERLAP']) && $g['attr']['LEGEND-OVERLAP']) { $overlap = true; } // avoid overlap of Legends over graph (line, bar, horiz_bar only)
|
||||
if (isset($g['attr']['PERCENT']) && $g['attr']['PERCENT'] && $type != 'xy' && $type != 'scatter') { $percent = true; } // Show data series as percent of total in series
|
||||
if (isset($g['attr']['SHOW-VALUES']) && $g['attr']['SHOW-VALUES']) { $show_values = true; } // Show the individual data values
|
||||
if (isset($g['attr']['HIDE-GRID']) && $g['attr']['HIDE-GRID']) { $hide_grid = true; } // Hide the y-axis gridlines
|
||||
if (isset($g['attr']['HIDE-Y-AXIS']) && $g['attr']['HIDE-Y-AXIS']) { $hide_y_axis = true; } // Hide the y-axis
|
||||
|
||||
|
||||
// Antialias: If true - better quality curves, but graph line will only be 1px even in PDF 300dpi
|
||||
// default=true for most except line and radar
|
||||
if (isset($g['attr']['ANTIALIAS']) && ($g['attr']['ANTIALIAS']=='' || $g['attr']['ANTIALIAS']==0)) { $antialias = false; }
|
||||
else if (isset($g['attr']['ANTIALIAS']) && $g['attr']['ANTIALIAS'] > 0) { $antialias = true; }
|
||||
else if ($type=='line' || $type=='radar') { $antialias = false; }
|
||||
else { $antialias = true; }
|
||||
|
||||
if ($g['attr']['DPI']) { $dpi = intval($g['attr']['DPI']); }
|
||||
if (!$dpi || $dpi < 50 || $dpi > 2400) { $dpi = 150; } // Default dpi 150
|
||||
$k = (0.2645/25.4 * $dpi);
|
||||
|
||||
// mPDF 4.5.009
|
||||
global $JpgUseSVGFormat;
|
||||
if (isset($JpgUseSVGFormat) && $JpgUseSVGFormat) {
|
||||
$img_type = 'svg';
|
||||
$k = 1; // Overrides as Vector scale does not need DPI
|
||||
}
|
||||
else {
|
||||
$img_type = 'png';
|
||||
}
|
||||
|
||||
if (isset($g['attr']['TITLE']) && $g['attr']['TITLE']) { $title = $g['attr']['TITLE']; }
|
||||
|
||||
if (isset($g['attr']['LABEL-X']) && $g['attr']['LABEL-X']) { $xlabel = $g['attr']['LABEL-X']; } // NOT IMPLEMENTED??????
|
||||
if (isset($g['attr']['LABEL-Y']) && $g['attr']['LABEL-Y']) { $ylabel = $g['attr']['LABEL-Y']; }
|
||||
|
||||
if (isset($g['attr']['AXIS-X']) && $g['attr']['AXIS-X']) { $xaxis = strtolower($g['attr']['AXIS-X']); }
|
||||
if (!in_array($xaxis,array('text','lin','linear','log'))) { $xaxis = 'text'; } // Default=text
|
||||
if ($xaxis == 'linear') { $xaxis = 'lin'; }
|
||||
|
||||
if (isset($g['attr']['AXIS-Y']) && $g['attr']['AXIS-Y']) { $yaxis = strtolower($g['attr']['AXIS-Y']); }
|
||||
if (!in_array($yaxis,array('lin','linear','log','percent'))) { $yaxis = 'lin'; } // Default=lin
|
||||
if ($yaxis == 'percent') { $show_percent = true; $yaxis = 'lin'; } // Show percent sign on scales
|
||||
if ($yaxis == 'linear') { $yaxis = 'lin'; }
|
||||
|
||||
if ($splines) { $xaxis = 'lin'; }
|
||||
$axes = $xaxis.$yaxis; // e.g.textlin, textlog, loglog, loglin, linlog (XY)
|
||||
|
||||
// mPDF 4.0
|
||||
if (isset($g['attr']['cWIDTH']) && $g['attr']['cWIDTH']) { $w=($g['attr']['cWIDTH'] / 0.2645); } // pixels
|
||||
if (isset($g['attr']['cHEIGHT']) && $g['attr']['cHEIGHT']) { $h=($g['attr']['cHEIGHT'] / 0.2645); }
|
||||
|
||||
|
||||
if (isset($g['attr']['SERIES']) && strtolower($g['attr']['SERIES']) == 'rows') { $dataseries = 'rows'; }
|
||||
else { $dataseries = 'cols'; }
|
||||
|
||||
// Defaults - define data
|
||||
$rowbegin = 2;
|
||||
$colbegin = 2;
|
||||
if($type=='scatter' || $type=='xy') {
|
||||
if ($dataseries == 'rows') { $rowbegin = 1; }
|
||||
else { $colbegin = 1; }
|
||||
}
|
||||
$rowend = 0;
|
||||
$colend = 0;
|
||||
|
||||
if (isset($g['attr']['DATA-ROW-BEGIN']) && ($g['attr']['DATA-ROW-BEGIN'] === '0' || $g['attr']['DATA-ROW-BEGIN'] > 0)) { $rowbegin = $g['attr']['DATA-ROW-BEGIN']; }
|
||||
|
||||
if (isset($g['attr']['DATA-COL-BEGIN']) && ($g['attr']['DATA-COL-BEGIN'] === '0' || $g['attr']['DATA-COL-BEGIN'] > 0)) { $colbegin = $g['attr']['DATA-COL-BEGIN']; }
|
||||
|
||||
if (isset($g['attr']['DATA-ROW-END']) && ($g['attr']['DATA-ROW-END'] === '0' || $g['attr']['DATA-ROW-END'] <> 0)) { $rowend = $g['attr']['DATA-ROW-END']; }
|
||||
if (isset($g['attr']['DATA-COL-END']) && ($g['attr']['DATA-COL-END'] === '0' || $g['attr']['DATA-COL-END'] <> 0)) { $colend = $g['attr']['DATA-COL-END']; }
|
||||
|
||||
$nr = count($g['data']);
|
||||
$nc = 0;
|
||||
foreach($g['data'] AS $r) {
|
||||
$cc=0;
|
||||
foreach($r AS $c) { $cc++; }
|
||||
$nc = max($nc,$cc);
|
||||
}
|
||||
if ($colend == 0) { $colend = $nc; }
|
||||
else if ($colend < 0) { $colend = $nc+$colend; }
|
||||
|
||||
if ($rowend == 0) { $rowend = $nr; }
|
||||
else if ($rowend < 0) { $rowend = $nr+$rowend; }
|
||||
|
||||
if ($colend < $colbegin) { $colend = $colbegin; }
|
||||
if ($rowend < $rowbegin) { $rowend = $rowbegin; }
|
||||
|
||||
// if ($type == 'xy' || $type=='scatter') { $colstart=0; }
|
||||
|
||||
// Get Data + Totals
|
||||
$data = array();
|
||||
$totals = array();
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
if (isset($g['data'][$r][$c])) { $g['data'][$r][$c] = floatval($g['data'][$r][$c] ); }
|
||||
else { $g['data'][$r][$c] = 0; }
|
||||
if ($dataseries=='rows') {
|
||||
$data[($r+1-$rowbegin)][($c+1-$colbegin)] = $g['data'][$r][$c] ;
|
||||
$totals[($r+1-$rowbegin)] += $g['data'][$r][$c] ;
|
||||
}
|
||||
else {
|
||||
$data[($c+1-$colbegin)][($r+1-$rowbegin)] = $g['data'][$r][$c] ;
|
||||
if (isset($totals[($c+1-$colbegin)])) { $totals[($c+1-$colbegin)] += $g['data'][$r][$c] ; }
|
||||
else { $totals[($c+1-$colbegin)] = $g['data'][$r][$c] ; }
|
||||
}
|
||||
}
|
||||
}
|
||||
// PERCENT
|
||||
if ($percent && $type != 'pie' && $type != 'pie3d') {
|
||||
for ($r=0;$r<count($data);$r++) {
|
||||
for ($c=0;$c<count($data[$r]);$c++) {
|
||||
$data[$r][$c] = $data[$r][$c]/$totals[$r] * 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Get Legends and labels
|
||||
$legends = array();
|
||||
$labels = array();
|
||||
$longestlegend = 0;
|
||||
$longestlabel = 0;
|
||||
if ($dataseries=='cols') {
|
||||
if ($colbegin>1) {
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
$legends[($r+1-$rowbegin)] = $g['data'][$r][0] ;
|
||||
$longestlegend = max($longestlegend, strlen( $g['data'][$r][0] ));
|
||||
}
|
||||
}
|
||||
if ($rowbegin>1) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
$labels[($c+1-$colbegin)] = $g['data'][0][$c] ;
|
||||
$longestlabel = max($longestlabel , strlen( $g['data'][0][$c] ));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($dataseries=='rows') {
|
||||
if ($colbegin>1) {
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
$labels[($r+1-$rowbegin)] = $g['data'][$r][0] ;
|
||||
$longestlabel = max($longestlabel , strlen( $g['data'][$r][0] ));
|
||||
}
|
||||
}
|
||||
if ($rowbegin>1) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
$legends[($c+1-$colbegin)] = $g['data'][0][$c] ;
|
||||
$longestlegend = max($longestlegend, strlen( $g['data'][0][$c] ));
|
||||
}
|
||||
}
|
||||
}
|
||||
// Default sizes
|
||||
$defsize = array();
|
||||
$defsize['pie'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['pie3d'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['radar'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['line'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['xy'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['scatter'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['bar'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['horiz_bar'] = array('w' => 600, 'h' => 500);
|
||||
|
||||
|
||||
// Use default ratios
|
||||
if ($w && !$h) { $h = $w*$defsize[$type]['h']/$defsize[$type]['w']; }
|
||||
if ($h && !$w) { $w = $h*$defsize[$type]['w']/$defsize[$type]['h']; }
|
||||
if (!$h && !$w) { $w = $defsize[$type]['w']; $h = $defsize[$type]['h']; }
|
||||
|
||||
|
||||
if (count($data)>0 && $type) {
|
||||
$figure_file = "graph_cache/".rand(11111,999999999).".".$img_type;
|
||||
if ($bandw) { $colours = array('snow1','black','snow4','snow3','snow2','cadetblue4','cadetblue3','cadetblue1','bisque4','bisque2','beige'); }
|
||||
else { $colours = array('cyan','darkorchid4','cadetblue3','khaki1','darkolivegreen2','cadetblue4','coral','cyan4','rosybrown3','wheat1'); }
|
||||
$fills = array('navy','orange','red','yellow','purple','navy','orange','red','yellow','purple');
|
||||
$patterns = array(PATTERN_DIAG1,PATTERN_CROSS1,PATTERN_STRIPE1,PATTERN_DIAG3,PATTERN_CROSS2,PATTERN_DIAG2,PATTERN_DIAG4,PATTERN_CROSS3, PATTERN_CROSS4,PATTERN_STRIPE1);
|
||||
$markers = array(MARK_DIAMOND, MARK_SQUARE, MARK_CIRCLE, MARK_UTRIANGLE, MARK_DTRIANGLE, MARK_FILLEDCIRCLE, MARK_CROSS, MARK_STAR, MARK_X);
|
||||
|
||||
// LEGENDS
|
||||
if ($type == 'pie' || $type == 'pie3d') {
|
||||
$graph = new PieGraph (($w*$k),($h*$k));
|
||||
}
|
||||
else if ($type == 'radar') {
|
||||
$graph = new RadarGraph(($w*$k),($h*$k));
|
||||
}
|
||||
else {
|
||||
$graph = new Graph(($w*$k),($h*$k));
|
||||
}
|
||||
|
||||
// mPDF 4.5.009
|
||||
// $graph->img->SetImgFormat($img_type) ;
|
||||
// if (strtoupper($img_type)=='JPEG') { $graph->img->SetQuality(90); }
|
||||
if ($antialias) { $graph->img->SetAntiAliasing(); }
|
||||
$graph->SetShadow(true, 2*$k);
|
||||
$graph->SetMarginColor("white");
|
||||
// TITLE
|
||||
$graph->title->Set($title);
|
||||
$graph->title->SetMargin(10*$k);
|
||||
$graph->title->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->title->SetColor("black");
|
||||
$graph->legend->SetLineSpacing(3*$k);
|
||||
$graph->legend->SetMarkAbsSize(6*$k);
|
||||
$graph->legend->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
|
||||
// Set GRAPH IMAGE MARGINS
|
||||
if ($type == 'pie' || $type == 'pie3d') {
|
||||
$psize = 0.3;
|
||||
$pposxabs = ($w/2);
|
||||
$pposy = 0.55;
|
||||
if ($longestlegend) { // if legend showing
|
||||
$pposxabs -= ((($longestlegend * 5) + 20) / 2);
|
||||
}
|
||||
$pposx = ($pposxabs / $w);
|
||||
$graph->legend->Pos(0.02,0.5,'right','center');
|
||||
}
|
||||
else if ($type == 'radar') {
|
||||
$psize = 0.5;
|
||||
$pposxabs = ($w/2);
|
||||
$pposy = 0.55;
|
||||
if ($longestlabel) { // if legend showing
|
||||
$pposxabs -= ((($longestlabel * 5) + 20) / 2);
|
||||
}
|
||||
$pposx = ($pposxabs / $w);
|
||||
$graph->legend->Pos(0.02,0.5,'right','center');
|
||||
}
|
||||
else if ($type == 'xy' || $type == 'scatter') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 60;
|
||||
$pmb = 50;
|
||||
$xaxislblmargin = $pmb - 30;
|
||||
$yaxislblmargin = $pml - 15;
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
else if ($type == 'line' || $type == 'bar') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 60;
|
||||
$pmb = 50;
|
||||
$xlangle = 0;
|
||||
$ll = ($longestlegend * 5); // 45 degrees 8pt fontsize
|
||||
if ($ll > 5 || ($ll>3 && count($data)>10)) {
|
||||
$pmb = max($pmb, $ll + 30);
|
||||
$xlangle = 50;
|
||||
}
|
||||
$xaxislblmargin = $pmb - 30;
|
||||
$yaxislblmargin = $pml - 15;
|
||||
if ($longestlabel && !$overlap) { // if legend showing
|
||||
$pmr = ((($longestlabel * 5) + 40));
|
||||
}
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
else if ($type == 'horiz_bar') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 50;
|
||||
$pmb = 45;
|
||||
$ll = ($longestlegend * 6.5); // 8pt fontsize
|
||||
$pml = max($pml, $ll + 20);
|
||||
$xaxislblmargin = $pml - 20;
|
||||
$yaxislblmargin = $pmb - 15;
|
||||
if ($longestlabel && !$overlap) { // if legend showing
|
||||
$pmr = ((($longestlabel * 5) + 40));
|
||||
}
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
|
||||
|
||||
// DRAW THE GRAPHS
|
||||
if ($type == 'pie') {
|
||||
$p1 = new PiePlot($data[0]);
|
||||
$p1->SetSliceColors($colours);
|
||||
|
||||
if ($show_values) {
|
||||
$p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
|
||||
else { $p1->SetLabelType(PIE_VALUE_ABS); }
|
||||
if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
|
||||
else { $p1->value->SetFormat("%s"); }
|
||||
// Enable and set policy for guide-lines. Make labels line up vertically
|
||||
$p1->SetGuideLines(true);
|
||||
$p1->SetGuideLinesAdjust(1.5);
|
||||
}
|
||||
else { $p1->value->Show(false); }
|
||||
$p1->SetLegends($legends);
|
||||
$p1->SetSize($psize);
|
||||
$p1->SetCenter($pposx, $pposy);
|
||||
if ($labels[0]) {
|
||||
$graph->subtitle->Set($labels[0]);
|
||||
$graph->subtitle->SetMargin(10*$k);
|
||||
$graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->subtitle->SetColor("black");
|
||||
}
|
||||
$graph->Add($p1);
|
||||
}
|
||||
else if ($type == 'pie3d') {
|
||||
$p1 = new PiePlot3d($data[0]);
|
||||
$p1->SetSliceColors($colours);
|
||||
if ($show_values) {
|
||||
$p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
|
||||
else { $p1->SetLabelType(PIE_VALUE_ABS); }
|
||||
if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
|
||||
else { $p1->value->SetFormat("%s"); }
|
||||
}
|
||||
else { $p1->value->Show(false); }
|
||||
$p1->SetLegends($legends);
|
||||
$p1->SetEdge();
|
||||
$p1->SetSize($psize);
|
||||
$p1->SetCenter($pposx, $pposy);
|
||||
|
||||
if ($labels[0]) {
|
||||
$graph->subtitle->Set($labels[0]);
|
||||
$graph->subtitle->SetMargin(10*$k);
|
||||
$graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->subtitle->SetColor("black");
|
||||
}
|
||||
|
||||
$graph->Add( $p1);
|
||||
}
|
||||
// RADAR
|
||||
else if ($type == 'radar') {
|
||||
$graph->SetSize($psize);
|
||||
$graph->SetPos($pposx, $pposy);
|
||||
|
||||
$graph->SetTitles( $legends); // labels each axis
|
||||
|
||||
$graph->axis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->axis->title->SetMargin(5*$k);
|
||||
$graph->axis->SetWeight(1*$k);
|
||||
$graph->axis->HideLabels();
|
||||
$graph->axis->SetFont(FF_USERFONT,FS_NORMAL,6*$k);
|
||||
$graph->HideTickMarks();
|
||||
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
if (count($rdata)<3) { die("ERROR::Graph::Cannot create a Radar Plot with less than 3 data points."); }
|
||||
// Create the radar plot
|
||||
$bplot = new RadarPlot($rdata);
|
||||
$bplot->mark->SetType($markers[$series]);
|
||||
$bplot->mark->SetFillColor($colours[$series]);
|
||||
$bplot->mark->SetWidth(3*$k);
|
||||
$bplot->SetColor($colours[$series]);
|
||||
if ($series == 0) { $bplot->SetFillColor('lightred'); }
|
||||
else { $bplot->SetFill(false); }
|
||||
$bplot->SetLineWeight(1*$k);
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
}
|
||||
// LINE
|
||||
else if ($type == 'line') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
}
|
||||
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(true);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle($xlangle);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
}
|
||||
foreach($data AS $series => $rdata) {
|
||||
$bplot = new LinePlot($rdata);
|
||||
$bplot->mark->SetType($markers[$series]);
|
||||
$bplot->mark->SetFillColor($colours[$series]);
|
||||
$bplot->mark->SetWidth(4*$k);
|
||||
if ($show_values) {
|
||||
$bplot->value-> Show(); // Not if scatter
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
// Set color for each line
|
||||
$bplot->SetColor($colours[$series]);
|
||||
$bplot->SetWeight(2*$k);
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
// Indent the X-scale so the first and last point doesn't fall on the edges
|
||||
$bplot->SetCenter();
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
|
||||
}
|
||||
// XY or SCATTER
|
||||
else if ($type == 'xy' || $type == 'scatter') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
// Setup font for axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
// Y-axis title
|
||||
if ($labels[1]) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
$graph->yaxis->SetTitle($labels[1],'middle');
|
||||
}
|
||||
|
||||
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(true);
|
||||
// Just let the maximum be autoscaled
|
||||
$graph->yaxis->scale->SetAutoMin(0);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
// mPDF 2.5 Corrects labelling of x-axis
|
||||
// $graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle(50);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($labels[0]) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
$graph->xaxis->SetTitle($labels[0],'middle');
|
||||
}
|
||||
|
||||
// Create the bar plot
|
||||
// SPLINES
|
||||
if ($splines && $type=='xy') {
|
||||
$spline = new Spline($data[0],$data[1]);
|
||||
list($newx,$newy) = $spline->Get(100);
|
||||
}
|
||||
else {
|
||||
$newx = $data[0];
|
||||
$newy = $data[1];
|
||||
}
|
||||
|
||||
if ($type=='xy') {
|
||||
// LINE PLOT
|
||||
$bplot = new LinePlot($newy, $newx);
|
||||
// Set color for each line
|
||||
$bplot->SetColor($fills[0]);
|
||||
$bplot->SetWeight(4*$k);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
|
||||
// SCATTER PLOT
|
||||
$cplot = new ScatterPlot($data[1], $data[0]);
|
||||
|
||||
$cplot->mark->SetType($markers[0]);
|
||||
$cplot->mark->SetFillColor($fills[0]);
|
||||
$cplot->mark->SetWidth(8*$k);
|
||||
if ($show_values) {
|
||||
// mPDF 2.5
|
||||
if ($type=='xy') { $cplot->value->Show(); } // Not if scatter
|
||||
$cplot->value->SetMargin(8*$k);
|
||||
$cplot->value->SetColor("darkred");
|
||||
$cplot->value->SetFont( FF_USERFONT, FS_NORMAL, 6*$k);
|
||||
|
||||
if ($percent || $show_percent) { $cplot->value->SetFormat( '%d%%'); }
|
||||
else { $cplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
// Set color for each line
|
||||
$cplot->SetColor($fills[0]);
|
||||
$cplot->SetWeight(4*$k);
|
||||
if ($bandw) { $cplot->SetShadow("gray5"); }
|
||||
$graph->Add($cplot);
|
||||
|
||||
}
|
||||
// BAR
|
||||
else if ($type == 'bar') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
// Setup y-axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
}
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(false);
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle($xlangle);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
}
|
||||
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
|
||||
// Create the bar plot
|
||||
$bplot = new BarPlot($rdata);
|
||||
$bplot->SetWidth(0.6); // for SINGLE??
|
||||
// Setup color for gradient fill style
|
||||
if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
|
||||
else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
|
||||
|
||||
// Set color for the frame of each bar
|
||||
$bplot->SetColor("darkgray");
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
if ($show_values) {
|
||||
$bplot->value->Show();
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
$group[] = $bplot;
|
||||
}
|
||||
if (count($data)==1) {
|
||||
$graph->Add($group[0]);
|
||||
}
|
||||
else {
|
||||
// Create the grouped bar plot
|
||||
if ($stacked) {
|
||||
$gbplot = new AccBarPlot ($group);
|
||||
}
|
||||
else {
|
||||
$gbplot = new GroupBarPlot ($group);
|
||||
}
|
||||
$graph->Add($gbplot);
|
||||
}
|
||||
}
|
||||
else if ($type == 'horiz_bar') {
|
||||
$graph->SetScale($axes);
|
||||
$graph->Set90AndMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
|
||||
// Setup y-axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
|
||||
$graph->yaxis->SetPos('max'); // Intersect at top of x-axis i.e. y axis is at bottom
|
||||
// First make the labels look right
|
||||
$graph->yaxis->SetLabelAlign('center','top');
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); }
|
||||
$graph->yaxis->SetLabelSide(SIDE_RIGHT);
|
||||
$graph->yaxis->scale->SetGrace(10); // sets 10% headroom
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// The fix the tick marks
|
||||
$graph->yaxis->SetTickSide(SIDE_LEFT);
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
// Finally setup the title
|
||||
$graph->yaxis->SetTitleSide(SIDE_RIGHT);
|
||||
// To align the title to the right use :
|
||||
$graph->yaxis->title->Align('right');
|
||||
$graph->yaxis->title->SetAngle(0);
|
||||
|
||||
}
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(false);
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->title->SetAngle(90);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
}
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
// Create the bar pot
|
||||
$bplot = new BarPlot($rdata);
|
||||
$bplot->SetWidth(0.6); // for SINGLE??
|
||||
// Setup color for gradient fill style
|
||||
if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
|
||||
else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
|
||||
|
||||
// Set color for the frame of each bar
|
||||
$bplot->SetColor("darkgray");
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
if ($show_values) {
|
||||
$bplot->value-> Show();
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
$group[] = $bplot;
|
||||
}
|
||||
if (count($data)==1) {
|
||||
$graph->Add($group[0]);
|
||||
}
|
||||
else {
|
||||
// Create the grouped bar plot
|
||||
if ($stacked) {
|
||||
$gbplot = new AccBarPlot ($group);
|
||||
}
|
||||
else {
|
||||
$gbplot = new GroupBarPlot ($group);
|
||||
}
|
||||
$graph->Add($gbplot);
|
||||
}
|
||||
}
|
||||
if ($graph) {
|
||||
$graph->Stroke( _MPDF_PATH.$figure_file);
|
||||
$srcpath = str_replace("\\","/",dirname(__FILE__)) . "/";
|
||||
$srcpath .= $figure_file;
|
||||
return array('file'=>$srcpath, 'w'=>$w, 'h'=>$h);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
?>
|
||||
2
metadata/include/MPDF54/graph_cache/dummy.txt
Normal file
@ -0,0 +1,2 @@
|
||||
This is just a placeholder file so that the folder is created on install.
|
||||
It can be deleted once installed.
|
||||
BIN
metadata/include/MPDF54/iccprofiles/SWOP2006_Coated5v2.icc
Normal file
BIN
metadata/include/MPDF54/iccprofiles/sRGB_IEC61966-2-1.icc
Normal file
101
metadata/include/MPDF54/includes/CJKdata.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
// mPDF 2.5
|
||||
|
||||
// BIG 5
|
||||
$cw = array(
|
||||
32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240,
|
||||
42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500,
|
||||
52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667,
|
||||
62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771,
|
||||
72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823,
|
||||
82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344,
|
||||
92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438,
|
||||
102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500,
|
||||
112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458,
|
||||
122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667,
|
||||
17601 => 500,
|
||||
);
|
||||
$this->Big5_widths=$cw;
|
||||
|
||||
|
||||
// GB
|
||||
$cw = array(
|
||||
32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374,
|
||||
42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462,
|
||||
52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605,
|
||||
62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729,
|
||||
72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772,
|
||||
82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374,
|
||||
92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415,
|
||||
102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524,
|
||||
112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452,
|
||||
122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605,
|
||||
);
|
||||
$this->GB_widths=$cw;
|
||||
|
||||
// Japanese
|
||||
$cw = array(
|
||||
32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323,
|
||||
42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614,
|
||||
52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529,
|
||||
62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647,
|
||||
72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716,
|
||||
82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316,
|
||||
92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503,
|
||||
102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550,
|
||||
112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529,
|
||||
122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529,
|
||||
132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291,
|
||||
142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216,
|
||||
152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387,
|
||||
162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448,
|
||||
172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582,
|
||||
182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406,
|
||||
192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617,
|
||||
202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710,
|
||||
212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690,
|
||||
222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503,
|
||||
232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550,
|
||||
242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529,
|
||||
252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614,
|
||||
);
|
||||
|
||||
|
||||
$_cr = array(
|
||||
array(231, 632, 500), // half-width
|
||||
array(8718, 8718, 500),
|
||||
array(9738, 9757, 250), // quarter-width
|
||||
array(9758, 9778, 333), // third-width
|
||||
array(12063, 12087, 500),
|
||||
);
|
||||
foreach($_cr as $_r) {
|
||||
for($i = $_r[0]; $i <= $_r[1]; $i++) {
|
||||
$cw[$i+31] = $_r[2];
|
||||
}
|
||||
}
|
||||
$this->SJIS_widths=$cw;
|
||||
|
||||
// Korean
|
||||
$cw = array(
|
||||
32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500,
|
||||
42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625,
|
||||
52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833,
|
||||
62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750,
|
||||
72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750,
|
||||
82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500,
|
||||
92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583,
|
||||
102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583,
|
||||
112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625,
|
||||
122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750,
|
||||
);
|
||||
$_cr = array(
|
||||
array(8094, 8190, 500)
|
||||
);
|
||||
foreach($_cr as $_r) {
|
||||
for($i = $_r[0]; $i <= $_r[1]; $i++) {
|
||||
$cw[$i+31] = $_r[2];
|
||||
}
|
||||
}
|
||||
$this->UHC_widths=$cw;
|
||||
|
||||
?>
|
||||
99
metadata/include/MPDF54/includes/functions.php
Normal file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
|
||||
function _strspn($str1, $str2, $start=null, $length=null) {
|
||||
$numargs = func_num_args();
|
||||
if ($numargs == 2) {
|
||||
return strspn($str1, $str2);
|
||||
}
|
||||
else if ($numargs == 3) {
|
||||
return strspn($str1, $str2, $start);
|
||||
}
|
||||
else {
|
||||
return strspn($str1, $str2, $start, $length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function _strcspn($str1, $str2, $start=null, $length=null) {
|
||||
$numargs = func_num_args();
|
||||
if ($numargs == 2) {
|
||||
return strcspn($str1, $str2);
|
||||
}
|
||||
else if ($numargs == 3) {
|
||||
return strcspn($str1, $str2, $start);
|
||||
}
|
||||
else {
|
||||
return strcspn($str1, $str2, $start, $length);
|
||||
}
|
||||
}
|
||||
|
||||
function _fgets (&$h, $force=false) {
|
||||
$startpos = ftell($h);
|
||||
$s = fgets($h, 1024);
|
||||
if ($force && preg_match("/^([^\r\n]*[\r\n]{1,2})(.)/",trim($s), $ns)) {
|
||||
$s = $ns[1];
|
||||
fseek($h,$startpos+strlen($s));
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
// For PHP4 compatability
|
||||
if(!function_exists('str_ireplace')) {
|
||||
function str_ireplace($search,$replace,$subject) {
|
||||
$search = preg_quote($search, "/");
|
||||
return preg_replace("/".$search."/i", $replace, $subject);
|
||||
}
|
||||
}
|
||||
if(!function_exists('htmlspecialchars_decode')) {
|
||||
function htmlspecialchars_decode ($str) {
|
||||
return strtr($str, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
|
||||
}
|
||||
}
|
||||
|
||||
function PreparePreText($text,$ff='//FF//') {
|
||||
// mPDF 5.0.053
|
||||
$text = htmlspecialchars($text);
|
||||
if ($ff) { $text = str_replace($ff,'</pre><formfeed /><pre>',$text); }
|
||||
return ('<pre>'.$text.'</pre>');
|
||||
}
|
||||
|
||||
if(!function_exists('strcode2utf')){
|
||||
function strcode2utf($str,$lo=true) {
|
||||
//converts all the &#nnn; and &#xhhh; in a string to Unicode
|
||||
if ($lo) { $lo = 1; } else { $lo = 0; }
|
||||
$str = preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\\1',{$lo})",$str);
|
||||
$str = preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\\1',{$lo})",$str);
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
||||
if(!function_exists('code2utf')){
|
||||
function code2utf($num,$lo=true){
|
||||
//Returns the utf string corresponding to the unicode value
|
||||
//added notes - http://uk.php.net/utf8_encode
|
||||
if ($num<128) {
|
||||
if ($lo) return chr($num);
|
||||
else return '&#'.$num.';'; // i.e. no change
|
||||
}
|
||||
if ($num<2048) return chr(($num>>6)+192).chr(($num&63)+128);
|
||||
if ($num<65536) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
|
||||
if ($num<2097152) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
|
||||
return '?';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!function_exists('codeHex2utf')){
|
||||
function codeHex2utf($hex,$lo=true){
|
||||
$num = hexdec($hex);
|
||||
if (($num<128) && !$lo) return '&#x'.$hex.';'; // i.e. no change
|
||||
return code2utf($num,$lo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
||||