updated to v6.3.5

This commit is contained in:
Llewellyn van der Merwe 2020-06-14 02:47:05 +02:00
parent aa5dc2c127
commit fd4acc640b
Signed by: Llewellyn
GPG Key ID: EFC0C720A240551C
19 changed files with 249 additions and 15710 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea

View File

@ -6,6 +6,8 @@
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
2002-2019 Nicola Asuni - Tecnick.com LTD
**********************************************************************
**********************************************************************

View File

@ -6,7 +6,7 @@
* **category** Library
* **author** Nicola Asuni <info@tecnick.com>
* **copyright** 2002-2018 Nicola Asuni - Tecnick.com LTD
* **copyright** 2002-2020 Nicola Asuni - Tecnick.com LTD
* **license** http://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE.TXT)
* **link** http://www.tcpdf.org
* **source** https://github.com/tecnickcom/TCPDF

1
VERSION Normal file
View File

@ -0,0 +1 @@
6.3.5

View File

@ -1,6 +1,6 @@
{
"name": "tecnickcom/tcpdf",
"version": "6.2.26",
"version": "6.3.5",
"homepage": "http://www.tcpdf.org/",
"type": "library",
"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
@ -13,7 +13,7 @@
"pdf417",
"barcodes"
],
"license": "LGPL-3.0",
"license": "LGPL-3.0-only",
"authors": [
{
"name": "Nicola Asuni",

View File

@ -1,863 +0,0 @@
2007-08-20 00:48 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlArabiya.sfd: Diagonal marks
2007-08-20 00:25 Khaled Hosny <khaledhosny@eglug.org>
* README: Added Release notes, preparing for 2.0 release.
2007-08-19 23:19 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlArabiya.sfd: Stack diacritics definition
2007-08-19 22:56 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Tholoth.sfd:
* Added 'rlg' lookup table and subtable and registered stacked
diacritic ligatures.
* kasrah and kasratan were too close to the base glyph, fixed.
2007-08-19 22:28 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlHor.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlYarmook.sfd, ae_Arab.sfd, ae_Cortoba.sfd, ae_Furat.sfd,
ae_Graph.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd,
ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd,
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd,
ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd: Scaled up
diacritic glyphs, this makes them more readable.
2007-08-19 22:03 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlArabiya.sfd: New sukun, removed wrong anchors from
kasrah
2007-08-19 20:26 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMothnna-Bold.sfd: Added 'rlg' lookup table and subtable
and registered stacked diacritic ligatures.
2007-08-19 18:28 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlMothnna-Bold.sfd: Fixed shaddas
2007-08-19 18:01 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlMothnna-Bold.sfd: Stacked diacrititcs
2007-08-19 14:49 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: Removed mark2mark anchors, now we use
ligature substitution for stacked diacritics instead of anchors.
Added 'rlg' lookup table and subtable and registered stacked
diacritic ligatures.
2007-08-19 02:30 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlArabiya.sfd: Stacked diacritics added
2007-08-19 01:53 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ArabicReesha.sfd:
* Added to new ligatures; <fathatan><alef isolated> and
<fathatan><alef final>.
* Small fixes to Jeem isolated width.
2007-08-18 21:30 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlMothnna-Bold.sfd: Diacritics fixed except allahisolated
ligature
2007-08-18 20:13 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMothnna-Bold.sfd: Removed old, buggy, anchors and auto
added new ones, needs manual editing.
2007-08-18 19:11 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlMothnna-Bold.sfd: New shadda, modified sukun to meet the
other marks
2007-08-18 17:20 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_AlArabiya.sfd: New diacritics for ae_AlArabiya.sfd
2007-08-17 23:19 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Tholoth.sfd: ae_Tholoth.sfd: Added glyphs U+FC5E - U+FC62.
2007-08-16 14:56 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMohanad.sfd: AlMohanad: Fixed U+FEDA (kaf final) to take
the shape of ordinary final kaf rather than the long variant.
2007-08-15 14:25 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ArabicReesha.sfd: ArabicReesha.sfd: Fixed a bug that caused
some isolated glyphs to have more space to the right.
2007-08-15 12:02 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd,
ae_Electron.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Khalid.sfd,
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Sharjah.sfd,
ae_Tarablus.sfd, ae_Tholoth.sfd: Add new 'liga' table without
"Ignore Combining Marks" flag, allahisolated ligature belong to that
table now, so when allahisolated has a tashkil on it, the ligature
will be ignored and will use normal glyphs instead.
2007-08-15 11:05 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Haramain.sfd,
ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Sindbad.sfd,
ae_Tarablus.sfd: Added "Ignore Combining Marks flag" to 'liga'
table.
2007-08-15 10:35 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ArabicReesha.sfd: ArabicReesha: New font based on SIL's
Scheherazade, first version.
2007-08-15 00:23 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: Shadda was missing mark2mark below anchor.
2007-08-14 23:28 Mohammed Adnene Trojette <adn@diwi.org>
* Makefile: GPL has been removed
2007-08-14 23:21 Mohammed Adnene Trojette <adn@diwi.org>
* COPYING, README: Copyright informations
2007-08-14 23:05 Khaled Hosny <khaledhosny@eglug.org>
* COPYING: Updated to refer to FreeFonts project.
2007-08-14 22:56 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Salem.sfd: Updated the copyright statement, to mention GPL
font exception and FreeFonts project, again
2007-08-14 22:43 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Salem.sfd: Revert to 1.7 and added Allah anchors(again).
2007-08-14 21:35 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Tholoth.sfd: Minor positioning fix
2007-08-14 21:12 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Tholoth.sfd: Added missed U+0647.
2007-08-14 18:37 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Updated the
copyright statement, to mention GPL font exception and FreeFonts
project.
2007-08-13 22:18 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlManzomah.sfd,
ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd,
ae_Arab.sfd, ae_Cortoba.sfd, ae_Electron.sfd, ae_Furat.sfd,
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
ae_Hor.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Mashq-Bold.sfd,
ae_Mashq.sfd, ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd,
ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd,
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd,
ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd:
* Add missed mark2mark anchors in the affected files, though we
aren't going to use this on the long run, but I'll leave that task
for 2.1 .
* Reencoded all files to unicode glyph map.
2007-08-13 14:47 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Petra.sfd, ae_Shado.sfd: ae_Petra.sfd, ae_Shado.sfd:
Full support for diacritics positioning by Osama Khalid.
2007-08-13 10:38 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Hor.sfd, ae_Sharjah.sfd:
* ae_Hor: Full support for diacritics positioning by Fahd.
* ae_Sharjah: Full support for diacritics positioning by Fahd.
2007-08-13 05:34 Youssef Chahibi <chahibi@gmail.com>
* sfd/: ae_Nice.sfd, ae_Tarablus.sfd: Full diacritics supports,
needs a check
2007-08-13 05:24 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Nagham.sfd: Full diacritics supports, needs a check
2007-08-13 05:08 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Haramain.sfd: Full diacritics supports, needs a check
2007-08-13 04:42 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Graph.sfd: Full diacritics supports, needs a check
2007-08-13 04:38 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Granada.sfd: Full diacritics supports, needs a check
2007-08-13 03:28 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Ostorah.sfd: ae_Ostorah.sfd: Full support for diacritic
positioning.
2007-08-13 02:13 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Haramain.sfd: Done: replaced ugly marks, repositioned
below marks
2007-08-13 01:31 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Graph.sfd: Done, needs to be checked
2007-08-13 01:16 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Granada.sfd: Done, needs to be checked
2007-08-12 23:05 Youssef Chahibi <chahibi@gmail.com>
* sfd/: ae_Tarablus.sfd: First steps
2007-08-12 18:24 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Electron.sfd: ae_Electron.sfd: Full support for diacritic
positioning.
2007-08-12 16:06 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Hani.sfd: ae_Hani.sfd: Full support for diacritic
positioning by Osama Khaled
2007-08-11 23:33 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Ouhod-Bold.sfd: ae_Ouhod-Bold.sfd: Full support for
diacritic positioning.
2007-08-11 21:28 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Rasheeq-Bold.sfd: ae_Rasheeq-Bold.sfd: Full diacritic
support.
2007-08-11 15:09 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Hor.sfd: some fixes
2007-08-11 14:55 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd,
ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Rasheeq-Bold.sfd, ae_Shado.sfd,
ae_Sharjah.sfd, ae_Tarablus.sfd: More tweaking, it is ready for
manual editing now (I hope so).
2007-08-11 11:08 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Hor.sfd: Fahd: I updated the anchor points, please use
this instead of the old version.
2007-08-11 10:45 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd,
ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
ae_Shado.sfd, ae_Sharjah.sfd, ae_Tarablus.sfd: Replaced old
anchor points with new ones and better automatic positioning using
the improved addanchors.pe script. Please update your local copy
before doing any further work, this will make our life easier.
2007-08-11 10:25 Khaled Hosny <khaledhosny@eglug.org>
* tools/addanchors.pe: Now X and Y values are computed to produce a
far better result, the needed manual tweaking is very little now.
2007-08-10 01:27 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Nada.sfd: ae_Nada.sfd: Full support for diacritic
positioning by Fahd AlSaidi.
2007-08-07 23:47 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlYarmook.sfd:
* ae_AlYarmook.sfd: Changed font name and other related feilds from
AlYermook to AlYarmook
* ae_AlYarmook.sfd: Full support for diacritic positioning.
2007-08-07 00:22 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Mashq-Bold.sfd: sfd/ae_Mashq-Bold.sfd: Full support for
diacritic positioning.
2007-08-06 02:58 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Rehan.sfd: Mark to mark ligatures were too close, fixed.
2007-08-04 20:14 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Rehan.sfd: ae_Rehan.sfd: Full support for diacritic
positioning.
2007-08-04 01:22 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Mashq.sfd: ae_Mashq.sfd: Full support for diacritic
positioning.
2007-08-04 01:19 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Khalid.sfd: Reencoded the file to Unicode.
2007-08-04 01:16 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Kayrawan.sfd: Fixed ArabicMark2MarkBelow anchor point.
Reencoded the file to Unicode.
2007-08-03 06:12 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Kayrawan.sfd: Fixed two letters ligatures diacritics
2007-08-03 05:55 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Kayrawan.sfd: Added لله ligature diacritics
2007-08-03 05:01 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Kayrawan.sfd: Ignore combining marks set
2007-08-03 04:51 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Kayrawan.sfd: Full diacritics support -
ArabicMark2MarkBelow need to be checked
2007-08-03 02:40 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Salem.sfd: Added and positioned anchors for Allah glyph.
2007-08-03 02:32 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Dimnah.sfd: ae_Dimnah.sfd: Full support for diacritic
positioning.
2007-08-03 01:26 Youssef Chahibi <chahibi@gmail.com>
* sfd/ae_Kayrawan.sfd: First steps in font editing
2007-08-03 00:10 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Salem.sfd: ae_Salem.sfd: Full diacritic support.
2007-08-02 04:50 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Arab.sfd: Fixed ligatures anchor points.
2007-08-02 02:15 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Arab.sfd: Support for diacritic positioning by Osama
Khalid.
2007-08-01 23:09 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlManzomah.sfd: ae_AlManzomah.sfd: Full support for
diacritic positioning.
2007-08-01 01:56 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Khalid.sfd: ae_Khalid.sfd: Full support for diacritic
positioning.
2007-07-28 11:43 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMateen-Bold.sfd: ae_AlMateen-Bold.sfd: Full support for
diacritic positioning.
2007-07-27 22:16 Afief Halumi <afief.h@gmail.com>
* Makefile: New make targets as requested by KhaledHosney.
2007-07-27 21:04 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlHor.sfd: ae_AlHor.sfd: Full diacritic support
2007-07-26 10:14 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Jet.sfd: ./sfd/ae_Jet.sfd: Full diacritic support.
2007-07-26 01:38 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Japan.sfd: Aeif, you forgot the ligatures and letter beh
isolated, fixed
2007-07-25 14:41 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Metal.sfd: Add anchor points for لله ligature
2007-07-25 12:52 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Metal.sfd: ae_Metal: Full diacritic support.
2007-07-25 01:36 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Japan.sfd: ae_Japan: Full diacritic support.
2007-07-25 01:28 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Cortoba.sfd: minor fix
2007-07-25 00:24 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Cortoba.sfd:
----------------------------------------------------------------------ae_Cortoba.sfd: Full support for diacritic positioning.
2007-07-24 18:34 Khaled Hosny <khaledhosny@eglug.org>
* tools/generate.sh: not needed any more, use 'make' instead
2007-07-24 18:31 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Sindbad.sfd: Add anchor points for لله ligature
2007-07-24 18:04 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: Fixed ligatures anchor points
2007-07-24 17:55 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Furat.sfd: Add anchor points for لله ligature
2007-07-23 23:16 Khaled Hosny <khaledhosny@eglug.org>
* README, README.cvs:
- new readme file to explain how to build ttf onts from our cvs
tree.
2007-07-23 23:01 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlBattar.sfd: few fixes in the diacritic positions
2007-07-23 13:56 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlBattar.sfd: ae_AlBattar.sfd, full support for diacritic
positioning.
2007-07-23 05:28 Afief Halumi <afief.h@gmail.com>
* Makefile: Now doesn't rebuild untouched fonts, should save some
server cycles.
2007-07-23 04:00 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Sindbad.sfd: Unchecked 'compact' option
2007-07-23 00:16 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Sindbad.sfd:
- Add the missed "Ignore Combining Marks" feature to Arabic liga
lookuptable, Afief please remember this.
- Few changes in ArabicBelow anchor points placement.
2007-07-22 14:42 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlBattar.sfd: Diacritic support, for isolated glyphs only.
2007-07-22 00:43 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Sindbad.sfd: Full support for diacritic positioning.
2007-07-21 21:38 Khaled Hosny <khaledhosny@eglug.org>
* Makefile: fixed "clean" to remove the bzipped archive.
2007-07-21 21:34 Khaled Hosny <khaledhosny@eglug.org>
* Makefile:
- All files are under ae_fonts dir now.
- The archive is bzipped.
2007-07-21 20:05 Afief Halumi <afief.h@gmail.com>
* Makefile: Commited the Makefile. Hope you like it.
2007-07-21 19:11 Khaled Hosny <khaledhosny@eglug.org>
* tools/generate.pe: Add a usage note.
2007-07-21 19:09 Khaled Hosny <khaledhosny@eglug.org>
* tools/generate.pe: Now accepts a 2nd argument for the .ttf file
name.
2007-07-21 18:52 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Tholoth.sfd: A few fixes in positioning.
2007-07-21 16:48 Afief Halumi <afief.h@gmail.com>
* sfd/ae_Tholoth.sfd: Finished work on ae_Tholoth.sfd; Added a few
better glyphs and full support for diacritic positioning.
2007-07-21 00:04 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Tholoth.sfd:
Diacritics work by afief
2007-07-19 23:49 Khaled Hosny <khaledhosny@eglug.org>
* tools/addanchors.pe: Add support for mark2glyph anchor points,
thanks George Williams for fixing fontforge's bug.
2007-07-19 23:16 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd,
ae_AlMateen-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Granada.sfd,
ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Hor.sfd,
ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd,
ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd,
ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd,
ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd,
ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd,
ae_Tholoth.sfd:
- Removed Cyrillic and Greek glyphs, this makes the font more
lighter.
- Add all needed anchor points, still needs to be manually adjusted.
2007-07-19 23:15 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd, ae_Furat.sfd:
Removed Cyrillic and Greek glyphs, this makes the font more lighter.
2007-07-19 23:12 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: full support for diacritic positioning
2007-07-18 14:57 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd:
Full mark2base and mark2mark anchor points
2007-07-16 20:53 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Nada.sfd:
Removed obsolete reference to Btstream copyright, we don't include
any Bitstream copyrighted glyphs anymore.
2007-07-16 20:03 Khaled Hosny <khaledhosny@eglug.org>
* tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe:
use "#!/usr/bin/env fontforge" instead of "#!/usr/bin/fontforge"
2007-07-16 13:47 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMohanad.sfd:
Full support for proper diacritics positioning
2007-07-16 00:16 Khaled Hosny <khaledhosny@eglug.org>
* tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe: Now the
scripts require Fotforge 20070501 or newer, older versions use older
SFD formate which we don't suport.
2007-07-16 00:09 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: Add support for proper diacritic
positioning by Afief Halumi, still in progress
2007-07-15 23:48 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Furat.sfd: full support for diacritic positioning
2007-07-15 20:08 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd,
ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd,
ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd,
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: removed traces
of ae_ prefix
2007-07-15 19:44 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlArabiya.sfd: removed traces of ae_ prefix
2007-07-13 20:14 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMothnna-Bold.sfd:
- Removed traces of ae_ prefix.
- Full support for proper Arabic diacritics positioning.
2007-07-13 19:38 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Furat.sfd:
- Removed traces of ae_ prefix.
- add anchor points for Arabic diacritics, needs manual tuning.
2007-07-13 19:09 Khaled Hosny <khaledhosny@eglug.org>
* tools/: addanchors.pe, addlookups.pe: scripts to assist adding
lookup tables and anchor points needed for proper diacritics
(harakat) support.
2007-07-01 03:31 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Removed ae_
prefix from all fonts, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=361965
2007-06-30 22:02 Khaled Hosny <khaledhosny@eglug.org>
* README: Initial README file
2007-06-30 20:20 Khaled Hosny <khaledhosny@eglug.org>
* tools/: generate.pe, generate.sh: Scripts to generate TTF files
from SFD ones.
2007-06-30 19:58 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Tarablus.sfd: add the missed U+F6BE that caused bug in 'j'
glyph, CVS_SILENT
2007-06-30 19:48 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Sindbad.sfd:
add the missed U+F6BE that caused bug in 'j' glyph, CVS_SILENT
2007-06-23 22:29 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Shado.sfd, ae_Sharjah.sfd: add the missed U+F6BE that
caused bug in 'j' glyph
2007-06-23 22:26 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd: add the
missed U+F6BE that caused bug in 'j' glyph
2007-06-23 22:22 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd,
ae_Petra.sfd: add the missed U+F6BE that caused bug in 'j' glyph
2007-06-23 22:19 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd: add the missed
U+F6BE that caused bug in 'j' glyph
2007-06-23 22:16 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
ae_Mashq.sfd: add the missed U+F6BE that caused bug in 'j' glyph
2007-06-23 22:12 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd: add
the missed U+F6BE that caused bug in 'j' glyph
2007-06-23 22:09 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd: add the missed
U+F6BE that caused bug in 'j' glyph
2007-06-23 22:05 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Electron.sfd, ae_Furat.sfd: add the missed U+F6BE that
caused bug in 'j' glyph
2007-06-23 22:02 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Cortoba.sfd, ae_Dimnah.sfd: add the missed U+F6BE that
caused bug in 'j' glyph
2007-06-23 21:59 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlYarmook.sfd, ae_Arab.sfd: add the missed U+F6BE that
caused bug in 'j' glyph
2007-06-23 21:19 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlMothnna-Bold.sfd: Added the missed U+U+F6BE glyphs which
caused a bug in "j" glyph
2007-06-23 18:30 Khaled Hosny <khaledhosny@eglug.org>
* COPYING: -Moved GPL to a separate file. -Added GPL font
exception to COPYING.
2007-06-23 18:12 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_Tholoth.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 18:07 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd,
ae_Tarablus.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 18:04 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd,
ae_Salem.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 18:01 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:57 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Metal.sfd, ae_Nada.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:54 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
ae_Mashq.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:51 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:47 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Furat.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:43 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd,
ae_Electron.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:40 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-23 17:37 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
ae_AlManzomah.sfd:
- New glyphs (covering every thing outside Arabic block) based on
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
- Arabic diacritic marks (harakat) are set to have zero advance
width and OT class as 'mark' nstead of 'base glyph'
2007-06-21 05:57 Khaled Hosny <khaledhosny@eglug.org>
* tools/cp.pe: Simple ff script to copy a specific range of glyphs
from on font to another.
2007-06-16 01:54 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMothnna-Bold.sfd:
- Identical glyphs (or parts of glyphs) are referenced to one common
glyph instead of copying the same shape each time.
- Add few missed Arabic glyphs, DOTLESS QAF, DOTLESS BEH, HAMZA
ABOVE, HAMZA BELOW and EXTENDED ARABIC-INDIC DIGIT ZERO, ONE, TWO,
THREE, SEVEN, EIGHT, NINE.
2007-06-15 07:10 Khaled Hosny <khaledhosny@eglug.org>
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Preparing to
work
2007-06-02 21:25 Khaled Hosny <khaledhosny@eglug.org>
* sfd/ae_AlMothnna-Bold.sfd:
- A modified version of "AlMothnna", partially fixes the vowel marks
issues.
- This is fontforg's sfd file.
2004-07-10 09:48 nadim
* COPYING: + Minor mods to the GPL license mention (their address
changed) + Added disclaimer + Renamed file from license.txt for
consistency

File diff suppressed because it is too large Load Diff

View File

@ -629,7 +629,7 @@ class Datamatrix {
if ($numch[ENC_C40] == $numch[ENC_X12]) {
$k = ($pos + $charscount + 1);
while ($k < $data_length) {
$tmpchr = ord($data{$k});
$tmpchr = ord($data[$k]);
if ($this->isCharMode($tmpchr, ENC_X12)) {
return ENC_X12;
} elseif (!($this->isCharMode($tmpchr, ENC_X12) OR $this->isCharMode($tmpchr, ENC_C40))) {

View File

@ -878,7 +878,7 @@ class PDF417 {
$txtarr = array(); // array of characters and sub-mode switching characters
$codelen = strlen($code);
for ($i = 0; $i < $codelen; ++$i) {
$chval = ord($code{$i});
$chval = ord($code[$i]);
if (($k = array_search($chval, $this->textsubmodes[$submode])) !== false) {
// we are on the same sub-mode
$txtarr[] = $k;
@ -888,7 +888,7 @@ class PDF417 {
// search new sub-mode
if (($s != $submode) AND (($k = array_search($chval, $this->textsubmodes[$s])) !== false)) {
// $s is the new submode
if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code{($i + 1)}), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) {
if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code[($i + 1)]), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) {
// shift (temporary change only for this char)
if ($s == 3) {
// shift to puntuaction
@ -952,7 +952,7 @@ class PDF417 {
$cw = array_merge($cw, $cw6);
} else {
for ($i = 0; $i < $sublen; ++$i) {
$cw[] = ord($code{$i});
$cw[] = ord($code[$i]);
}
}
$code = $rest;

View File

@ -358,7 +358,7 @@ class TCPDF_COLORS {
$color_code = self::$webcolor[$color];
} else {
// spot color
$returncolor = self::getSpotColor($color, $spotc);
$returncolor = self::getSpotColor($hcolor, $spotc);
if ($returncolor === false) {
$returncolor = $defcol;
}

View File

@ -279,7 +279,7 @@ class TCPDF_FILTERS {
// convert string to binary string
$bitstring = '';
for ($i = 0; $i < $data_length; ++$i) {
$bitstring .= sprintf('%08b', ord($data{$i}));
$bitstring .= sprintf('%08b', ord($data[$i]));
}
// get the number of bits
$data_length = strlen($bitstring);
@ -376,7 +376,7 @@ class TCPDF_FILTERS {
$i = 0;
while($i < $data_length) {
// get current byte value
$byte = ord($data{$i});
$byte = ord($data[$i]);
if ($byte == 128) {
// a length value of 128 denote EOD
break;
@ -389,7 +389,7 @@ class TCPDF_FILTERS {
} else {
// if length is in the range 129 to 255,
// the following single byte shall be copied 257 - length (2 to 128) times during decompression
$decoded .= str_repeat($data{($i + 1)}, (257 - $byte));
$decoded .= str_repeat($data[($i + 1)], (257 - $byte));
// move to next block
$i += 2;
}

View File

@ -1664,6 +1664,7 @@ class TCPDF_FONTS {
* @public static
*/
public static function unichr($c, $unicode=true) {
$c = intval($c);
if (!$unicode) {
return chr($c);
} elseif ($c <= 0x7F) {

View File

@ -311,7 +311,7 @@ class TCPDF_IMAGES {
if ($n > 0) {
$trns = array();
for ($i = 0; $i < $n; ++ $i) {
$trns[] = ord($t{$i});
$trns[] = ord($t[$i]);
}
}
}

View File

@ -1,9 +1,9 @@
<?php
//============================================================+
// File name : tcpdf_static.php
// Version : 1.1.3
// Version : 1.1.4
// Begin : 2002-08-03
// Last Update : 2015-04-28
// Last Update : 2019-11-01
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
@ -55,7 +55,7 @@ class TCPDF_STATIC {
* Current TCPDF version.
* @private static
*/
private static $tcpdf_version = '6.2.26';
private static $tcpdf_version = '6.3.5';
/**
* String alias for total number of pages.
@ -1829,6 +1829,8 @@ class TCPDF_STATIC {
*/
public static function url_exists($url) {
$crs = curl_init();
// encode query params in URL to get right response form the server
$url = self::encodeUrlQuery($url);
curl_setopt($crs, CURLOPT_URL, $url);
curl_setopt($crs, CURLOPT_NOBODY, true);
curl_setopt($crs, CURLOPT_FAILONERROR, true);
@ -1846,6 +1848,26 @@ class TCPDF_STATIC {
return ($code == 200);
}
/**
* Encode query params in URL
*
* @param string $url
* @return string
* @since 6.3.3 (2019-11-01)
* @public static
*/
public static function encodeUrlQuery($url) {
$urlData = parse_url($url);
if (isset($urlData['query']) && $urlData['query']) {
$urlQueryData = [];
parse_str(urldecode($urlData['query']), $urlQueryData);
$updatedUrl = $urlData['scheme'] . '://' . $urlData['host'] . $urlData['path'] . '?' . http_build_query($urlQueryData);
} else {
$updatedUrl = $url;
}
return $updatedUrl;
}
/**
* Wrapper for file_exists.
* Checks whether a file or directory exists.
@ -1926,10 +1948,10 @@ class TCPDF_STATIC {
$alt = array_unique($alt);
foreach ($alt as $path) {
if (!self::file_exists($path)) {
return false;
continue;
}
$ret = @file_get_contents($path);
if ($ret !== false) {
if ( $ret != false ) {
return $ret;
}
// try to use CURL for URLs

196
tcpdf.php
View File

@ -1,13 +1,13 @@
<?php
//============================================================+
// File name : tcpdf.php
// Version : 6.2.26
// Version : 6.3.2
// Begin : 2002-08-03
// Last Update : 2018-09-14
// Last Update : 2019-09-20
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
// Copyright (C) 2002-2018 Nicola Asuni - Tecnick.com LTD
// Copyright (C) 2002-2019 Nicola Asuni - Tecnick.com LTD
//
// This file is part of TCPDF software library.
//
@ -45,7 +45,7 @@
// * font subsetting;
// * methods to publish some XHTML + CSS code, Javascript and Forms;
// * images, graphic (geometric figures) and transformation methods;
// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)
// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html)
// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
// * automatic page header and footer management;
@ -80,7 +80,7 @@
* <li>font subsetting;</li>
* <li>methods to publish some XHTML + CSS code, Javascript and Forms;</li>
* <li>images, graphic (geometric figures) and transformation methods;
* <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)</li>
* <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html)</li>
* <li>1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;</li>
* <li>JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;</li>
* <li>automatic page header and footer management;</li>
@ -104,7 +104,7 @@
* Tools to encode your unicode fonts are on fonts/utils directory.</p>
* @package com.tecnick.tcpdf
* @author Nicola Asuni
* @version 6.2.26
* @version 6.3.2
*/
// TCPDF configuration
@ -128,7 +128,7 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php');
* TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
* @package com.tecnick.tcpdf
* @brief PHP class for generating PDF documents without requiring external extensions.
* @version 6.2.26
* @version 6.3.2
* @author Nicola Asuni - info@tecnick.com
* @IgnoreAnnotation("protected")
* @IgnoreAnnotation("public")
@ -1760,6 +1760,13 @@ class TCPDF {
*/
protected $pdfa_mode = false;
/**
* version of PDF/A mode (1 - 3).
* @protected
* @since 6.2.26 (2019-03-12)
*/
protected $pdfa_version = 1;
/**
* Document creation date-time
* @protected
@ -1781,6 +1788,13 @@ class TCPDF {
*/
protected $custom_xmp = '';
/**
* Custom XMP RDF data.
* @protected
* @since 6.3.0 (2019-09-19)
*/
protected $custom_xmp_rdf = '';
/**
* Overprint mode array.
* (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008).
@ -1834,7 +1848,7 @@ class TCPDF {
* @param $unicode (boolean) TRUE means that the input text is unicode (default = true)
* @param $encoding (string) Charset encoding (used only when converting back html entities); default is UTF-8.
* @param $diskcache (boolean) DEPRECATED FEATURE
* @param $pdfa (boolean) If TRUE set the document to PDF/A mode.
* @param $pdfa (integer) If not false, set the document to PDF/A mode and the good version (1 or 3).
* @public
* @see getPageSizeFromFormat(), setPageFormat()
*/
@ -1850,8 +1864,14 @@ class TCPDF {
$this->font_obj_ids = array();
$this->page_obj_id = array();
$this->form_obj_id = array();
// set pdf/a mode
$this->pdfa_mode = $pdfa;
if ($pdfa != false) {
$this->pdfa_mode = true;
$this->pdfa_version = $pdfa; // 1 or 3
} else
$this->pdfa_mode = false;
$this->force_srgb = false;
// set language direction
$this->rtl = false;
@ -1960,7 +1980,7 @@ class TCPDF {
// set default JPEG quality
$this->jpeg_quality = 75;
// initialize some settings
TCPDF_FONTS::utf8Bidi(array(''), '', false, $this->isunicode, $this->CurrentFont);
TCPDF_FONTS::utf8Bidi(array(), '', false, $this->isunicode, $this->CurrentFont);
// set default font
$this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
$this->setHeaderFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt));
@ -1986,6 +2006,7 @@ class TCPDF {
$this->default_graphic_vars = $this->getGraphicVars();
$this->header_xobj_autoreset = false;
$this->custom_xmp = '';
$this->custom_xmp_rdf = '';
// Call cleanup method after script execution finishes or exit() is called.
// NOTE: This will not be executed if the process is killed with a SIGTERM or SIGKILL signal.
register_shutdown_function(array($this, '_destroy'), true);
@ -2828,10 +2849,13 @@ class TCPDF {
* @since 1.4
*/
public function SetCompression($compress=true) {
$this->compress = false;
if (function_exists('gzcompress')) {
$this->compress = $compress ? true : false;
} else {
$this->compress = false;
if ($compress) {
if ( !$this->pdfa_mode) {
$this->compress = true;
}
}
}
}
@ -4691,14 +4715,14 @@ class TCPDF {
* Defines the page and position a link points to.
* @param $link (int) The link identifier returned by AddLink()
* @param $y (float) Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
* @param $page (int) Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages.
* @param $page (int|string) Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages.
* @public
* @since 1.5
* @see AddLink()
*/
public function SetLink($link, $y=0, $page=-1) {
$fixed = false;
if (!empty($page) AND ($page[0] == '*')) {
if (!empty($page) AND (substr($page, 0, 1) == '*')) {
$page = intval(substr($page, 1));
// this page number will not be changed when moving/add/deleting pages
$fixed = true;
@ -4807,7 +4831,7 @@ class TCPDF {
$this->PageAnnots[$page] = array();
}
$this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
if (!$this->pdfa_mode) {
if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) {
if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS']))
AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS']))
AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
@ -4833,8 +4857,8 @@ class TCPDF {
* @see Annotation()
*/
protected function _putEmbeddedFiles() {
if ($this->pdfa_mode) {
// embedded files are not allowed in PDF/A mode
if ($this->pdfa_mode && $this->pdfa_version != 3) {
// embedded files are not allowed in PDF/A mode version 1 and 2
return;
}
reset($this->embeddedfiles);
@ -4847,7 +4871,10 @@ class TCPDF {
$this->efnames[$filename] = $filedata['f'].' 0 R';
// embedded file specification object
$out = $this->_getobj($filedata['f'])."\n";
$out .= '<</Type /Filespec /F '.$this->_datastring($filename, $filedata['f']).' /EF <</F '.$filedata['n'].' 0 R>> >>';
$out .= '<</Type /Filespec /F '.$this->_datastring($filename, $filedata['f']);
$out .= ' /UF '.$this->_datastring($filename, $filedata['f']);
$out .= ' /AFRelationship /Source';
$out .= ' /EF <</F '.$filedata['n'].' 0 R>> >>';
$out .= "\n".'endobj';
$this->_out($out);
// embedded file object
@ -4856,6 +4883,11 @@ class TCPDF {
$data = gzcompress($data);
$filter = ' /Filter /FlateDecode';
}
if ($this->pdfa_version == 3) {
$filter = ' /Subtype /text#2Fxml';
}
$stream = $this->_getrawstream($data, $filedata['n']);
$out = $this->_getobj($filedata['n'])."\n";
$out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <</Size '.$rawsize.'>> >>';
@ -6219,12 +6251,12 @@ class TCPDF {
* $this->setPage($page);
* if ($page == $start_page) {
* // first page
* $height = $this->h - $start_y - $this->bMargin;
* $height += $this->h - $start_y - $this->bMargin;
* } elseif ($page == $end_page) {
* // last page
* $height = $end_y - $this->tMargin;
* $height += $end_y - $this->tMargin;
* } else {
* $height = $this->h - $this->tMargin - $this->bMargin;
* $height += $this->h - $this->tMargin - $this->bMargin;
* }
* }
* }
@ -7133,31 +7165,20 @@ class TCPDF {
$info['i'] = $this->setImageBuffer($file, $info);
}
// set alignment
$this->img_rb_x = $x + $w;
$this->img_rb_y = $y + $h;
// set alignment
if ($this->rtl) {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x - $w;
}
$this->img_rb_x = $ximg;
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
if ($palign == 'L') {
$ximg = $this->lMargin;
} elseif ($palign == 'C') {
$ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2;
} elseif ($palign == 'R') {
$ximg = $this->w - $this->rMargin - $w;
} else {
$ximg = $x;
}
$this->img_rb_x = $ximg + $w;
$ximg = $x;
}
if ($ismask OR $hidden) {
// image is not displayed
return $info['i'];
@ -7737,6 +7758,7 @@ class TCPDF {
return '';
}
protected static $cleaned_ids = array();
/**
* Unset all class variables except the following critical variables.
* @param $destroyall (boolean) if true destroys all class variables, otherwise preserves critical variables.
@ -7749,11 +7771,26 @@ class TCPDF {
if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
mb_internal_encoding($this->internal_encoding);
}
if (isset(self::$cleaned_ids[$this->file_id])) {
$destroyall = false;
}
if ($destroyall AND !$preserve_objcopy) {
self::$cleaned_ids[$this->file_id] = true;
// remove all temporary files
$tmpfiles = glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*');
if (!empty($tmpfiles)) {
array_map('unlink', $tmpfiles);
if ($handle = @opendir(K_PATH_CACHE)) {
while ( false !== ( $file_name = readdir( $handle ) ) ) {
if (strpos($file_name, '__tcpdf_'.$this->file_id.'_') === 0) {
unlink(K_PATH_CACHE.$file_name);
}
}
closedir($handle);
}
if (isset($this->imagekeys)) {
foreach($this->imagekeys as $file) {
if (strpos($file, K_PATH_CACHE) === 0) {
@unlink($file);
}
}
}
}
$preserve = array(
@ -7763,6 +7800,7 @@ class TCPDF {
'bufferlen',
'buffer',
'cached_files',
'imagekeys',
'sign',
'signature_data',
'signature_max_length',
@ -8368,7 +8406,7 @@ class TCPDF {
if (is_string($pl['txt']) && !empty($pl['txt'])) {
if ($pl['txt'][0] == '#') {
// internal destination
$annots .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($pl['txt'], 1));
$annots .= ' /A <</S /GoTo /D '.TCPDF_STATIC::encodeNameObject(substr($pl['txt'], 1)).'>>';
} elseif ($pl['txt'][0] == '%') {
// embedded PDF file
$filename = basename(substr($pl['txt'], 1));
@ -8380,7 +8418,7 @@ class TCPDF {
$annots .= ' /A << /S /JavaScript /JS '.$this->_textstring($jsa, $annot_obj_id).'>>';
} else {
$parsedUrl = parse_url($pl['txt']);
if (empty($parsedUrl['scheme']) AND (strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) {
if (empty($parsedUrl['scheme']) AND (!empty($parsedUrl['path']) && strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) {
// relative link to a PDF file
$dest = '[0 /Fit]'; // default page 0
if (!empty($parsedUrl['fragment'])) {
@ -8487,8 +8525,8 @@ class TCPDF {
break;
}
case 'fileattachment': {
if ($this->pdfa_mode) {
// embedded files are not allowed in PDF/A mode
if ($this->pdfa_mode && $this->pdfa_version != 3) {
// embedded files are not allowed in PDF/A mode version 1 and 2
break;
}
if (!isset($pl['opt']['fs'])) {
@ -9500,6 +9538,17 @@ class TCPDF {
$this->custom_xmp = $xmp;
}
/**
* Set additional XMP data to be added on the default XMP data just before the end of "rdf:RDF" tag.
* IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method!
* @param $xmp (string) Custom XMP RDF data.
* @since 6.3.0 (2019-09-19)
* @public
*/
public function setExtraXMPRDF($xmp) {
$this->custom_xmp_rdf = $xmp;
}
/**
* Put XMP data object and return ID.
* @return (int) The object ID.
@ -9569,7 +9618,7 @@ class TCPDF {
$xmp .= "\t\t".'</rdf:Description>'."\n";
if ($this->pdfa_mode) {
$xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">'."\n";
$xmp .= "\t\t\t".'<pdfaid:part>1</pdfaid:part>'."\n";
$xmp .= "\t\t\t".'<pdfaid:part>'.$this->pdfa_version.'</pdfaid:part>'."\n";
$xmp .= "\t\t\t".'<pdfaid:conformance>B</pdfaid:conformance>'."\n";
$xmp .= "\t\t".'</rdf:Description>'."\n";
}
@ -9581,6 +9630,16 @@ class TCPDF {
$xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>'."\n";
$xmp .= "\t\t\t\t\t\t".'<pdfaSchema:prefix>pdf</pdfaSchema:prefix>'."\n";
$xmp .= "\t\t\t\t\t\t".'<pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>'."\n";
$xmp .= "\t\t\t\t\t\t".'<pdfaSchema:property>'."\n";
$xmp .= "\t\t\t\t\t\t\t".'<rdf:Seq>'."\n";
$xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n";
$xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n";
$xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>Adobe PDF Schema</pdfaProperty:description>'."\n";
$xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>InstanceID</pdfaProperty:name>'."\n";
$xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>URI</pdfaProperty:valueType>'."\n";
$xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n";
$xmp .= "\t\t\t\t\t\t\t".'</rdf:Seq>'."\n";
$xmp .= "\t\t\t\t\t\t".'</pdfaSchema:property>'."\n";
$xmp .= "\t\t\t\t\t".'</rdf:li>'."\n";
$xmp .= "\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n";
$xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>'."\n";
@ -9627,6 +9686,7 @@ class TCPDF {
$xmp .= "\t\t\t\t".'</rdf:Bag>'."\n";
$xmp .= "\t\t\t".'</pdfaExtension:schemas>'."\n";
$xmp .= "\t\t".'</rdf:Description>'."\n";
$xmp .= $this->custom_xmp_rdf;
$xmp .= "\t".'</rdf:RDF>'."\n";
$xmp .= $this->custom_xmp;
$xmp .= '</x:xmpmeta>'."\n";
@ -12221,7 +12281,7 @@ class TCPDF {
$x = $this->w;
}
$fixed = false;
if (!empty($page) AND ($page[0] == '*')) {
if (!empty($page) AND (substr($page, 0, 1) == '*')) {
$page = intval(substr($page, 1));
// this page number will not be changed when moving/add/deleting pages
$fixed = true;
@ -12324,7 +12384,8 @@ class TCPDF {
$x = $this->w;
}
$fixed = false;
if (!empty($page) AND ($page[0] == '*')) {
$pageAsString = (string) $page;
if ($pageAsString && $pageAsString[0] == '*') {
$page = intval(substr($page, 1));
// this page number will not be changed when moving/add/deleting pages
$fixed = true;
@ -13988,7 +14049,7 @@ class TCPDF {
* @since 3.1.000 (2008-06-09)
*/
public function setPDFVersion($version='1.7') {
if ($this->pdfa_mode) {
if ($this->pdfa_mode && $this->pdfa_version == 1 ) {
// PDF/A mode
$this->PDFVersion = '1.4';
} else {
@ -15502,8 +15563,7 @@ class TCPDF {
* <li>int $style['module_height'] height of a single module in points</li>
* <li>array $style['fgcolor'] color array for bars and text</li>
* <li>mixed $style['bgcolor'] color array for background or false for transparent</li>
* <li>string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch</li><li>$style['module_width'] width of a single module in points</li>
* <li>$style['module_height'] height of a single module in points</li></ul>
* <li>string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch</li>
* @param $align (string) Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
* @param $distort (boolean) if true distort the barcode to fit width and height, otherwise preserve aspect ratio
* @author Nicola Asuni
@ -16897,10 +16957,10 @@ class TCPDF {
if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) {
$dom[$key]['fontname'] = $this->default_monospaced_font;
}
if (!empty($dom[$key]['value']) AND ($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) {
if (!empty($dom[$key]['value']) AND ($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value'][1]) > 0) AND (intval($dom[$key]['value'][1]) < 7)) {
// headings h1, h2, h3, h4, h5, h6
if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) {
$headsize = (4 - intval($dom[$key]['value']{1})) * 2;
$headsize = (4 - intval($dom[$key]['value'][1])) * 2;
$dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize;
}
if (!isset($dom[$key]['style']['font-weight'])) {
@ -18686,7 +18746,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
$hbz = 0; // distance from y to line bottom
$hb = 0; // vertical space between block tags
// calculate vertical space for block tags
if (isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) {
if (isset($this->tagvspaces[$tag['value']][0]['h']) && !empty($this->tagvspaces[$tag['value']][0]['h']) && ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) {
$cur_h = $this->tagvspaces[$tag['value']][0]['h'];
} elseif (isset($tag['fontsize'])) {
$cur_h = $this->getCellHeight($tag['fontsize'] / $this->k);
@ -18718,7 +18778,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
}
// closing vertical space
$hbc = 0;
if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) {
if (isset($this->tagvspaces[$tag['value']][1]['h']) && !empty($this->tagvspaces[$tag['value']][1]['h']) && ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) {
$pre_h = $this->tagvspaces[$tag['value']][1]['h'];
} elseif (isset($parent['fontsize'])) {
$pre_h = $this->getCellHeight($parent['fontsize'] / $this->k);
@ -19379,7 +19439,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
$hbz = 0; // distance from y to line bottom
$hb = 0; // vertical space between block tags
// calculate vertical space for block tags
if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) {
if (isset($this->tagvspaces[$tag['value']][1]['h']) && !empty($this->tagvspaces[$tag['value']][1]['h']) && ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) {
$pre_h = $this->tagvspaces[$tag['value']][1]['h'];
} elseif (isset($parent['fontsize'])) {
$pre_h = $this->getCellHeight($parent['fontsize'] / $this->k);
@ -23349,7 +23409,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
*/
protected function SVGPath($d, $style='') {
if ($this->state != 2) {
return;
return;
}
// set fill/stroke style
$op = TCPDF_STATIC::getPathPaintOperator($style, '');
@ -23369,6 +23429,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
$xmax = 0;
$ymin = 2147483647;
$ymax = 0;
$xinitial = 0;
$yinitial = 0;
$relcoord = false;
$minlen = (0.01 / $this->k); // minimum acceptable length (3 point)
$firstcmd = true; // used to print first point
@ -23413,6 +23475,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
if ($ck == 1) {
$this->_outPoint($x, $y);
$firstcmd = false;
$xinitial = $x;
$yinitial = $y;
} else {
$this->_outLine($x, $y);
}
@ -23600,8 +23664,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
if ((($ck + 1) % 7) == 0) {
$x0 = $x;
$y0 = $y;
$rx = abs($params[($ck - 6)]);
$ry = abs($params[($ck - 5)]);
$rx = max(abs($params[($ck - 6)]), .000000001);
$ry = max(abs($params[($ck - 5)]), .000000001);
$ang = -$rawparams[($ck - 4)];
$angle = deg2rad($ang);
$fa = $rawparams[($ck - 3)]; // large-arc-flag
@ -23688,6 +23752,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
}
case 'Z': {
$this->_out('h');
$x = $x0 = $xinitial;
$y = $y0 = $yinitial;
break;
}
}
@ -23995,7 +24061,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
case 'stop': {
// gradient stops
if (substr($attribs['offset'], -1) == '%') {
$offset = floatval(substr($attribs['offset'], -1)) / 100;
$offset = floatval(substr($attribs['offset'], 0, -1)) / 100;
} else {
$offset = floatval($attribs['offset']);
if ($offset > 1) {

View File

@ -8,7 +8,7 @@
<license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL</license>
<authorEmail>info@tecnick.com</authorEmail>
<authorUrl>www.tecnick.com</authorUrl>
<version>6.2.26</version>
<version>6.3.5</version>
<description>This is a PHP class for generating PDF documents without requiring external extensions.</description>
<files>

View File

@ -453,7 +453,7 @@ class TCPDFBarcode {
$k = 0;
$clen = strlen($code);
for ($i = 0; $i < $clen; ++$i) {
$char = $code{$i};
$char = $code[$i];
if(!isset($chr[$char])) {
// invalid character
return false;
@ -464,7 +464,7 @@ class TCPDFBarcode {
} else {
$t = false; // space
}
$w = $chr[$char]{$j};
$w = $chr[$char][$j];
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
++$k;
@ -520,10 +520,10 @@ class TCPDFBarcode {
$code_ext = '';
$clen = strlen($code);
for ($i = 0 ; $i < $clen; ++$i) {
if (ord($code{$i}) > 127) {
if (ord($code[$i]) > 127) {
return false;
}
$code_ext .= $encode[$code{$i}];
$code_ext .= $encode[$code[$i]];
}
return $code_ext;
}
@ -543,7 +543,7 @@ class TCPDFBarcode {
$sum = 0;
$clen = strlen($code);
for ($i = 0 ; $i < $clen; ++$i) {
$k = array_keys($chars, $code{$i});
$k = array_keys($chars, $code[$i]);
$sum += $k[0];
}
$j = ($sum % 43);
@ -643,10 +643,10 @@ class TCPDFBarcode {
$code_ext = '';
$clen = strlen($code);
for ($i = 0 ; $i < $clen; ++$i) {
if (ord($code{$i}) > 127) {
if (ord($code[$i]) > 127) {
return false;
}
$code_ext .= $encode[$code{$i}];
$code_ext .= $encode[$code[$i]];
}
// checksum
$code_ext .= $this->checksum_code93($code_ext);
@ -656,7 +656,7 @@ class TCPDFBarcode {
$k = 0;
$clen = strlen($code);
for ($i = 0; $i < $clen; ++$i) {
$char = ord($code{$i});
$char = ord($code[$i]);
if(!isset($chr[$char])) {
// invalid character
return false;
@ -667,7 +667,7 @@ class TCPDFBarcode {
} else {
$t = false; // space
}
$w = $chr[$char]{$j};
$w = $chr[$char][$j];
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
++$k;
@ -699,7 +699,7 @@ class TCPDFBarcode {
$p = 1;
$check = 0;
for ($i = ($len - 1); $i >= 0; --$i) {
$k = array_keys($chars, $code{$i});
$k = array_keys($chars, $code[$i]);
$check += ($k[0] * $p);
++$p;
if ($p > 20) {
@ -713,7 +713,7 @@ class TCPDFBarcode {
$p = 1;
$check = 0;
for ($i = $len; $i >= 0; --$i) {
$k = array_keys($chars, $code{$i});
$k = array_keys($chars, $code[$i]);
$check += ($k[0] * $p);
++$p;
if ($p > 15) {
@ -738,11 +738,11 @@ class TCPDFBarcode {
$len = strlen($code);
$sum = 0;
for ($i = 0; $i < $len; $i+=2) {
$sum += $code{$i};
$sum += $code[$i];
}
$sum *= 3;
for ($i = 1; $i < $len; $i+=2) {
$sum += ($code{$i});
$sum += ($code[$i]);
}
$r = $sum % 10;
if($r > 0) {
@ -783,7 +783,7 @@ class TCPDFBarcode {
$p = 2;
$check = 0;
for ($i = ($clen - 1); $i >= 0; --$i) {
$check += (hexdec($code{$i}) * $p);
$check += (hexdec($code[$i]) * $p);
++$p;
if ($p > 7) {
$p = 2;
@ -798,7 +798,7 @@ class TCPDFBarcode {
$seq = '110'; // left guard
$clen = strlen($code);
for ($i = 0; $i < $clen; ++$i) {
$digit = $code{$i};
$digit = $code[$i];
if (!isset($chr[$digit])) {
// invalid character
return false;
@ -841,7 +841,7 @@ class TCPDFBarcode {
$seq = '11011010';
$clen = strlen($code);
for ($i = 0; $i < $clen; ++$i) {
$digit = $code{$i};
$digit = $code[$i];
if (!isset($chr[$digit])) {
// invalid character
return false;
@ -867,8 +867,8 @@ class TCPDFBarcode {
$k = 0;
for ($i = 0; $i < $len; ++$i) {
$w += 1;
if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq{$i} != $seq{($i+1)}))) {
if ($seq{$i} == '1') {
if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq[$i] != $seq[($i+1)]))) {
if ($seq[$i] == '1') {
$t = true; // bar
} else {
$t = false; // space
@ -919,8 +919,8 @@ class TCPDFBarcode {
$k = 0;
$clen = strlen($code);
for ($i = 0; $i < $clen; $i = ($i + 2)) {
$char_bar = $code{$i};
$char_space = $code{$i+1};
$char_bar = $code[$i];
$char_space = $code[$i+1];
if((!isset($chr[$char_bar])) OR (!isset($chr[$char_space]))) {
// invalid character
return false;
@ -929,7 +929,7 @@ class TCPDFBarcode {
$seq = '';
$chrlen = strlen($chr[$char_bar]);
for ($s = 0; $s < $chrlen; $s++){
$seq .= $chr[$char_bar]{$s} . $chr[$char_space]{$s};
$seq .= $chr[$char_bar][$s] . $chr[$char_space][$s];
}
$seqlen = strlen($seq);
for ($j = 0; $j < $seqlen; ++$j) {
@ -938,7 +938,7 @@ class TCPDFBarcode {
} else {
$t = false; // space
}
$w = $seq{$j};
$w = $seq[$j];
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
++$k;
@ -1085,7 +1085,7 @@ class TCPDFBarcode {
case 'A': { // MODE A
$startid = 103;
for ($i = 0; $i < $len; ++$i) {
$char = $code{$i};
$char = $code[$i];
$char_id = ord($char);
if (($char_id >= 241) AND ($char_id <= 244)) {
$code_data[] = $fnc_a[$char_id];
@ -1100,7 +1100,7 @@ class TCPDFBarcode {
case 'B': { // MODE B
$startid = 104;
for ($i = 0; $i < $len; ++$i) {
$char = $code{$i};
$char = $code[$i];
$char_id = ord($char);
if (($char_id >= 241) AND ($char_id <= 244)) {
$code_data[] = $fnc_b[$char_id];
@ -1124,7 +1124,7 @@ class TCPDFBarcode {
return false;
}
for ($i = 0; $i < $len; $i+=2) {
$chrnum = $code{$i}.$code{$i+1};
$chrnum = $code[$i].$code[$i+1];
if (preg_match('/([0-9]{2})/', $chrnum) > 0) {
$code_data[] = intval($chrnum);
} else {
@ -1180,7 +1180,7 @@ class TCPDFBarcode {
}
}
for ($i = 0; $i < $seq[2]; ++$i) {
$char = $seq[1]{$i};
$char = $seq[1][$i];
$char_id = ord($char);
if (($char_id >= 241) AND ($char_id <= 244)) {
$code_data[] = $fnc_a[$char_id];
@ -1223,7 +1223,7 @@ class TCPDFBarcode {
}
}
for ($i = 0; $i < $seq[2]; ++$i) {
$char = $seq[1]{$i};
$char = $seq[1][$i];
$char_id = ord($char);
if (($char_id >= 241) AND ($char_id <= 244)) {
$code_data[] = $fnc_b[$char_id];
@ -1240,7 +1240,7 @@ class TCPDFBarcode {
$code_data[] = 99;
}
for ($i = 0; $i < $seq[2]; $i+=2) {
$chrnum = $seq[1]{$i}.$seq[1]{$i+1};
$chrnum = $seq[1][$i].$seq[1][$i+1];
$code_data[] = intval($chrnum);
}
break;
@ -1271,7 +1271,7 @@ class TCPDFBarcode {
} else {
$t = false; // space
}
$w = $seq{$j};
$w = $seq[$j];
$bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
}
@ -1337,14 +1337,14 @@ class TCPDFBarcode {
// calculate check digit
$sum_a = 0;
for ($i = 1; $i < $data_len; $i+=2) {
$sum_a += $code{$i};
$sum_a += $code[$i];
}
if ($len > 12) {
$sum_a *= 3;
}
$sum_b = 0;
for ($i = 0; $i < $data_len; $i+=2) {
$sum_b += ($code{$i});
$sum_b += ($code[$i]);
}
if ($len < 13) {
$sum_b *= 3;
@ -1356,7 +1356,7 @@ class TCPDFBarcode {
if ($code_len == $data_len) {
// add check digit
$code .= $r;
} elseif ($r !== intval($code{$data_len})) {
} elseif ($r !== intval($code[$data_len])) {
// wrong checkdigit
return false;
}
@ -1467,7 +1467,7 @@ class TCPDFBarcode {
$bararray = array('code' => $upce_code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
$p = $upce_parities[$code[1]][$r];
for ($i = 0; $i < 6; ++$i) {
$seq .= $codes[$p[$i]][$upce_code{$i}];
$seq .= $codes[$p[$i]][$upce_code[$i]];
}
$seq .= '010101'; // right guard bar
} else {
@ -1475,17 +1475,17 @@ class TCPDFBarcode {
$half_len = intval(ceil($len / 2));
if ($len == 8) {
for ($i = 0; $i < $half_len; ++$i) {
$seq .= $codes['A'][$code{$i}];
$seq .= $codes['A'][$code[$i]];
}
} else {
$p = $parities[$code[0]];
for ($i = 1; $i < $half_len; ++$i) {
$seq .= $codes[$p[$i-1]][$code{$i}];
$seq .= $codes[$p[$i-1]][$code[$i]];
}
}
$seq .= '01010'; // center guard bar
for ($i = $half_len; $i < $len; ++$i) {
$seq .= $codes['C'][$code{$i}];
$seq .= $codes['C'][$code[$i]];
}
$seq .= '101'; // right guard bar
}
@ -1493,8 +1493,8 @@ class TCPDFBarcode {
$w = 0;
for ($i = 0; $i < $clen; ++$i) {
$w += 1;
if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq{$i} != $seq{($i+1)}))) {
if ($seq{$i} == '1') {
if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq[$i] != $seq[$i+1]))) {
if ($seq[$i] == '1') {
$t = true; // bar
} else {
$t = false; // space
@ -1578,7 +1578,7 @@ class TCPDFBarcode {
$seq .= $codes[$p[0]][$code[0]];
for ($i = 1; $i < $len; ++$i) {
$seq .= '01'; // separator
$seq .= $codes[$p[$i]][$code{$i}];
$seq .= $codes[$p[$i]][$code[$i]];
}
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array());
return $this->binseq_to_array($seq, $bararray);
@ -1629,7 +1629,7 @@ class TCPDFBarcode {
// calculate checksum
$sum = 0;
for ($i = 0; $i < $len; ++$i) {
$sum += intval($code{$i});
$sum += intval($code[$i]);
}
$chkd = ($sum % 10);
if($chkd > 0) {
@ -1643,7 +1643,7 @@ class TCPDFBarcode {
$bararray['maxw'] += 2;
for ($i = 0; $i < $len; ++$i) {
for ($j = 0; $j < 5; ++$j) {
$h = $barlen[$code{$i}][$j];
$h = $barlen[$code[$i]][$j];
$p = floor(1 / $h);
$bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p);
$bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0);
@ -1756,8 +1756,8 @@ class TCPDFBarcode {
$row = 0;
$col = 0;
for ($i = 0; $i < $len; ++$i) {
$row += $checktable[$code{$i}][0];
$col += $checktable[$code{$i}][1];
$row += $checktable[$code[$i]][0];
$col += $checktable[$code[$i]][1];
}
$row %= 6;
$col %= 6;
@ -1774,7 +1774,7 @@ class TCPDFBarcode {
}
for ($i = 0; $i < $len; ++$i) {
for ($j = 0; $j < 4; ++$j) {
switch ($barmode[$code{$i}][$j]) {
switch ($barmode[$code[$i]][$j]) {
case 1: {
$p = 0;
$h = 2;
@ -1846,17 +1846,17 @@ class TCPDFBarcode {
$code = 'A'.strtoupper($code).'A';
$len = strlen($code);
for ($i = 0; $i < $len; ++$i) {
if (!isset($chr[$code{$i}])) {
if (!isset($chr[$code[$i]])) {
return false;
}
$seq = $chr[$code{$i}];
$seq = $chr[$code[$i]];
for ($j = 0; $j < 8; ++$j) {
if (($j % 2) == 0) {
$t = true; // bar
} else {
$t = false; // space
}
$w = $seq{$j};
$w = $seq[$j];
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
++$k;
@ -1896,7 +1896,7 @@ class TCPDFBarcode {
$p = 1;
$check = 0;
for ($i = ($len - 1); $i >= 0; --$i) {
$digit = $code{$i};
$digit = $code[$i];
if ($digit == '-') {
$dval = 10;
} else {
@ -1918,7 +1918,7 @@ class TCPDFBarcode {
$p = 1;
$check = 0;
for ($i = $len; $i >= 0; --$i) {
$digit = $code{$i};
$digit = $code[$i];
if ($digit == '-') {
$dval = 10;
} else {
@ -1937,17 +1937,17 @@ class TCPDFBarcode {
$code = 'S'.$code.'S';
$len += 3;
for ($i = 0; $i < $len; ++$i) {
if (!isset($chr[$code{$i}])) {
if (!isset($chr[$code[$i]])) {
return false;
}
$seq = $chr[$code{$i}];
$seq = $chr[$code[$i]];
for ($j = 0; $j < 6; ++$j) {
if (($j % 2) == 0) {
$t = true; // bar
} else {
$t = false; // space
}
$w = $seq{$j};
$w = $seq[$j];
$bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0);
$bararray['maxw'] += $w;
++$k;
@ -2016,7 +2016,7 @@ class TCPDFBarcode {
$bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array());
$len = strlen($seq);
for ($i = 0; $i < $len; ++$i) {
switch ($seq{$i}) {
switch ($seq[$i]) {
case '1': {
$p = 1;
$h = 1;
@ -2255,7 +2255,7 @@ class TCPDFBarcode {
$bitval = 1;
$len = strlen($hex);
for($pos = ($len - 1); $pos >= 0; --$pos) {
$dec = bcadd($dec, bcmul(hexdec($hex{$pos}), $bitval));
$dec = bcadd($dec, bcmul(hexdec($hex[$pos]), $bitval));
$bitval = bcmul($bitval, 16);
}
return $dec;

View File

@ -531,10 +531,10 @@ class TCPDF_PARSER {
if ($char == '(') {
$open_bracket = 1;
while ($open_bracket > 0) {
if (!isset($this->pdfdata{$strpos})) {
if (!isset($this->pdfdata[$strpos])) {
break;
}
$ch = $this->pdfdata{$strpos};
$ch = $this->pdfdata[$strpos];
switch ($ch) {
case '\\': { // REVERSE SOLIDUS (5Ch) (Backslash)
// skip next character
@ -578,7 +578,7 @@ class TCPDF_PARSER {
}
case '<': // \x3C LESS-THAN SIGN
case '>': { // \x3E GREATER-THAN SIGN
if (isset($this->pdfdata{($offset + 1)}) AND ($this->pdfdata{($offset + 1)} == $char)) {
if (isset($this->pdfdata[($offset + 1)]) AND ($this->pdfdata[($offset + 1)] == $char)) {
// dictionary object
$objtype = $char.$char;
$offset += 2;

View File

@ -31,5 +31,21 @@
<maintainerurl>https://github.com/llewellynvdm</maintainerurl>
<targetplatform name="joomla" version="3.*"/>
</update>
<update>
<name>TCPDF</name>
<description>This is a PHP class for generating PDF documents without requiring external extensions.</description>
<element>tcpdf</element>
<type>library</type>
<client>site</client>
<folder></folder>
<version>6.3.5</version>
<infourl title="TCPDF for Joomla!">https://github.com/vdm-io/tcpdf</infourl>
<downloads>
<downloadurl type="full" format="zip">https://github.com/vdm-io/tcpdf/archive/v6.3.5.zip</downloadurl>
</downloads>
<maintainer>Llewellyn van der Merwe</maintainer>
<maintainerurl>https://github.com/llewellynvdm</maintainerurl>
<targetplatform name="joomla" version="3.*"/>
</update>
</updates>