Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/ scipy/PortAudio) kommen nativ aus Debian stretch. Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per .gitignore ausgeschlossen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,35 @@
|
||||
*.py[cod]
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Packages
|
||||
*.egg
|
||||
*.egg-info
|
||||
dist
|
||||
build
|
||||
eggs
|
||||
parts
|
||||
bin
|
||||
var
|
||||
sdist
|
||||
develop-eggs
|
||||
.installed.cfg
|
||||
lib
|
||||
lib64
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
.coverage
|
||||
.tox
|
||||
nosetests.xml
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
|
||||
# Mr Developer
|
||||
.mr.developer.cfg
|
||||
.project
|
||||
.pydevproject
|
||||
@@ -0,0 +1,8 @@
|
||||
86e2be4e99090fbd25b372d2f29a5b20d6b22001 unicode
|
||||
5ce4e5d8c7d812a005c684925578e8b7a098987a gif
|
||||
6d269f7474c65d7d2616472ea800fa356d645e95 png_alpha
|
||||
0dc26e5ee0b0c147f9b885722cfab2ccc6198322 1.7
|
||||
90c1a762ab26e208f54eb1483f00a8c407cf89f3 1.7.1
|
||||
f99621069064f6126839a4831204ccd7be077b34 1.7.2
|
||||
f99621069064f6126839a4831204ccd7be077b34 1.7.2
|
||||
88fafdc91cc38b7dc3afcbcf36496beedf5499b8 1.7.2
|
||||
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser 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
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
@@ -0,0 +1,52 @@
|
||||
pyfpdf: FPDF for python
|
||||
=======================
|
||||
|
||||
PyFPDF is a library for PDF document generation under Python, ported from PHP
|
||||
(see [FPDF][1] "Free"-PDF, a well-known PDFlib-extension replacement with many
|
||||
examples, scripts and derivatives).
|
||||
|
||||
Compared with other PDF libraries, PyFPDF is simple, small and versatile, with
|
||||
advanced capabilities and easy to learn, extend and maintain.
|
||||
|
||||
[1]: http://www.fpdf.org/
|
||||
|
||||
Features:
|
||||
---------
|
||||
|
||||
* Python 2.5 to 2.7 support (with experimental Python3 support)
|
||||
* Unicode (UTF-8) TrueType font subset embedding
|
||||
* Barcode I2of5 and code39, QR code coming soon ...
|
||||
* PNG, GIF and JPG support (including transparency and alpha channel)
|
||||
* Templates with a visual designer & basic html2pdf
|
||||
* Exceptions support, other minor fixes, improvements and PEP8 code cleanups
|
||||
|
||||
Installation Instructions:
|
||||
--------------------------
|
||||
|
||||
To get the latest development version you can download the source code running:
|
||||
|
||||
```
|
||||
hg clone https://code.google.com/p/pyfpdf/
|
||||
cd pyfpdf
|
||||
python setup.py install
|
||||
```
|
||||
|
||||
You can also install PyFPDF from PyPI, with easyinstall or from Windows
|
||||
installers. For example, using pip:
|
||||
```
|
||||
pip install fpdf
|
||||
```
|
||||
|
||||
**Note:** [Python Imaging Library](http://www.pythonware.com/products/pil/)
|
||||
(PIL) is needed for GIF support. PNG and JPG support is built-in and don't
|
||||
require any external dependency.
|
||||
|
||||
Documentation:
|
||||
--------------
|
||||
|
||||
* Tutorial: https://code.google.com/p/pyfpdf/wiki/Tutorial
|
||||
* Reference Manual: https://code.google.com/p/pyfpdf/wiki/ReferenceManual
|
||||
(spanish translation available)
|
||||
|
||||
For further information, see the project site: https://code.google.com/p/pyfpdf/
|
||||
or the GitHub mirror: https://github.com/reingart/pyfpdf
|
||||
@@ -0,0 +1,73 @@
|
||||
from FPDF import *
|
||||
|
||||
class Bookmark(FPDF):
|
||||
def __init__(this,orientation='P',unit='mm',format='A4'):
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
this.outlines=[]
|
||||
this.OutlineRoot=None
|
||||
|
||||
def Bookmark(this,txt,level=0,y=0):
|
||||
if(y==-1):
|
||||
y=this.GetY()
|
||||
this.outlines+=[{'t':txt,'l':level,'y':y,'p':this.PageNo()}]
|
||||
|
||||
def _putbookmarks(this):
|
||||
nb=count(this.outlines)
|
||||
if(nb==0):
|
||||
return
|
||||
lru={}
|
||||
level=0
|
||||
for i in range(len(this.outlines)):
|
||||
o=this.outlines[i]
|
||||
if(o['l']>0):
|
||||
parent=lru[o['l']-1]
|
||||
#Set parent and last pointers
|
||||
this.outlines[i]['parent']=parent
|
||||
this.outlines[parent]['last']=i
|
||||
if(o['l']>level):
|
||||
#Level increasing: set first pointer
|
||||
this.outlines[parent]['first']=i
|
||||
else:
|
||||
this.outlines[i]['parent']=nb
|
||||
if(o['l']<=level and i>0):
|
||||
#Set prev and next pointers
|
||||
prev=lru[o['l']]
|
||||
this.outlines[prev]['next']=i
|
||||
this.outlines[i]['prev']=prev
|
||||
lru[o['l']]=i
|
||||
level=o['l']
|
||||
#Outline items
|
||||
n=this.n+1
|
||||
for i in range(len(this.outlines)):
|
||||
o=this.outlines[i]
|
||||
this._newobj()
|
||||
this._out('<</Title '+this._textstring(o['t']))
|
||||
this._out('/Parent '+str(n+o['parent'])+' 0 R')
|
||||
if 'prev' in o:
|
||||
this._out('/Prev '+str(n+o['prev'])+' 0 R')
|
||||
if 'next' in o:
|
||||
this._out('/Next '+str(n+o['next'])+' 0 R')
|
||||
if 'first' in o:
|
||||
this._out('/First '+str(n+o['first'])+' 0 R')
|
||||
if 'last' in o:
|
||||
this._out('/Last '+str(n+o['last'])+' 0 R')
|
||||
this._out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]',1+2*o['p'],(this.h-o['y'])*this.k))
|
||||
this._out('/Count 0>>')
|
||||
this._out('endobj')
|
||||
#Outline root
|
||||
this._newobj()
|
||||
this.OutlineRoot=this.n
|
||||
this._out('<</Type /Outlines /First '+str(n)+' 0 R')
|
||||
this._out('/Last '+str(n+lru[0])+' 0 R>>')
|
||||
this._out('endobj')
|
||||
|
||||
|
||||
def _putresources(this):
|
||||
FPDF._putresources(this)
|
||||
this._putbookmarks()
|
||||
|
||||
def _putcatalog(this):
|
||||
FPDF._putcatalog(this)
|
||||
if(count(this.outlines)>0):
|
||||
this._out('/Outlines '+str(this.OutlineRoot)+' 0 R')
|
||||
this._out('/PageMode /UseOutlines')
|
||||
@@ -0,0 +1,142 @@
|
||||
from FPDF import *
|
||||
|
||||
class Gradients(FPDF):
|
||||
def __init__(this,orientation='P',unit='mm',format='A4'):
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
this.gradients={}
|
||||
|
||||
def LinearGradient(this,x, y, w, h, col1=[], col2=[], coords=[0.0,0.0,1.0,0.0]):
|
||||
this.Clip(x,y,w,h)
|
||||
this.Gradient(2,col1,col2,coords)
|
||||
|
||||
def RadialGradient(this,x, y, w, h, col1=[], col2=[], coords=[0.5,0.5,0.5,0.5,1.0]):
|
||||
this.Clip(x,y,w,h)
|
||||
this.Gradient(3,col1,col2,coords)
|
||||
|
||||
def CoonsPatchMesh(this,x, y, w, h, col1=[], col2=[], col3=[], col4=[], coords=[0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33], coords_min=0.0, coords_max=1.0):
|
||||
this.Clip(x,y,w,h)
|
||||
n = count(this.gradients)+1
|
||||
this.gradients[n]={}
|
||||
this.gradients[n]['type']=6 #coons patch mesh
|
||||
#check the coords array if it is the simple array or the multi patch array
|
||||
if type(coords[0]) != type({}):
|
||||
#simple array -> convert to multi patch array
|
||||
for L in (col1,col2,col3,col4):
|
||||
if len(L)==1:
|
||||
L+=[L[0],L[0]]
|
||||
patch_array=[{}]
|
||||
patch_array[0]['f']=0
|
||||
patch_array[0]['points']=coords
|
||||
patch_array[0]['colors']=[{},{},{},{}]
|
||||
patch_array[0]['colors'][0]['r']=col1[0]
|
||||
patch_array[0]['colors'][0]['g']=col1[1]
|
||||
patch_array[0]['colors'][0]['b']=col1[2]
|
||||
patch_array[0]['colors'][1]['r']=col2[0]
|
||||
patch_array[0]['colors'][1]['g']=col2[1]
|
||||
patch_array[0]['colors'][1]['b']=col2[2]
|
||||
patch_array[0]['colors'][2]['r']=col3[0]
|
||||
patch_array[0]['colors'][2]['g']=col3[1]
|
||||
patch_array[0]['colors'][2]['b']=col3[2]
|
||||
patch_array[0]['colors'][3]['r']=col4[0]
|
||||
patch_array[0]['colors'][3]['g']=col4[1]
|
||||
patch_array[0]['colors'][3]['b']=col4[2]
|
||||
else:
|
||||
#multi patch array
|
||||
patch_array=coords
|
||||
bpcd=65535 #16 BitsPerCoordinate
|
||||
#build the data stream
|
||||
this.gradients[n]['stream']=''
|
||||
for i in xrange(0,count(patch_array)):
|
||||
this.gradients[n]['stream']+=chr(patch_array[i]['f']) #start with the edge flag as 8 bit
|
||||
for j in xrange(0,count(patch_array[i]['points'])):
|
||||
#each point as 16 bit
|
||||
patch_array[i]['points'][j]=((patch_array[i]['points'][j]-coords_min)/(coords_max-coords_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.gradients[n]['stream']+=chr(floor(patch_array[i]['points'][j]/256.0))
|
||||
this.gradients[n]['stream']+=chr(floor(patch_array[i]['points'][j]%256.0))
|
||||
for j in xrange(0,count(patch_array[i]['colors'])):
|
||||
#each color component as 8 bit
|
||||
this.gradients[n]['stream']+=chr(patch_array[i]['colors'][j]['r'])
|
||||
this.gradients[n]['stream']+=chr(patch_array[i]['colors'][j]['g'])
|
||||
this.gradients[n]['stream']+=chr(patch_array[i]['colors'][j]['b'])
|
||||
#paint the gradient
|
||||
this._out('/Sh'+str(n)+' sh')
|
||||
#restore previous Graphic State
|
||||
this._out('Q')
|
||||
|
||||
def Clip(this,x,y,w,h):
|
||||
#save current Graphic State
|
||||
s='q'
|
||||
#set clipping area
|
||||
s+=sprintf(' %.2f %.2f %.2f %.2f re W n', x*this.k, (this.h-y)*this.k, w*this.k, -h*this.k)
|
||||
#set up transformation matrix for gradient
|
||||
s+=sprintf(' %.3f 0 0 %.3f %.3f %.3f cm', w*this.k, h*this.k, x*this.k, (this.h-(y+h))*this.k)
|
||||
this._out(s)
|
||||
|
||||
def Gradient(this, type, col1, col2, coords):
|
||||
n = count(this.gradients)+1
|
||||
this.gradients[n]={}
|
||||
this.gradients[n]['type']=type
|
||||
if len(col1)==1:
|
||||
col1+=[col1[0],col1[0]]
|
||||
this.gradients[n]['col1']=sprintf('%.3f %.3f %.3f',(col1[0]/255.0),(col1[1]/255.0),(col1[2]/255.0))
|
||||
if len(col2)==1:
|
||||
col2+=[col2[0],col2[0]]
|
||||
this.gradients[n]['col2']=sprintf('%.3f %.3f %.3f',(col2[0]/255.0),(col2[1]/255.0),(col2[2]/255.0))
|
||||
this.gradients[n]['coords']=coords
|
||||
#paint the gradient
|
||||
this._out('/Sh'+str(n)+' sh')
|
||||
#restore previous Graphic State
|
||||
this._out('Q')
|
||||
|
||||
def _putshaders(this):
|
||||
for id,grad in this.gradients.iteritems():
|
||||
if(grad['type']==2 or grad['type']==3):
|
||||
this._newobj()
|
||||
this._out('<<')
|
||||
this._out('/FunctionType 2')
|
||||
this._out('/Domain [0.0 1.0]')
|
||||
this._out('/C0 ['+grad['col1']+']')
|
||||
this._out('/C1 ['+grad['col2']+']')
|
||||
this._out('/N 1')
|
||||
this._out('>>')
|
||||
this._out('endobj')
|
||||
f1=this.n
|
||||
this._newobj()
|
||||
this._out('<<')
|
||||
this._out('/ShadingType '+str(grad['type']))
|
||||
this._out('/ColorSpace /DeviceRGB')
|
||||
if(grad['type']==2):
|
||||
this._out(sprintf('/Coords [%.3f %.3f %.3f %.3f]',grad['coords'][0],grad['coords'][1],grad['coords'][2],grad['coords'][3]))
|
||||
this._out('/Function '+str(f1)+' 0 R')
|
||||
this._out('/Extend [true true] ')
|
||||
this._out('>>')
|
||||
elif(grad['type']==3):
|
||||
#x0, y0, r0, x1, y1, r1
|
||||
#at this this time radius of inner circle is 0
|
||||
this._out(sprintf('/Coords [%.3f %.3f 0 %.3f %.3f %.3f]',grad['coords'][0],grad['coords'][1],grad['coords'][2],grad['coords'][3],grad['coords'][4]))
|
||||
this._out('/Function '+str(f1)+' 0 R')
|
||||
this._out('/Extend [true true] ')
|
||||
this._out('>>')
|
||||
elif(grad['type']==6):
|
||||
this._out('/BitsPerCoordinate 16')
|
||||
this._out('/BitsPerComponent 8')
|
||||
this._out('/Decode[0 1 0 1 0 1 0 1 0 1]')
|
||||
this._out('/BitsPerFlag 8')
|
||||
this._out('/Length '+str(strlen(grad['stream'])))
|
||||
this._out('>>')
|
||||
this._putstream(grad['stream'])
|
||||
this._out('endobj')
|
||||
this.gradients[id]['id']=this.n
|
||||
|
||||
def _putresourcedict(this):
|
||||
FPDF._putresourcedict(this)
|
||||
this._out('/Shading <<')
|
||||
for id,grad in this.gradients.iteritems():
|
||||
this._out('/Sh'+str(id)+' '+str(grad['id'])+' 0 R')
|
||||
this._out('>>')
|
||||
|
||||
def _putresources(this):
|
||||
this._putshaders()
|
||||
FPDF._putresources(this)
|
||||
@@ -0,0 +1,58 @@
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
|
||||
"""
|
||||
A few rough Python equivalents of PHP internal functions (=lazy port).
|
||||
|
||||
NOTE:
|
||||
1) PHP "array" object is mostly similar to a Python "dictionary", but some
|
||||
times a "list" (or "array": see Protection.py) may be required!
|
||||
|
||||
2) PHP "isset()" tests often wether an array has given key, or a variable
|
||||
is defined in global/local space;
|
||||
|
||||
3) PHP string functions have often different return values from Python (see below);
|
||||
|
||||
4) "for (x; a <[=]b; y)" loops become "for i in range(a,b[+1]):" in Python;
|
||||
|
||||
5) PHP emits automatically floats quotients when needed, Python don't: so add a
|
||||
".0" to divisors when PDF expects decimal numbers.
|
||||
|
||||
Actually, all FPDF tutorials (even from ported modules) work fine, but bugs
|
||||
or incompatibilities might be hidden somewhere: so, USE IT AT YOUR OWN RISK!
|
||||
"""
|
||||
import sys, os
|
||||
|
||||
strlen = len
|
||||
filesize=os.path.getsize
|
||||
file_exists=os.path.exists
|
||||
count=len
|
||||
SEEK_CUR=1
|
||||
SEEK_SET=0
|
||||
|
||||
def substr(s, start, length=-1):
|
||||
if length < 0:
|
||||
length=len(s)-start
|
||||
return s[start:start+length]
|
||||
|
||||
def substr_count(haystack, needle, offset=0, length=None):
|
||||
return haystack.count(needle,offset)
|
||||
|
||||
def die(s):
|
||||
sys.stderr.write(s)
|
||||
sys.exit(-1)
|
||||
|
||||
def basename(p):
|
||||
return os.path.splitext(p)[0]
|
||||
|
||||
def is_bool(x): return type(x)==type(bool())
|
||||
def empty(s): return len(s)==0
|
||||
def is_string(s): return isinstance(s,basestring)
|
||||
def strtolower(s): return s.lower()
|
||||
def strtoupper(s): return s.upper()
|
||||
def str_replace(sc, rp, s): return s.replace(sc,rp)
|
||||
def sprintf(fmt, *args): return fmt % args
|
||||
def strpos(s, c): return s.find(c) # Python returns -1 instead of FALSE!
|
||||
def strrpos(s, c): return s.rfind(c) # Python returns -1 instead of FALSE!
|
||||
def hexdec(x): return int(x,16)
|
||||
def floor(x): return float(int(x))
|
||||
def str_repeat(s,t): return s*int(t)
|
||||
@@ -0,0 +1,187 @@
|
||||
#/****************************************************************************
|
||||
#* 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. *
|
||||
#* *
|
||||
#* Thanks: Cpdf (http:#www.ros.co.nz/pdf) was my working sample of how to *
|
||||
#* implement protection in pdf. *
|
||||
#****************************************************************************/
|
||||
from FPDF import *
|
||||
import random, struct, md5, copy, array
|
||||
|
||||
class Protection(FPDF):
|
||||
def __init__(this, orientation='P',unit='mm',format='A4'):
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
this.encrypted=0 #whether document is protected
|
||||
this.Uvalue='' #U entry in pdf document
|
||||
this.Ovalue='' #O entry in pdf document
|
||||
this.Pvalue='' #P entry in pdf document
|
||||
this.enc_obj_id=0 #encryption object id
|
||||
this.last_rc4_key='' #last RC4 key encrypted (cached for optimisation)
|
||||
this.last_rc4_key_c='' #last RC4 computed key
|
||||
this.encrypted=0
|
||||
this.padding="\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"
|
||||
|
||||
|
||||
#/**
|
||||
#* Function to set permissions as well as user and owner passwords
|
||||
#*
|
||||
#* - permissions is an array with values taken from the following list:
|
||||
#* copy, print, modify, annot-forms
|
||||
#* If a value is present it means that the permission is granted
|
||||
#* - If a user password is set, user will be prompted before document is opened
|
||||
#* - If an owner password is set, document can be opened in privilege mode with no
|
||||
#* restriction if that password is entered
|
||||
#*/
|
||||
def SetProtection(this,permissions=[],user_pass='',owner_pass=None):
|
||||
options={'print':4, 'modify':8, 'copy':16, 'annot-forms':32}
|
||||
protection = 192
|
||||
for permission in permissions:
|
||||
if permission not in options:
|
||||
this.Error('Incorrect permission: '+permission)
|
||||
protection += options[permission]
|
||||
|
||||
if (owner_pass == None):
|
||||
owner_pass=''
|
||||
for i in range(13):
|
||||
owner_pass += chr(random.randint(0,255))
|
||||
this.encrypted = 1
|
||||
this._generateencryptionkey(user_pass, owner_pass, protection)
|
||||
|
||||
|
||||
#/****************************************************************************
|
||||
#* *
|
||||
#* Private methods *
|
||||
#* *
|
||||
#****************************************************************************/
|
||||
def _putstream(this,s):
|
||||
if (this.encrypted):
|
||||
s = this._RC4(this._objectkey(this.n), s)
|
||||
FPDF._putstream(this,s)
|
||||
|
||||
def _textstring(this,s):
|
||||
if (this.encrypted):
|
||||
s = this._RC4(this._objectkey(this.n), s)
|
||||
return FPDF._textstring(this,s)
|
||||
|
||||
#/**
|
||||
#* Compute key depending on object number where the encrypted data is stored
|
||||
#*/
|
||||
def _objectkey(this,n):
|
||||
return substr(this._md5_16(this.encryption_key+struct.pack('L',n)[:-1]+'\x00\x00'),0,10)
|
||||
|
||||
#/**
|
||||
#* Escape special characters
|
||||
#*/
|
||||
def _escape(this,s):
|
||||
s=str_replace('\\','\\\\',s)
|
||||
s=str_replace(')','\\)',s)
|
||||
s=str_replace('(','\\(',s)
|
||||
s=str_replace("\r",'\\r',s)
|
||||
return s
|
||||
|
||||
def _putresources(this):
|
||||
FPDF._putresources(this)
|
||||
if (this.encrypted):
|
||||
this._newobj()
|
||||
this.enc_obj_id = this.n
|
||||
this._out('<<')
|
||||
this._putencryption()
|
||||
this._out('>>')
|
||||
this._out('endobj')
|
||||
|
||||
def _putencryption(this):
|
||||
this._out('/Filter /Standard')
|
||||
this._out('/V 1')
|
||||
this._out('/R 2')
|
||||
this._out('/O ('+this._escape(this.Ovalue)+')')
|
||||
this._out('/U ('+this._escape(this.Uvalue)+')')
|
||||
this._out('/P '+str(this.Pvalue))
|
||||
|
||||
def _puttrailer(this):
|
||||
FPDF._puttrailer(this)
|
||||
if (this.encrypted):
|
||||
this._out('/Encrypt '+str(this.enc_obj_id)+' 0 R')
|
||||
this._out('/ID [()()]')
|
||||
|
||||
#/**
|
||||
#* RC4 is the standard encryption algorithm used in PDF format
|
||||
#*/
|
||||
def _RC4(this, key, text):
|
||||
if (this.last_rc4_key != key):
|
||||
k = str_repeat(key, 256/strlen(key)+1)
|
||||
rc4 = array.array('B',range(256))
|
||||
j = 0
|
||||
for i in range(256):
|
||||
t = rc4[i]
|
||||
j = (j + t + ord(k[i])) % 256
|
||||
rc4[i] = rc4[j]
|
||||
rc4[j] = t
|
||||
this.last_rc4_key = key
|
||||
this.last_rc4_key_c = copy.copy(rc4)
|
||||
else:
|
||||
rc4 = copy.copy(this.last_rc4_key_c)
|
||||
len = strlen(text)
|
||||
a = 0
|
||||
b = 0
|
||||
out = ''
|
||||
for i in range(len):
|
||||
a = (a+1)%256
|
||||
t= rc4[a]
|
||||
b = (b+t)%256
|
||||
rc4[a] = rc4[b]
|
||||
rc4[b] = t
|
||||
k = rc4[(rc4[a]+rc4[b])%256]
|
||||
out+=chr(ord(text[i]) ^ k)
|
||||
return out
|
||||
|
||||
#/**
|
||||
#* Get MD5 as binary string
|
||||
#*/
|
||||
def _md5_16(this,string):
|
||||
return md5.new(string).digest()
|
||||
|
||||
#/**
|
||||
#* Compute O value
|
||||
#*/
|
||||
def _Ovalue(this, user_pass, owner_pass):
|
||||
tmp = this._md5_16(owner_pass)
|
||||
owner_RC4_key = substr(tmp,0,5)
|
||||
return this._RC4(owner_RC4_key, user_pass)
|
||||
|
||||
#/**
|
||||
#* Compute U value
|
||||
#*/
|
||||
def _Uvalue(this):
|
||||
return this._RC4(this.encryption_key, this.padding)
|
||||
|
||||
#/**
|
||||
#* Compute encryption key
|
||||
#*/
|
||||
def _generateencryptionkey(this, user_pass, owner_pass, protection):
|
||||
# Pad passwords
|
||||
user_pass = substr(user_pass+this.padding,0,32)
|
||||
owner_pass = substr(owner_pass+this.padding,0,32)
|
||||
# Compute O value
|
||||
this.Ovalue = this._Ovalue(user_pass,owner_pass)
|
||||
# Compute encyption key
|
||||
tmp = this._md5_16(user_pass+this.Ovalue+chr(protection)+"\xFF\xFF\xFF")
|
||||
this.encryption_key = substr(tmp,0,5)
|
||||
# Compute U value
|
||||
this.Uvalue = this._Uvalue()
|
||||
# Compute P value
|
||||
this.Pvalue = -((protection^255)+1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
pdf=Protection()
|
||||
pdf.SetProtection(['print'])
|
||||
pdf.Open()
|
||||
pdf.AddPage()
|
||||
pdf.SetFont('Arial')
|
||||
pdf.Write(10,'You can print me but not copy my text.')
|
||||
pdf.Output('Protected.pdf','F')
|
||||
@@ -0,0 +1,90 @@
|
||||
from FPDF import *
|
||||
|
||||
class TOC(FPDF):
|
||||
def __init__(this, orientation='P',unit='mm',format='A4'):
|
||||
this._toc=[]
|
||||
this._numbering=0
|
||||
this._numberingFooter=0
|
||||
this._numPageNum=1
|
||||
FPDF.__init__(this,orientation,unit,format)
|
||||
|
||||
def AddPage(this,orientation=''):
|
||||
FPDF.AddPage(this,orientation)
|
||||
if(this._numbering):
|
||||
this._numPageNum+=1
|
||||
|
||||
def startPageNums(this):
|
||||
this._numbering=1
|
||||
this._numberingFooter=1
|
||||
|
||||
def stopPageNums(this):
|
||||
this._numbering=0
|
||||
|
||||
def numPageNo(this):
|
||||
return this._numPageNum
|
||||
|
||||
def TOC_Entry(this,txt,level=0):
|
||||
this._toc+=[{'t':txt,'l':level,'p':this.numPageNo()}]
|
||||
|
||||
def insertTOC(this,location=1,labelSize=20,entrySize=10,tocfont='Times',label='Table of Contents'):
|
||||
#make toc at end
|
||||
this.stopPageNums()
|
||||
this.AddPage()
|
||||
tocstart=this.page
|
||||
|
||||
this.SetFont(tocfont,'B',labelSize)
|
||||
this.Cell(0,5,label,0,1,'C')
|
||||
this.Ln(10)
|
||||
|
||||
for t in this._toc:
|
||||
#Offset
|
||||
level=t['l']
|
||||
if(level>0):
|
||||
this.Cell(level*8)
|
||||
weight=''
|
||||
if(level==0):
|
||||
weight='B'
|
||||
Str=t['t']
|
||||
this.SetFont(tocfont,weight,entrySize)
|
||||
strsize=this.GetStringWidth(Str)
|
||||
this.Cell(strsize+2,this.FontSize+2,Str)
|
||||
|
||||
#Filling dots
|
||||
this.SetFont(tocfont,'',entrySize)
|
||||
PageCellSize=this.GetStringWidth(str(t['p']))+2
|
||||
w=this.w-this.lMargin-this.rMargin-PageCellSize-(level*8)-(strsize+2)
|
||||
nb=w/this.GetStringWidth('.')
|
||||
dots=str_repeat('.',nb)
|
||||
this.Cell(w,this.FontSize+2,dots,0,0,'R')
|
||||
|
||||
#Page number
|
||||
this.Cell(PageCellSize,this.FontSize+2,str(t['p']),0,1,'R')
|
||||
|
||||
#grab it and move to selected location
|
||||
n=this.page
|
||||
n_toc = n - tocstart + 1
|
||||
last = []
|
||||
|
||||
#store toc pages
|
||||
for i in xrange(tocstart,n+1):
|
||||
last+=[this.pages[i]]
|
||||
|
||||
#move pages
|
||||
for i in xrange(tocstart-1,location-1,-1):
|
||||
#~ for(i=tocstart - 1;i>=location-1;i--)
|
||||
this.pages[i+n_toc]=this.pages[i]
|
||||
|
||||
#Put toc pages at insert point
|
||||
for i in xrange(0,n_toc):
|
||||
this.pages[location + i]=last[i]
|
||||
|
||||
def Footer(this):
|
||||
if(this._numberingFooter==0):
|
||||
return
|
||||
#Go to 1.5 cm from bottom
|
||||
this.SetY(-15)
|
||||
#Select Arial italic 8
|
||||
this.SetFont('Arial','I',8)
|
||||
this.Cell(0,7,str(this.numPageNo()),0,0,'C');
|
||||
if(this._numbering==0):
|
||||
this._numberingFooter=0
|
||||
@@ -0,0 +1,275 @@
|
||||
StartFontMetrics 4.1
|
||||
FontName Calligrapher-Regular
|
||||
FullName Calligrapher Regular
|
||||
Notice Generated by Fontographer 3.5
|
||||
EncodingScheme FontSpecific
|
||||
FamilyName Calligrapher
|
||||
Weight Regular
|
||||
Version (Altsys Fontographer 3.5 5/26/92)
|
||||
Characters 215
|
||||
ItalicAngle 0.0
|
||||
Ascender 899
|
||||
Descender -234
|
||||
UnderlineThickness 20
|
||||
UnderlinePosition -200
|
||||
IsFixedPitch false
|
||||
FontBBox -50 -234 1328 899
|
||||
StartCharMetrics 256
|
||||
C 0 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 1 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 2 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 3 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 4 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 5 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 6 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 7 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 8 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 9 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 10 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 11 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 12 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 13 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 14 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 15 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 16 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 17 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 18 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 19 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 20 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 21 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 22 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 23 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 24 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 25 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 26 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 27 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 28 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 29 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 30 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 31 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 32 ; WX 282 ; N space ; B 67 -16 251 718 ;
|
||||
C 33 ; WX 324 ; N exclam ; B 67 -16 251 718 ;
|
||||
C 34 ; WX 405 ; N quotedbl ; B 60 460 353 718 ;
|
||||
C 35 ; WX 584 ; N numbersign ; B 35 0 549 701 ;
|
||||
C 36 ; WX 632 ; N dollar ; B 32 -126 595 814 ;
|
||||
C 37 ; WX 980 ; N percent ; B 35 -16 945 703 ;
|
||||
C 38 ; WX 776 ; N ampersand ; B 41 -17 811 670 ;
|
||||
C 39 ; WX 259 ; N quotesingle ; B 72 460 206 718 ;
|
||||
C 40 ; WX 299 ; N parenleft ; B 57 -119 299 785 ;
|
||||
C 41 ; WX 299 ; N parenright ; B 0 -119 242 785 ;
|
||||
C 42 ; WX 377 ; N asterisk ; B 35 407 342 714 ;
|
||||
C 43 ; WX 600 ; N plus ; B 47 0 553 506 ;
|
||||
C 44 ; WX 259 ; N comma ; B 35 -67 224 162 ;
|
||||
C 45 ; WX 432 ; N hyphen ; B 28 249 404 377 ;
|
||||
C 46 ; WX 254 ; N period ; B 43 -16 227 162 ;
|
||||
C 47 ; WX 597 ; N slash ; B 7 -14 591 714 ;
|
||||
C 48 ; WX 529 ; N zero ; B 21 -18 508 583 ;
|
||||
C 49 ; WX 298 ; N one ; B 8 -15 233 582 ;
|
||||
C 50 ; WX 451 ; N two ; B 17 -8 430 588 ;
|
||||
C 51 ; WX 359 ; N three ; B 11 -54 337 582 ;
|
||||
C 52 ; WX 525 ; N four ; B 18 -20 519 602 ;
|
||||
C 53 ; WX 423 ; N five ; B 10 -55 420 582 ;
|
||||
C 54 ; WX 464 ; N six ; B 23 -14 447 589 ;
|
||||
C 55 ; WX 417 ; N seven ; B 8 -18 415 589 ;
|
||||
C 56 ; WX 457 ; N eight ; B 19 -16 432 583 ;
|
||||
C 57 ; WX 479 ; N nine ; B 26 -16 450 588 ;
|
||||
C 58 ; WX 275 ; N colon ; B 59 -16 242 491 ;
|
||||
C 59 ; WX 282 ; N semicolon ; B 54 -67 245 491 ;
|
||||
C 60 ; WX 600 ; N less ; B 47 -8 553 514 ;
|
||||
C 61 ; WX 600 ; N equal ; B 47 98 553 408 ;
|
||||
C 62 ; WX 600 ; N greater ; B 47 -8 553 514 ;
|
||||
C 63 ; WX 501 ; N question ; B 21 -16 473 721 ;
|
||||
C 64 ; WX 800 ; N at ; B 29 -12 771 730 ;
|
||||
C 65 ; WX 743 ; N A ; B -23 -14 754 723 ;
|
||||
C 66 ; WX 636 ; N B ; B -42 -7 608 706 ;
|
||||
C 67 ; WX 598 ; N C ; B 27 -12 572 712 ;
|
||||
C 68 ; WX 712 ; N D ; B -42 -11 684 705 ;
|
||||
C 69 ; WX 608 ; N E ; B -21 0 608 708 ;
|
||||
C 70 ; WX 562 ; N F ; B -21 -18 584 716 ;
|
||||
C 71 ; WX 680 ; N G ; B 29 -8 668 714 ;
|
||||
C 72 ; WX 756 ; N H ; B 70 -17 777 728 ;
|
||||
C 73 ; WX 308 ; N I ; B 14 -15 238 718 ;
|
||||
C 74 ; WX 314 ; N J ; B 7 -223 244 727 ;
|
||||
C 75 ; WX 676 ; N K ; B 14 -16 683 725 ;
|
||||
C 76 ; WX 552 ; N L ; B 14 -8 580 713 ;
|
||||
C 77 ; WX 1041 ; N M ; B 42 -17 1017 739 ;
|
||||
C 78 ; WX 817 ; N N ; B -42 -17 747 736 ;
|
||||
C 79 ; WX 729 ; N O ; B 32 -16 698 709 ;
|
||||
C 80 ; WX 569 ; N P ; B -35 -15 570 716 ;
|
||||
C 81 ; WX 698 ; N Q ; B 27 -201 1328 715 ;
|
||||
C 82 ; WX 674 ; N R ; B -35 -20 696 712 ;
|
||||
C 83 ; WX 618 ; N S ; B 31 -16 589 709 ;
|
||||
C 84 ; WX 673 ; N T ; B -21 -20 702 714 ;
|
||||
C 85 ; WX 805 ; N U ; B 0 -19 804 722 ;
|
||||
C 86 ; WX 753 ; N V ; B -28 -20 788 729 ;
|
||||
C 87 ; WX 1238 ; N W ; B -28 -17 1273 736 ;
|
||||
C 88 ; WX 716 ; N X ; B 7 -38 709 731 ;
|
||||
C 89 ; WX 754 ; N Y ; B -35 -17 789 747 ;
|
||||
C 90 ; WX 599 ; N Z ; B 30 -5 584 748 ;
|
||||
C 91 ; WX 315 ; N bracketleft ; B 93 -124 322 718 ;
|
||||
C 92 ; WX 463 ; N backslash ; B -21 -18 484 736 ;
|
||||
C 93 ; WX 315 ; N bracketright ; B -7 -124 222 718 ;
|
||||
C 94 ; WX 600 ; N asciicircum ; B 63 266 537 658 ;
|
||||
C 95 ; WX 547 ; N underscore ; B -7 -198 554 -163 ;
|
||||
C 96 ; WX 278 ; N grave ; B -1 541 214 693 ;
|
||||
C 97 ; WX 581 ; N a ; B 21 -16 581 494 ;
|
||||
C 98 ; WX 564 ; N b ; B -24 -17 543 793 ;
|
||||
C 99 ; WX 440 ; N c ; B 21 -17 422 490 ;
|
||||
C 100 ; WX 571 ; N d ; B 0 -15 550 659 ;
|
||||
C 101 ; WX 450 ; N e ; B 28 -23 428 493 ;
|
||||
C 102 ; WX 347 ; N f ; B -35 -14 474 785 ;
|
||||
C 103 ; WX 628 ; N g ; B 19 -219 612 496 ;
|
||||
C 104 ; WX 611 ; N h ; B -29 -18 569 785 ;
|
||||
C 105 ; WX 283 ; N i ; B -14 -15 241 679 ;
|
||||
C 106 ; WX 283 ; N j ; B -14 -234 241 679 ;
|
||||
C 107 ; WX 560 ; N k ; B -24 -15 582 789 ;
|
||||
C 108 ; WX 252 ; N l ; B -28 -15 210 789 ;
|
||||
C 109 ; WX 976 ; N m ; B -21 -16 927 494 ;
|
||||
C 110 ; WX 595 ; N n ; B -28 -15 574 493 ;
|
||||
C 111 ; WX 508 ; N o ; B 27 -17 485 490 ;
|
||||
C 112 ; WX 549 ; N p ; B -28 -216 526 496 ;
|
||||
C 113 ; WX 540 ; N q ; B 28 -219 491 493 ;
|
||||
C 114 ; WX 395 ; N r ; B -21 -19 430 492 ;
|
||||
C 115 ; WX 441 ; N s ; B 34 -15 413 493 ;
|
||||
C 116 ; WX 307 ; N t ; B -21 -16 378 621 ;
|
||||
C 117 ; WX 614 ; N u ; B -14 -18 558 501 ;
|
||||
C 118 ; WX 556 ; N v ; B -28 -20 569 483 ;
|
||||
C 119 ; WX 915 ; N w ; B -28 -17 928 495 ;
|
||||
C 120 ; WX 559 ; N x ; B 14 -17 546 500 ;
|
||||
C 121 ; WX 597 ; N y ; B -21 -227 541 500 ;
|
||||
C 122 ; WX 452 ; N z ; B 28 -5 442 515 ;
|
||||
C 123 ; WX 315 ; N braceleft ; B 6 -118 309 718 ;
|
||||
C 124 ; WX 222 ; N bar ; B 63 -18 159 730 ;
|
||||
C 125 ; WX 315 ; N braceright ; B 6 -118 309 718 ;
|
||||
C 126 ; WX 600 ; N asciitilde ; B 69 166 531 340 ;
|
||||
C 127 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 128 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 129 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 130 ; WX 0 ; N quotesinglbase ; B -23 -14 754 877 ;
|
||||
C 131 ; WX 0 ; N florin ; B 0 -19 804 854 ;
|
||||
C 132 ; WX 0 ; N quotedblbase ; B -23 -14 754 877 ;
|
||||
C 133 ; WX 780 ; N ellipsis ; B 43 -16 747 162 ;
|
||||
C 134 ; WX 0 ; N dagger ; B 27 -122 437 592 ;
|
||||
C 135 ; WX 0 ; N daggerdbl ; B 43 278 227 456 ;
|
||||
C 136 ; WX 278 ; N circumflex ; B -14 557 292 677 ;
|
||||
C 137 ; WX 0 ; N perthousand ; B -23 -14 754 877 ;
|
||||
C 138 ; WX 0 ; N Scaron ; B 0 0 0 100 ;
|
||||
C 139 ; WX 0 ; N guilsinglleft ; B 43 278 227 456 ;
|
||||
C 140 ; WX 1064 ; N OE ; B 32 -16 1055 709 ;
|
||||
C 141 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 142 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 143 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 144 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 145 ; WX 259 ; N quoteleft ; B 35 489 224 717 ;
|
||||
C 146 ; WX 259 ; N quoteright ; B 35 489 224 717 ;
|
||||
C 147 ; WX 470 ; N quotedblleft ; B 35 489 443 717 ;
|
||||
C 148 ; WX 470 ; N quotedblright ; B 35 487 443 717 ;
|
||||
C 149 ; WX 500 ; N bullet ; B 70 179 430 539 ;
|
||||
C 150 ; WX 300 ; N endash ; B 0 245 300 350 ;
|
||||
C 151 ; WX 600 ; N emdash ; B 0 245 600 350 ;
|
||||
C 152 ; WX 278 ; N tilde ; B -44 563 326 689 ;
|
||||
C 153 ; WX 990 ; N trademark ; B 62 306 928 718 ;
|
||||
C 154 ; WX 0 ; N scaron ; B 0 0 0 100 ;
|
||||
C 155 ; WX 0 ; N guilsinglright ; B 43 278 227 456 ;
|
||||
C 156 ; WX 790 ; N oe ; B 27 -23 764 493 ;
|
||||
C 157 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 158 ; WX 800 ; N .notdef ; B 50 0 750 800 ;
|
||||
C 159 ; WX 754 ; N Ydieresis ; B -35 -17 789 882 ;
|
||||
C 160 ; WX 282 ; N nbspace ; B -23 -14 754 893 ;
|
||||
C 161 ; WX 324 ; N exclamdown ; B 69 -203 253 531 ;
|
||||
C 162 ; WX 450 ; N cent ; B 27 -122 437 592 ;
|
||||
C 163 ; WX 640 ; N sterling ; B 0 -9 619 716 ;
|
||||
C 164 ; WX 518 ; N currency ; B 3 72 515 586 ;
|
||||
C 165 ; WX 603 ; N yen ; B -28 -65 631 747 ;
|
||||
C 166 ; WX 0 ; N brokenbar ; B 0 0 0 100 ;
|
||||
C 167 ; WX 519 ; N section ; B -50 -216 524 762 ;
|
||||
C 168 ; WX 254 ; N dieresis ; B -20 554 308 682 ;
|
||||
C 169 ; WX 800 ; N copyright ; B 29 -12 771 730 ;
|
||||
C 170 ; WX 349 ; N ordfeminine ; B 13 385 349 717 ;
|
||||
C 171 ; WX 0 ; N guillemotleft ; B 43 -16 747 162 ;
|
||||
C 172 ; WX 0 ; N logicalnot ; B 30 0 730 700 ;
|
||||
C 173 ; WX 432 ; N hyphen ; B 28 249 404 377 ;
|
||||
C 174 ; WX 800 ; N registered ; B 29 -12 771 730 ;
|
||||
C 175 ; WX 278 ; N macron ; B -47 584 325 665 ;
|
||||
C 176 ; WX 0 ; N degree ; B 27 -122 437 592 ;
|
||||
C 177 ; WX 0 ; N plusminus ; B 29 -8 668 877 ;
|
||||
C 178 ; WX 0 ; N twosuperior ; B 0 0 0 100 ;
|
||||
C 179 ; WX 0 ; N threesuperior ; B 0 0 0 100 ;
|
||||
C 180 ; WX 278 ; N acute ; B 49 536 279 693 ;
|
||||
C 181 ; WX 614 ; N mu ; B -14 -231 558 501 ;
|
||||
C 182 ; WX 0 ; N paragraph ; B -35 -15 668 785 ;
|
||||
C 183 ; WX 254 ; N periodcentered ; B 43 278 227 456 ;
|
||||
C 184 ; WX 278 ; N cedilla ; B -8 -216 231 6 ;
|
||||
C 185 ; WX 0 ; N onesuperior ; B 0 0 0 100 ;
|
||||
C 186 ; WX 305 ; N ordmasculine ; B 16 373 291 702 ;
|
||||
C 187 ; WX 0 ; N guillemotright ; B 43 -16 747 162 ;
|
||||
C 188 ; WX 0 ; N onequarter ; B 0 0 0 100 ;
|
||||
C 189 ; WX 0 ; N onehalf ; B 0 0 0 100 ;
|
||||
C 190 ; WX 0 ; N threequarters ; B 0 0 0 100 ;
|
||||
C 191 ; WX 501 ; N questiondown ; B 15 -196 467 541 ;
|
||||
C 192 ; WX 743 ; N Agrave ; B -23 -14 754 893 ;
|
||||
C 193 ; WX 743 ; N Aacute ; B -23 -14 754 893 ;
|
||||
C 194 ; WX 743 ; N Acircumflex ; B -23 -14 754 877 ;
|
||||
C 195 ; WX 743 ; N Atilde ; B -23 -14 754 889 ;
|
||||
C 196 ; WX 743 ; N Adieresis ; B -23 -14 754 882 ;
|
||||
C 197 ; WX 743 ; N Aring ; B -23 -14 754 899 ;
|
||||
C 198 ; WX 1060 ; N AE ; B -29 -14 1053 708 ;
|
||||
C 199 ; WX 598 ; N Ccedilla ; B 27 -183 572 712 ;
|
||||
C 200 ; WX 608 ; N Egrave ; B -21 0 608 893 ;
|
||||
C 201 ; WX 608 ; N Eacute ; B -21 0 608 893 ;
|
||||
C 202 ; WX 608 ; N Ecircumflex ; B -21 0 608 877 ;
|
||||
C 203 ; WX 608 ; N Edieresis ; B -21 0 608 882 ;
|
||||
C 204 ; WX 308 ; N Igrave ; B 14 -15 264 893 ;
|
||||
C 205 ; WX 308 ; N Iacute ; B 14 -15 274 893 ;
|
||||
C 206 ; WX 308 ; N Icircumflex ; B 1 -15 307 877 ;
|
||||
C 207 ; WX 308 ; N Idieresis ; B -15 -15 313 882 ;
|
||||
C 208 ; WX 0 ; N Eth ; B 0 0 0 100 ;
|
||||
C 209 ; WX 817 ; N Ntilde ; B -42 -17 747 889 ;
|
||||
C 210 ; WX 729 ; N Ograve ; B 32 -16 698 893 ;
|
||||
C 211 ; WX 729 ; N Oacute ; B 32 -16 698 893 ;
|
||||
C 212 ; WX 729 ; N Ocircumflex ; B 32 -16 698 877 ;
|
||||
C 213 ; WX 729 ; N Otilde ; B 32 -16 698 889 ;
|
||||
C 214 ; WX 729 ; N Odieresis ; B 32 -16 698 882 ;
|
||||
C 215 ; WX 0 ; N multiply ; B 0 0 0 100 ;
|
||||
C 216 ; WX 729 ; N Oslash ; B 14 -24 724 709 ;
|
||||
C 217 ; WX 805 ; N Ugrave ; B 0 -19 804 893 ;
|
||||
C 218 ; WX 805 ; N Uacute ; B 0 -19 804 893 ;
|
||||
C 219 ; WX 805 ; N Ucircumflex ; B 0 -19 804 877 ;
|
||||
C 220 ; WX 805 ; N Udieresis ; B 0 -19 804 882 ;
|
||||
C 221 ; WX 0 ; N _235 ; B 0 0 0 100 ;
|
||||
C 222 ; WX 0 ; N Thorn ; B 0 0 0 100 ;
|
||||
C 223 ; WX 688 ; N germandbls ; B -35 -15 668 785 ;
|
||||
C 224 ; WX 581 ; N agrave ; B 21 -16 581 693 ;
|
||||
C 225 ; WX 581 ; N aacute ; B 21 -16 581 693 ;
|
||||
C 226 ; WX 581 ; N acircumflex ; B 21 -16 581 677 ;
|
||||
C 227 ; WX 581 ; N atilde ; B 21 -16 581 689 ;
|
||||
C 228 ; WX 581 ; N adieresis ; B 21 -16 581 682 ;
|
||||
C 229 ; WX 581 ; N aring ; B 21 -16 581 734 ;
|
||||
C 230 ; WX 792 ; N ae ; B 21 -23 773 494 ;
|
||||
C 231 ; WX 440 ; N ccedilla ; B 21 -183 422 490 ;
|
||||
C 232 ; WX 450 ; N egrave ; B 28 -23 428 693 ;
|
||||
C 233 ; WX 450 ; N eacute ; B 28 -23 428 693 ;
|
||||
C 234 ; WX 450 ; N ecircumflex ; B 28 -23 432 677 ;
|
||||
C 235 ; WX 450 ; N edieresis ; B 28 -23 428 682 ;
|
||||
C 236 ; WX 283 ; N igrave ; B -14 -15 244 693 ;
|
||||
C 237 ; WX 283 ; N iacute ; B -14 -15 269 693 ;
|
||||
C 238 ; WX 283 ; N icircumflex ; B -14 -15 297 677 ;
|
||||
C 239 ; WX 283 ; N idieresis ; B -25 -15 303 682 ;
|
||||
C 240 ; WX 0 ; N Yacute ; B 0 0 0 100 ;
|
||||
C 241 ; WX 595 ; N ntilde ; B -28 -15 574 689 ;
|
||||
C 242 ; WX 508 ; N ograve ; B 27 -17 485 693 ;
|
||||
C 243 ; WX 508 ; N oacute ; B 27 -17 485 693 ;
|
||||
C 244 ; WX 508 ; N ocircumflex ; B 27 -17 485 677 ;
|
||||
C 245 ; WX 508 ; N otilde ; B 27 -17 485 689 ;
|
||||
C 246 ; WX 508 ; N odieresis ; B 27 -17 485 682 ;
|
||||
C 247 ; WX 0 ; N divide ; B 35 0 760 727 ;
|
||||
C 248 ; WX 508 ; N oslash ; B -8 -54 496 589 ;
|
||||
C 249 ; WX 614 ; N ugrave ; B -14 -18 558 693 ;
|
||||
C 250 ; WX 614 ; N uacute ; B -14 -18 558 693 ;
|
||||
C 251 ; WX 614 ; N ucircumflex ; B -14 -18 558 677 ;
|
||||
C 252 ; WX 614 ; N udieresis ; B -14 -18 558 682 ;
|
||||
C 253 ; WX 0 ; N yacute ; B 0 0 0 100 ;
|
||||
C 254 ; WX 0 ; N thorn ; B 0 0 0 100 ;
|
||||
C 255 ; WX 597 ; N ydieresis ; B -21 -227 541 682 ;
|
||||
EndCharMetrics
|
||||
EndFontMetrics
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
type='TrueType'
|
||||
name='Calligrapher-Regular'
|
||||
desc={'Ascent':899,'Descent':-234,'CapHeight':731,'Flags':32,'FontBBox':'[-50 -234 1328 899]','ItalicAngle':0,'StemV':70,'MissingWidth':800}
|
||||
up=-200
|
||||
ut=20
|
||||
cw={
|
||||
'\x00':800,'\x01':800,'\x02':800,'\x03':800,'\x04':800,'\x05':800,'\x06':800,'\x07':800,'\x08':800,'\t':800,'\n':800,'\x0b':800,'\x0c':800,'\r':800,'\x0e':800,'\x0f':800,'\x10':800,'\x11':800,'\x12':800,'\x13':800,'\x14':800,'\x15':800,
|
||||
'\x16':800,'\x17':800,'\x18':800,'\x19':800,'\x1a':800,'\x1b':800,'\x1c':800,'\x1d':800,'\x1e':800,'\x1f':800,' ':282,'!':324,'"':405,'#':584,'$':632,'%':980,'&':776,'\'':259,'(':299,')':299,'*':377,'+':600,
|
||||
',':259,'-':432,'.':254,'/':597,'0':529,'1':298,'2':451,'3':359,'4':525,'5':423,'6':464,'7':417,'8':457,'9':479,':':275,';':282,'<':600,'=':600,'>':600,'?':501,'@':800,'A':743,
|
||||
'B':636,'C':598,'D':712,'E':608,'F':562,'G':680,'H':756,'I':308,'J':314,'K':676,'L':552,'M':1041,'N':817,'O':729,'P':569,'Q':698,'R':674,'S':618,'T':673,'U':805,'V':753,'W':1238,
|
||||
'X':716,'Y':754,'Z':599,'[':315,'\\':463,']':315,'^':600,'_':547,'`':278,'a':581,'b':564,'c':440,'d':571,'e':450,'f':347,'g':628,'h':611,'i':283,'j':283,'k':560,'l':252,'m':976,
|
||||
'n':595,'o':508,'p':549,'q':540,'r':395,'s':441,'t':307,'u':614,'v':556,'w':915,'x':559,'y':597,'z':452,'{':315,'|':222,'}':315,'~':600,'\x7f':800,'\x80':800,'\x81':800,'\x82':0,'\x83':0,
|
||||
'\x84':0,'\x85':780,'\x86':0,'\x87':0,'\x88':278,'\x89':0,'\x8a':0,'\x8b':0,'\x8c':1064,'\x8d':800,'\x8e':800,'\x8f':800,'\x90':800,'\x91':259,'\x92':259,'\x93':470,'\x94':470,'\x95':500,'\x96':300,'\x97':600,'\x98':278,'\x99':990,
|
||||
'\x9a':0,'\x9b':0,'\x9c':790,'\x9d':800,'\x9e':800,'\x9f':754,'\xa0':282,'\xa1':324,'\xa2':450,'\xa3':640,'\xa4':518,'\xa5':603,'\xa6':0,'\xa7':519,'\xa8':254,'\xa9':800,'\xaa':349,'\xab':0,'\xac':0,'\xad':432,'\xae':800,'\xaf':278,
|
||||
'\xb0':0,'\xb1':0,'\xb2':0,'\xb3':0,'\xb4':278,'\xb5':614,'\xb6':0,'\xb7':254,'\xb8':278,'\xb9':0,'\xba':305,'\xbb':0,'\xbc':0,'\xbd':0,'\xbe':0,'\xbf':501,'\xc0':743,'\xc1':743,'\xc2':743,'\xc3':743,'\xc4':743,'\xc5':743,
|
||||
'\xc6':1060,'\xc7':598,'\xc8':608,'\xc9':608,'\xca':608,'\xcb':608,'\xcc':308,'\xcd':308,'\xce':308,'\xcf':308,'\xd0':0,'\xd1':817,'\xd2':729,'\xd3':729,'\xd4':729,'\xd5':729,'\xd6':729,'\xd7':0,'\xd8':729,'\xd9':805,'\xda':805,'\xdb':805,
|
||||
'\xdc':805,'\xdd':0,'\xde':0,'\xdf':688,'\xe0':581,'\xe1':581,'\xe2':581,'\xe3':581,'\xe4':581,'\xe5':581,'\xe6':792,'\xe7':440,'\xe8':450,'\xe9':450,'\xea':450,'\xeb':450,'\xec':283,'\xed':283,'\xee':283,'\xef':283,'\xf0':800,'\xf1':595,
|
||||
'\xf2':508,'\xf3':508,'\xf4':508,'\xf5':508,'\xf6':508,'\xf7':0,'\xf8':508,'\xf9':614,'\xfa':614,'\xfb':614,'\xfc':614,'\xfd':0,'\xfe':0,'\xff':597}
|
||||
enc='cp1252'
|
||||
diff=''
|
||||
filename='calligra.z'
|
||||
originalsize=40120
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
fpdf_charwidths['courier']={}
|
||||
|
||||
for i in xrange(0,256):
|
||||
fpdf_charwidths['courier'][chr(i)]=600
|
||||
fpdf_charwidths['courierB']=fpdf_charwidths['courier']
|
||||
fpdf_charwidths['courierI']=fpdf_charwidths['courier']
|
||||
fpdf_charwidths['courierBI']=fpdf_charwidths['courier']
|
||||
@@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+015A Sacute
|
||||
!8D U+0164 Tcaron
|
||||
!8E U+017D Zcaron
|
||||
!8F U+0179 Zacute
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+015B sacute
|
||||
!9D U+0165 tcaron
|
||||
!9E U+017E zcaron
|
||||
!9F U+017A zacute
|
||||
!A0 U+00A0 space
|
||||
!A1 U+02C7 caron
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0104 Aogonek
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+015E Scedilla
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0105 aogonek
|
||||
!BA U+015F scedilla
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+013D Lcaron
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+013E lcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,255 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0402 afii10051
|
||||
!81 U+0403 afii10052
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0453 afii10100
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+20AC Euro
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0409 afii10058
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+040A afii10059
|
||||
!8D U+040C afii10061
|
||||
!8E U+040B afii10060
|
||||
!8F U+040F afii10145
|
||||
!90 U+0452 afii10099
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0459 afii10106
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+045A afii10107
|
||||
!9D U+045C afii10109
|
||||
!9E U+045B afii10108
|
||||
!9F U+045F afii10193
|
||||
!A0 U+00A0 space
|
||||
!A1 U+040E afii10062
|
||||
!A2 U+045E afii10110
|
||||
!A3 U+0408 afii10057
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0490 afii10050
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0401 afii10023
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0404 afii10053
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+0407 afii10056
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+0406 afii10055
|
||||
!B3 U+0456 afii10103
|
||||
!B4 U+0491 afii10098
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0451 afii10071
|
||||
!B9 U+2116 afii61352
|
||||
!BA U+0454 afii10101
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0458 afii10105
|
||||
!BD U+0405 afii10054
|
||||
!BE U+0455 afii10102
|
||||
!BF U+0457 afii10104
|
||||
!C0 U+0410 afii10017
|
||||
!C1 U+0411 afii10018
|
||||
!C2 U+0412 afii10019
|
||||
!C3 U+0413 afii10020
|
||||
!C4 U+0414 afii10021
|
||||
!C5 U+0415 afii10022
|
||||
!C6 U+0416 afii10024
|
||||
!C7 U+0417 afii10025
|
||||
!C8 U+0418 afii10026
|
||||
!C9 U+0419 afii10027
|
||||
!CA U+041A afii10028
|
||||
!CB U+041B afii10029
|
||||
!CC U+041C afii10030
|
||||
!CD U+041D afii10031
|
||||
!CE U+041E afii10032
|
||||
!CF U+041F afii10033
|
||||
!D0 U+0420 afii10034
|
||||
!D1 U+0421 afii10035
|
||||
!D2 U+0422 afii10036
|
||||
!D3 U+0423 afii10037
|
||||
!D4 U+0424 afii10038
|
||||
!D5 U+0425 afii10039
|
||||
!D6 U+0426 afii10040
|
||||
!D7 U+0427 afii10041
|
||||
!D8 U+0428 afii10042
|
||||
!D9 U+0429 afii10043
|
||||
!DA U+042A afii10044
|
||||
!DB U+042B afii10045
|
||||
!DC U+042C afii10046
|
||||
!DD U+042D afii10047
|
||||
!DE U+042E afii10048
|
||||
!DF U+042F afii10049
|
||||
!E0 U+0430 afii10065
|
||||
!E1 U+0431 afii10066
|
||||
!E2 U+0432 afii10067
|
||||
!E3 U+0433 afii10068
|
||||
!E4 U+0434 afii10069
|
||||
!E5 U+0435 afii10070
|
||||
!E6 U+0436 afii10072
|
||||
!E7 U+0437 afii10073
|
||||
!E8 U+0438 afii10074
|
||||
!E9 U+0439 afii10075
|
||||
!EA U+043A afii10076
|
||||
!EB U+043B afii10077
|
||||
!EC U+043C afii10078
|
||||
!ED U+043D afii10079
|
||||
!EE U+043E afii10080
|
||||
!EF U+043F afii10081
|
||||
!F0 U+0440 afii10082
|
||||
!F1 U+0441 afii10083
|
||||
!F2 U+0442 afii10084
|
||||
!F3 U+0443 afii10085
|
||||
!F4 U+0444 afii10086
|
||||
!F5 U+0445 afii10087
|
||||
!F6 U+0446 afii10088
|
||||
!F7 U+0447 afii10089
|
||||
!F8 U+0448 afii10090
|
||||
!F9 U+0449 afii10091
|
||||
!FA U+044A afii10092
|
||||
!FB U+044B afii10093
|
||||
!FC U+044C afii10094
|
||||
!FD U+044D afii10095
|
||||
!FE U+044E afii10096
|
||||
!FF U+044F afii10097
|
||||
@@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!8E U+017D Zcaron
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9E U+017E zcaron
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,239 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0385 dieresistonos
|
||||
!A2 U+0386 Alphatonos
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
||||
@@ -0,0 +1,249 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,233 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AA afii57636
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00D7 multiply
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD sfthyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 middot
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00F7 divide
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+05B0 afii57799
|
||||
!C1 U+05B1 afii57801
|
||||
!C2 U+05B2 afii57800
|
||||
!C3 U+05B3 afii57802
|
||||
!C4 U+05B4 afii57793
|
||||
!C5 U+05B5 afii57794
|
||||
!C6 U+05B6 afii57795
|
||||
!C7 U+05B7 afii57798
|
||||
!C8 U+05B8 afii57797
|
||||
!C9 U+05B9 afii57806
|
||||
!CB U+05BB afii57796
|
||||
!CC U+05BC afii57807
|
||||
!CD U+05BD afii57839
|
||||
!CE U+05BE afii57645
|
||||
!CF U+05BF afii57841
|
||||
!D0 U+05C0 afii57842
|
||||
!D1 U+05C1 afii57804
|
||||
!D2 U+05C2 afii57803
|
||||
!D3 U+05C3 afii57658
|
||||
!D4 U+05F0 afii57716
|
||||
!D5 U+05F1 afii57717
|
||||
!D6 U+05F2 afii57718
|
||||
!D7 U+05F3 gereshhebrew
|
||||
!D8 U+05F4 gershayimhebrew
|
||||
!E0 U+05D0 afii57664
|
||||
!E1 U+05D1 afii57665
|
||||
!E2 U+05D2 afii57666
|
||||
!E3 U+05D3 afii57667
|
||||
!E4 U+05D4 afii57668
|
||||
!E5 U+05D5 afii57669
|
||||
!E6 U+05D6 afii57670
|
||||
!E7 U+05D7 afii57671
|
||||
!E8 U+05D8 afii57672
|
||||
!E9 U+05D9 afii57673
|
||||
!EA U+05DA afii57674
|
||||
!EB U+05DB afii57675
|
||||
!EC U+05DC afii57676
|
||||
!ED U+05DD afii57677
|
||||
!EE U+05DE afii57678
|
||||
!EF U+05DF afii57679
|
||||
!F0 U+05E0 afii57680
|
||||
!F1 U+05E1 afii57681
|
||||
!F2 U+05E2 afii57682
|
||||
!F3 U+05E3 afii57683
|
||||
!F4 U+05E4 afii57684
|
||||
!F5 U+05E5 afii57685
|
||||
!F6 U+05E6 afii57686
|
||||
!F7 U+05E7 afii57687
|
||||
!F8 U+05E8 afii57688
|
||||
!F9 U+05E9 afii57689
|
||||
!FA U+05EA afii57690
|
||||
!FD U+200E afii299
|
||||
!FE U+200F afii300
|
||||
@@ -0,0 +1,244 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8D U+00A8 dieresis
|
||||
!8E U+02C7 caron
|
||||
!8F U+00B8 cedilla
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9D U+00AF macron
|
||||
!9E U+02DB ogonek
|
||||
!A0 U+00A0 space
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00D8 Oslash
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0156 Rcommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00C6 AE
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00F8 oslash
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+0157 rcommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00E6 ae
|
||||
!C0 U+0104 Aogonek
|
||||
!C1 U+012E Iogonek
|
||||
!C2 U+0100 Amacron
|
||||
!C3 U+0106 Cacute
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+0118 Eogonek
|
||||
!C7 U+0112 Emacron
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0179 Zacute
|
||||
!CB U+0116 Edotaccent
|
||||
!CC U+0122 Gcommaaccent
|
||||
!CD U+0136 Kcommaaccent
|
||||
!CE U+012A Imacron
|
||||
!CF U+013B Lcommaaccent
|
||||
!D0 U+0160 Scaron
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0145 Ncommaaccent
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+014C Omacron
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0172 Uogonek
|
||||
!D9 U+0141 Lslash
|
||||
!DA U+015A Sacute
|
||||
!DB U+016A Umacron
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+017B Zdotaccent
|
||||
!DE U+017D Zcaron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0105 aogonek
|
||||
!E1 U+012F iogonek
|
||||
!E2 U+0101 amacron
|
||||
!E3 U+0107 cacute
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+0119 eogonek
|
||||
!E7 U+0113 emacron
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+017A zacute
|
||||
!EB U+0117 edotaccent
|
||||
!EC U+0123 gcommaaccent
|
||||
!ED U+0137 kcommaaccent
|
||||
!EE U+012B imacron
|
||||
!EF U+013C lcommaaccent
|
||||
!F0 U+0161 scaron
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0146 ncommaaccent
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+014D omacron
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0173 uogonek
|
||||
!F9 U+0142 lslash
|
||||
!FA U+015B sacute
|
||||
!FB U+016B umacron
|
||||
!FC U+00FC udieresis
|
||||
!FD U+017C zdotaccent
|
||||
!FE U+017E zcaron
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,247 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0300 gravecomb
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+0309 hookabovecomb
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+01A0 Ohorn
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+01AF Uhorn
|
||||
!DE U+0303 tildecomb
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0301 acutecomb
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+0323 dotbelowcomb
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+01A1 ohorn
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+01B0 uhorn
|
||||
!FE U+20AB dong
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,225 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!85 U+2026 ellipsis
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['helvetica']={
|
||||
'\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278,
|
||||
'\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':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,'\x7f':350,'\x80':556,'\x81':350,'\x82':222,'\x83':556,
|
||||
'\x84':333,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':222,'\x92':222,'\x93':333,'\x94':333,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':500,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':260,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333,
|
||||
'\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':556,'\xb6':537,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667,
|
||||
'\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':500,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':556,'\xf1':556,
|
||||
'\xf2':556,'\xf3':556,'\xf4':556,'\xf5':556,'\xf6':556,'\xf7':584,'\xf8':611,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500}
|
||||
@@ -0,0 +1,14 @@
|
||||
fpdf_charwidths['helveticaB']={
|
||||
'\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278,
|
||||
'\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':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,'\x7f':350,'\x80':556,'\x81':350,'\x82':278,'\x83':556,
|
||||
'\x84':500,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':278,'\x92':278,'\x93':500,'\x94':500,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':556,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':280,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333,
|
||||
'\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':611,'\xb6':556,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722,
|
||||
'\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':556,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':611,'\xf1':611,
|
||||
'\xf2':611,'\xf3':611,'\xf4':611,'\xf5':611,'\xf6':611,'\xf7':584,'\xf8':611,'\xf9':611,'\xfa':611,'\xfb':611,'\xfc':611,'\xfd':556,'\xfe':611,'\xff':556
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['helveticaBI']={
|
||||
'\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278,
|
||||
'\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':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,'\x7f':350,'\x80':556,'\x81':350,'\x82':278,'\x83':556,
|
||||
'\x84':500,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':278,'\x92':278,'\x93':500,'\x94':500,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':556,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':280,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333,
|
||||
'\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':611,'\xb6':556,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722,
|
||||
'\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':556,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':611,'\xf1':611,
|
||||
'\xf2':611,'\xf3':611,'\xf4':611,'\xf5':611,'\xf6':611,'\xf7':584,'\xf8':611,'\xf9':611,'\xfa':611,'\xfb':611,'\xfc':611,'\xfd':556,'\xfe':611,'\xff':556}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['helveticaI']={
|
||||
'\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278,
|
||||
'\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':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,'\x7f':350,'\x80':556,'\x81':350,'\x82':222,'\x83':556,
|
||||
'\x84':333,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':222,'\x92':222,'\x93':333,'\x94':333,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':500,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':260,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333,
|
||||
'\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':556,'\xb6':537,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667,
|
||||
'\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':500,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':556,'\xf1':556,
|
||||
'\xf2':556,'\xf3':556,'\xf4':556,'\xf5':556,'\xf6':556,'\xf7':584,'\xf8':611,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500}
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,248 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0105 aogonek
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+201E quotedblbase
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0218 Scommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017A zacute
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+010C Ccaron
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+201D quotedblright
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+010D ccaron
|
||||
!BA U+0219 scommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0106 Cacute
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+015A Sacute
|
||||
!D8 U+0170 Uhungarumlaut
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0118 Eogonek
|
||||
!DE U+021A Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+0107 cacute
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+015B sacute
|
||||
!F8 U+0171 uhungarumlaut
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0119 eogonek
|
||||
!FE U+021B tcommaaccent
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+013D Lcaron
|
||||
!A6 U+015A Sacute
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+015E Scedilla
|
||||
!AB U+0164 Tcaron
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+013E lcaron
|
||||
!B6 U+015B sacute
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+015F scedilla
|
||||
!BB U+0165 tcaron
|
||||
!BC U+017A zacute
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+017E zcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0138 kgreenlandic
|
||||
!A3 U+0156 Rcommaaccent
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0128 Itilde
|
||||
!A6 U+013B Lcommaaccent
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+0112 Emacron
|
||||
!AB U+0122 Gcommaaccent
|
||||
!AC U+0166 Tbar
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0157 rcommaaccent
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+0129 itilde
|
||||
!B6 U+013C lcommaaccent
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+0113 emacron
|
||||
!BB U+0123 gcommaaccent
|
||||
!BC U+0167 tbar
|
||||
!BD U+014A Eng
|
||||
!BE U+017E zcaron
|
||||
!BF U+014B eng
|
||||
!C0 U+0100 Amacron
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+012E Iogonek
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0116 Edotaccent
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+012A Imacron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0145 Ncommaaccent
|
||||
!D2 U+014C Omacron
|
||||
!D3 U+0136 Kcommaaccent
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+0172 Uogonek
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0168 Utilde
|
||||
!DE U+016A Umacron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0101 amacron
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+012F iogonek
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0117 edotaccent
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+012B imacron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0146 ncommaaccent
|
||||
!F2 U+014D omacron
|
||||
!F3 U+0137 kcommaaccent
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+0173 uogonek
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0169 utilde
|
||||
!FE U+016B umacron
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0401 afii10023
|
||||
!A2 U+0402 afii10051
|
||||
!A3 U+0403 afii10052
|
||||
!A4 U+0404 afii10053
|
||||
!A5 U+0405 afii10054
|
||||
!A6 U+0406 afii10055
|
||||
!A7 U+0407 afii10056
|
||||
!A8 U+0408 afii10057
|
||||
!A9 U+0409 afii10058
|
||||
!AA U+040A afii10059
|
||||
!AB U+040B afii10060
|
||||
!AC U+040C afii10061
|
||||
!AD U+00AD hyphen
|
||||
!AE U+040E afii10062
|
||||
!AF U+040F afii10145
|
||||
!B0 U+0410 afii10017
|
||||
!B1 U+0411 afii10018
|
||||
!B2 U+0412 afii10019
|
||||
!B3 U+0413 afii10020
|
||||
!B4 U+0414 afii10021
|
||||
!B5 U+0415 afii10022
|
||||
!B6 U+0416 afii10024
|
||||
!B7 U+0417 afii10025
|
||||
!B8 U+0418 afii10026
|
||||
!B9 U+0419 afii10027
|
||||
!BA U+041A afii10028
|
||||
!BB U+041B afii10029
|
||||
!BC U+041C afii10030
|
||||
!BD U+041D afii10031
|
||||
!BE U+041E afii10032
|
||||
!BF U+041F afii10033
|
||||
!C0 U+0420 afii10034
|
||||
!C1 U+0421 afii10035
|
||||
!C2 U+0422 afii10036
|
||||
!C3 U+0423 afii10037
|
||||
!C4 U+0424 afii10038
|
||||
!C5 U+0425 afii10039
|
||||
!C6 U+0426 afii10040
|
||||
!C7 U+0427 afii10041
|
||||
!C8 U+0428 afii10042
|
||||
!C9 U+0429 afii10043
|
||||
!CA U+042A afii10044
|
||||
!CB U+042B afii10045
|
||||
!CC U+042C afii10046
|
||||
!CD U+042D afii10047
|
||||
!CE U+042E afii10048
|
||||
!CF U+042F afii10049
|
||||
!D0 U+0430 afii10065
|
||||
!D1 U+0431 afii10066
|
||||
!D2 U+0432 afii10067
|
||||
!D3 U+0433 afii10068
|
||||
!D4 U+0434 afii10069
|
||||
!D5 U+0435 afii10070
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0437 afii10073
|
||||
!D8 U+0438 afii10074
|
||||
!D9 U+0439 afii10075
|
||||
!DA U+043A afii10076
|
||||
!DB U+043B afii10077
|
||||
!DC U+043C afii10078
|
||||
!DD U+043D afii10079
|
||||
!DE U+043E afii10080
|
||||
!DF U+043F afii10081
|
||||
!E0 U+0440 afii10082
|
||||
!E1 U+0441 afii10083
|
||||
!E2 U+0442 afii10084
|
||||
!E3 U+0443 afii10085
|
||||
!E4 U+0444 afii10086
|
||||
!E5 U+0445 afii10087
|
||||
!E6 U+0446 afii10088
|
||||
!E7 U+0447 afii10089
|
||||
!E8 U+0448 afii10090
|
||||
!E9 U+0449 afii10091
|
||||
!EA U+044A afii10092
|
||||
!EB U+044B afii10093
|
||||
!EC U+044C afii10094
|
||||
!ED U+044D afii10095
|
||||
!EE U+044E afii10096
|
||||
!EF U+044F afii10097
|
||||
!F0 U+2116 afii61352
|
||||
!F1 U+0451 afii10071
|
||||
!F2 U+0452 afii10099
|
||||
!F3 U+0453 afii10100
|
||||
!F4 U+0454 afii10101
|
||||
!F5 U+0455 afii10102
|
||||
!F6 U+0456 afii10103
|
||||
!F7 U+0457 afii10104
|
||||
!F8 U+0458 afii10105
|
||||
!F9 U+0459 afii10106
|
||||
!FA U+045A afii10107
|
||||
!FB U+045B afii10108
|
||||
!FC U+045C afii10109
|
||||
!FD U+00A7 section
|
||||
!FE U+045E afii10110
|
||||
!FF U+045F afii10193
|
||||
@@ -0,0 +1,250 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+2018 quoteleft
|
||||
!A2 U+2019 quoteright
|
||||
!A3 U+00A3 sterling
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+0385 dieresistonos
|
||||
!B6 U+0386 Alphatonos
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2219 periodcentered
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+2553 SF520000
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+2555 SF220000
|
||||
!A7 U+2556 SF210000
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+255C SF270000
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+2562 SF200000
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+2564 SF470000
|
||||
!B7 U+2565 SF480000
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+256B SF530000
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2022 bullet
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+0454 afii10101
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+0456 afii10103
|
||||
!A7 U+0457 afii10104
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+0491 afii10098
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+0404 afii10053
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+0406 afii10055
|
||||
!B7 U+0407 afii10056
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+0490 afii10050
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['symbol']={
|
||||
'\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250,
|
||||
'\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':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,'\x7f':0,'\x80':0,'\x81':0,'\x82':0,'\x83':0,
|
||||
'\x84':0,'\x85':0,'\x86':0,'\x87':0,'\x88':0,'\x89':0,'\x8a':0,'\x8b':0,'\x8c':0,'\x8d':0,'\x8e':0,'\x8f':0,'\x90':0,'\x91':0,'\x92':0,'\x93':0,'\x94':0,'\x95':0,'\x96':0,'\x97':0,'\x98':0,'\x99':0,
|
||||
'\x9a':0,'\x9b':0,'\x9c':0,'\x9d':0,'\x9e':0,'\x9f':0,'\xa0':750,'\xa1':620,'\xa2':247,'\xa3':549,'\xa4':167,'\xa5':713,'\xa6':500,'\xa7':753,'\xa8':753,'\xa9':753,'\xaa':753,'\xab':1042,'\xac':987,'\xad':603,'\xae':987,'\xaf':603,
|
||||
'\xb0':400,'\xb1':549,'\xb2':411,'\xb3':549,'\xb4':549,'\xb5':713,'\xb6':494,'\xb7':460,'\xb8':549,'\xb9':549,'\xba':549,'\xbb':549,'\xbc':1000,'\xbd':603,'\xbe':1000,'\xbf':658,'\xc0':823,'\xc1':686,'\xc2':795,'\xc3':987,'\xc4':768,'\xc5':768,
|
||||
'\xc6':823,'\xc7':768,'\xc8':768,'\xc9':713,'\xca':713,'\xcb':713,'\xcc':713,'\xcd':713,'\xce':713,'\xcf':713,'\xd0':768,'\xd1':713,'\xd2':790,'\xd3':790,'\xd4':890,'\xd5':823,'\xd6':549,'\xd7':250,'\xd8':713,'\xd9':603,'\xda':603,'\xdb':1042,
|
||||
'\xdc':987,'\xdd':603,'\xde':987,'\xdf':603,'\xe0':494,'\xe1':329,'\xe2':790,'\xe3':790,'\xe4':786,'\xe5':713,'\xe6':384,'\xe7':384,'\xe8':384,'\xe9':384,'\xea':384,'\xeb':384,'\xec':494,'\xed':494,'\xee':494,'\xef':494,'\xf0':0,'\xf1':329,
|
||||
'\xf2':274,'\xf3':686,'\xf4':686,'\xf5':686,'\xf6':384,'\xf7':384,'\xf8':384,'\xf9':384,'\xfa':384,'\xfb':384,'\xfc':494,'\xfd':494,'\xfe':494,'\xff':0}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['times']={
|
||||
'\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250,
|
||||
'\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':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,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500,
|
||||
'\x84':444,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':889,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':444,'\x94':444,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':980,
|
||||
'\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':444,'\x9f':722,'\xa0':250,'\xa1':333,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':200,'\xa7':500,'\xa8':333,'\xa9':760,'\xaa':276,'\xab':500,'\xac':564,'\xad':333,'\xae':760,'\xaf':333,
|
||||
'\xb0':400,'\xb1':564,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':500,'\xb6':453,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':310,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':444,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722,
|
||||
'\xc6':889,'\xc7':667,'\xc8':611,'\xc9':611,'\xca':611,'\xcb':611,'\xcc':333,'\xcd':333,'\xce':333,'\xcf':333,'\xd0':722,'\xd1':722,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':564,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':722,'\xde':556,'\xdf':500,'\xe0':444,'\xe1':444,'\xe2':444,'\xe3':444,'\xe4':444,'\xe5':444,'\xe6':667,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':500,
|
||||
'\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':564,'\xf8':500,'\xf9':500,'\xfa':500,'\xfb':500,'\xfc':500,'\xfd':500,'\xfe':500,'\xff':500}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['timesB']={
|
||||
'\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250,
|
||||
'\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':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,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500,
|
||||
'\x84':500,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':667,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':500,'\x94':500,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':444,'\x9f':722,'\xa0':250,'\xa1':333,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':220,'\xa7':500,'\xa8':333,'\xa9':747,'\xaa':300,'\xab':500,'\xac':570,'\xad':333,'\xae':747,'\xaf':333,
|
||||
'\xb0':400,'\xb1':570,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':556,'\xb6':540,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':330,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722,
|
||||
'\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':389,'\xcd':389,'\xce':389,'\xcf':389,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':570,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':722,'\xde':611,'\xdf':556,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':722,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':556,
|
||||
'\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':570,'\xf8':500,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['timesBI']={
|
||||
'\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250,
|
||||
'\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':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,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500,
|
||||
'\x84':500,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':944,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':500,'\x94':500,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':1000,
|
||||
'\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':389,'\x9f':611,'\xa0':250,'\xa1':389,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':220,'\xa7':500,'\xa8':333,'\xa9':747,'\xaa':266,'\xab':500,'\xac':606,'\xad':333,'\xae':747,'\xaf':333,
|
||||
'\xb0':400,'\xb1':570,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':576,'\xb6':500,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':300,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667,
|
||||
'\xc6':944,'\xc7':667,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':389,'\xcd':389,'\xce':389,'\xcf':389,'\xd0':722,'\xd1':722,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':570,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':611,'\xde':611,'\xdf':500,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':722,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':556,
|
||||
'\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':570,'\xf8':500,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':444,'\xfe':500,'\xff':444}
|
||||
@@ -0,0 +1,13 @@
|
||||
fpdf_charwidths['timesI']={
|
||||
'\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250,
|
||||
'\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':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,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500,
|
||||
'\x84':556,'\x85':889,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':500,'\x8b':333,'\x8c':944,'\x8d':350,'\x8e':556,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':556,'\x94':556,'\x95':350,'\x96':500,'\x97':889,'\x98':333,'\x99':980,
|
||||
'\x9a':389,'\x9b':333,'\x9c':667,'\x9d':350,'\x9e':389,'\x9f':556,'\xa0':250,'\xa1':389,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':275,'\xa7':500,'\xa8':333,'\xa9':760,'\xaa':276,'\xab':500,'\xac':675,'\xad':333,'\xae':760,'\xaf':333,
|
||||
'\xb0':400,'\xb1':675,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':500,'\xb6':523,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':310,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':611,'\xc1':611,'\xc2':611,'\xc3':611,'\xc4':611,'\xc5':611,
|
||||
'\xc6':889,'\xc7':667,'\xc8':611,'\xc9':611,'\xca':611,'\xcb':611,'\xcc':333,'\xcd':333,'\xce':333,'\xcf':333,'\xd0':722,'\xd1':667,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':675,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722,
|
||||
'\xdc':722,'\xdd':556,'\xde':611,'\xdf':500,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':667,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':500,
|
||||
'\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':675,'\xf8':500,'\xf9':500,'\xfa':500,'\xfb':500,'\xfc':500,'\xfd':444,'\xfe':500,'\xff':444}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['zapfdingbats']=array(
|
||||
'\x00'=>0,'\x01'=>0,'\x02'=>0,'\x03'=>0,'\x04'=>0,'\x05'=>0,'\x06'=>0,'\x07'=>0,'\x08'=>0,'\t'=>0,'\n'=>0,'\x0b'=>0,'\x0c'=>0,'\r'=>0,'\x0e'=>0,'\x0f'=>0,'\x10'=>0,'\x11'=>0,'\x12'=>0,'\x13'=>0,'\x14'=>0,'\x15'=>0,
|
||||
'\x16'=>0,'\x17'=>0,'\x18'=>0,'\x19'=>0,'\x1a'=>0,'\x1b'=>0,'\x1c'=>0,'\x1d'=>0,'\x1e'=>0,'\x1f'=>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,'\x7f'=>0,'\x80'=>390,'\x81'=>390,'\x82'=>317,'\x83'=>317,
|
||||
'\x84'=>276,'\x85'=>276,'\x86'=>509,'\x87'=>509,'\x88'=>410,'\x89'=>410,'\x8a'=>234,'\x8b'=>234,'\x8c'=>334,'\x8d'=>334,'\x8e'=>0,'\x8f'=>0,'\x90'=>0,'\x91'=>0,'\x92'=>0,'\x93'=>0,'\x94'=>0,'\x95'=>0,'\x96'=>0,'\x97'=>0,'\x98'=>0,'\x99'=>0,
|
||||
'\x9a'=>0,'\x9b'=>0,'\x9c'=>0,'\x9d'=>0,'\x9e'=>0,'\x9f'=>0,'\xa0'=>0,'\xa1'=>732,'\xa2'=>544,'\xa3'=>544,'\xa4'=>910,'\xa5'=>667,'\xa6'=>760,'\xa7'=>760,'\xa8'=>776,'\xa9'=>595,'\xaa'=>694,'\xab'=>626,'\xac'=>788,'\xad'=>788,'\xae'=>788,'\xaf'=>788,
|
||||
'\xb0'=>788,'\xb1'=>788,'\xb2'=>788,'\xb3'=>788,'\xb4'=>788,'\xb5'=>788,'\xb6'=>788,'\xb7'=>788,'\xb8'=>788,'\xb9'=>788,'\xba'=>788,'\xbb'=>788,'\xbc'=>788,'\xbd'=>788,'\xbe'=>788,'\xbf'=>788,'\xc0'=>788,'\xc1'=>788,'\xc2'=>788,'\xc3'=>788,'\xc4'=>788,'\xc5'=>788,
|
||||
'\xc6'=>788,'\xc7'=>788,'\xc8'=>788,'\xc9'=>788,'\xca'=>788,'\xcb'=>788,'\xcc'=>788,'\xcd'=>788,'\xce'=>788,'\xcf'=>788,'\xd0'=>788,'\xd1'=>788,'\xd2'=>788,'\xd3'=>788,'\xd4'=>894,'\xd5'=>838,'\xd6'=>1016,'\xd7'=>458,'\xd8'=>748,'\xd9'=>924,'\xda'=>748,'\xdb'=>918,
|
||||
'\xdc'=>927,'\xdd'=>928,'\xde'=>928,'\xdf'=>834,'\xe0'=>873,'\xe1'=>828,'\xe2'=>924,'\xe3'=>924,'\xe4'=>917,'\xe5'=>930,'\xe6'=>931,'\xe7'=>463,'\xe8'=>883,'\xe9'=>836,'\xea'=>836,'\xeb'=>867,'\xec'=>867,'\xed'=>696,'\xee'=>696,'\xef'=>874,'\xf0'=>0,'\xf1'=>874,
|
||||
'\xf2'=>760,'\xf3'=>946,'\xf4'=>771,'\xf5'=>865,'\xf6'=>771,'\xf7'=>888,'\xf8'=>967,'\xf9'=>888,'\xfa'=>831,'\xfb'=>873,'\xfc'=>927,'\xfd'=>970,'\xfe'=>918,'\xff'=>0);
|
||||
?>
|
||||
@@ -0,0 +1,340 @@
|
||||
# ******************************************************************************
|
||||
# * Utility to generate font definition files *
|
||||
# * Version: 1.13 *
|
||||
# * Date: 2004-12-31 *
|
||||
# *******************************************************************************/
|
||||
from PHPutils import *
|
||||
import os, re, struct, zlib
|
||||
|
||||
FPDF_FONT_DIR=os.path.join(os.path.dirname(__file__),'font')
|
||||
|
||||
def ReadMap(enc):
|
||||
#Read a map file
|
||||
filename=os.path.join(FPDF_FONT_DIR,strtolower(enc)+'.map')
|
||||
cc2gn={}
|
||||
for l in file(filename):
|
||||
if(l[0]=='!'):
|
||||
e=re.split('[ \\t]+',l.rstrip())
|
||||
cc=hexdec(substr(e[0],1))
|
||||
gn=e[2]
|
||||
cc2gn[cc]=gn
|
||||
for i in xrange(0,256):
|
||||
if not i in cc2gn:
|
||||
cc2gn[i]='.notdef'
|
||||
return cc2gn
|
||||
|
||||
def ReadAFM(filename,map):
|
||||
#Read a font metric file
|
||||
widths={}
|
||||
fm={}
|
||||
fix={'Edot':'Edotaccent','edot':'edotaccent','Idot':'Idotaccent','Zdot':'Zdotaccent','zdot':'zdotaccent',
|
||||
'Odblacute':'Ohungarumlaut','odblacute':'ohungarumlaut','Udblacute':'Uhungarumlaut','udblacute':'uhungarumlaut',
|
||||
'Gcedilla':'Gcommaaccent','gcedilla':'gcommaaccent','Kcedilla':'Kcommaaccent','kcedilla':'kcommaaccent',
|
||||
'Lcedilla':'Lcommaaccent','lcedilla':'lcommaaccent','Ncedilla':'Ncommaaccent','ncedilla':'ncommaaccent',
|
||||
'Rcedilla':'Rcommaaccent','rcedilla':'rcommaaccent','Scedilla':'Scommaaccent','scedilla':'scommaaccent',
|
||||
'Tcedilla':'Tcommaaccent','tcedilla':'tcommaaccent','Dslash':'Dcroat','dslash':'dcroat','Dmacron':'Dcroat','dmacron':'dcroat',
|
||||
'combininggraveaccent':'gravecomb','combininghookabove':'hookabovecomb','combiningtildeaccent':'tildecomb',
|
||||
'combiningacuteaccent':'acutecomb','combiningdotbelow':'dotbelowcomb','dongsign':'dong'}
|
||||
for l in file(filename):
|
||||
e=l.rstrip().split()
|
||||
if(count(e)<2):
|
||||
continue
|
||||
code=e[0]
|
||||
param=e[1]
|
||||
if(code=='C'):
|
||||
#Character metrics
|
||||
cc=int(e[1])
|
||||
w=e[4]
|
||||
gn=e[7]
|
||||
if(substr(gn,-4)=='20AC'):
|
||||
gn='Euro'
|
||||
if gn in fix:
|
||||
#Fix incorrect glyph name
|
||||
for c,n in map.iteritems():
|
||||
if(n==fix[gn]):
|
||||
map[c]=gn
|
||||
if(empty(map)):
|
||||
#Symbolic font: use built-in encoding
|
||||
widths[cc]=w
|
||||
else:
|
||||
widths[gn]=w
|
||||
if(gn=='X'):
|
||||
fm['CapXHeight']=e[13]
|
||||
if(gn=='.notdef'):
|
||||
fm['MissingWidth']=w
|
||||
elif(code=='FontName'):
|
||||
fm['FontName']=param
|
||||
elif(code=='Weight'):
|
||||
fm['Weight']=param
|
||||
elif(code=='ItalicAngle'):
|
||||
fm['ItalicAngle']=float(param)
|
||||
elif(code=='Ascender'):
|
||||
fm['Ascender']=int(param)
|
||||
elif(code=='Descender'):
|
||||
fm['Descender']=int(param)
|
||||
elif(code=='UnderlineThickness'):
|
||||
fm['UnderlineThickness']=int(param)
|
||||
elif(code=='UnderlinePosition'):
|
||||
fm['UnderlinePosition']=int(param)
|
||||
elif(code=='IsFixedPitch'):
|
||||
fm['IsFixedPitch']=(param=='true')
|
||||
elif(code=='FontBBox'):
|
||||
fm['FontBBox']=(e[1],e[2],e[3],e[4])
|
||||
elif(code=='CapHeight'):
|
||||
fm['CapHeight']=int(param)
|
||||
elif(code=='StdVW'):
|
||||
fm['StdVW']=int(param)
|
||||
if not 'FontName' in fm:
|
||||
die('FontName not found')
|
||||
if(not empty(map)):
|
||||
if(not '.notdef' in widths):
|
||||
widths['.notdef']=600
|
||||
if not 'Delta' in widths and 'increment' in widths:
|
||||
widths['Delta']=widths['increment']
|
||||
#Order widths according to map
|
||||
for i in xrange(0,256):
|
||||
if(not map[i] in widths):
|
||||
print 'Warning: character '+map[i]+' is missing'
|
||||
widths[i]=widths['.notdef']
|
||||
else:
|
||||
widths[i]=widths[map[i]]
|
||||
fm['Widths']=widths
|
||||
return fm
|
||||
|
||||
def MakeFontDescriptor(fm,symbolic):
|
||||
#Ascent
|
||||
asc=1000
|
||||
if 'Ascender' in fm:
|
||||
asc=fm['Ascender']
|
||||
fd="{'Ascent':"+str(asc)
|
||||
#Descent
|
||||
desc=-200
|
||||
if 'Descender' in fm:
|
||||
desc=fm['Descender']
|
||||
fd+=",'Descent':"+str(desc)
|
||||
#CapHeight
|
||||
if 'CapHeight' in fm:
|
||||
ch=fm['CapHeight']
|
||||
elif 'CapXHeight'in fm:
|
||||
ch=fm['CapXHeight']
|
||||
else:
|
||||
ch=asc
|
||||
fd+=",'CapHeight':"+str(ch)
|
||||
#Flags
|
||||
flags=0
|
||||
if 'IsFixedPitch' in fm and fm['IsFixedPitch']:
|
||||
flags+=1<<0
|
||||
if(symbolic):
|
||||
flags+=1<<2
|
||||
if(not symbolic):
|
||||
flags+=1<<5
|
||||
if 'ItalicAngle' in fm and fm['ItalicAngle']!=0:
|
||||
flags+=1<<6
|
||||
fd+=",'Flags':"+str(flags)
|
||||
#FontBBox
|
||||
if('FontBBox' in fm):
|
||||
fbb=fm['FontBBox']
|
||||
else:
|
||||
fbb=(0,des-100,1000,asc+100)
|
||||
fd+=",'FontBBox':'["+str(fbb[0])+' '+str(fbb[1])+' '+str(fbb[2])+' '+str(fbb[3])+"]'"
|
||||
#ItalicAngle
|
||||
ia=0
|
||||
if 'ItalicAngle' in fm and fm['ItalicAngle']:
|
||||
ia=1
|
||||
fd+=",'ItalicAngle':"+str(ia)
|
||||
#StemV
|
||||
if 'StdVW' in fm:
|
||||
stemv=fm['StdVW']
|
||||
elif('Weight' in fm and re.match('(bold|black)',fm['Weight'])):
|
||||
stemv=120
|
||||
else:
|
||||
stemv=70
|
||||
fd+=",'StemV':"+str(stemv)
|
||||
#MissingWidth
|
||||
if('MissingWidth' in fm):
|
||||
fd+=",'MissingWidth':"+fm['MissingWidth']
|
||||
fd+='}'
|
||||
return fd
|
||||
|
||||
def MakeWidthArray(fm):
|
||||
#Make character width array
|
||||
s="{\n\t"
|
||||
cw=fm['Widths']
|
||||
for i in xrange(0,256):
|
||||
if(chr(i)=="'"):
|
||||
s+="'\\''"
|
||||
elif(chr(i)=="\\"):
|
||||
s+="'\\\\'"
|
||||
elif(i>=32 and i<=126):
|
||||
s+="'"+chr(i)+"'"
|
||||
else:
|
||||
s+="chr(%d)"%i
|
||||
s+=':'+fm['Widths'][i]
|
||||
if(i<255):
|
||||
s+=','
|
||||
if((i+1)%22==0):
|
||||
s+="\n\t"
|
||||
s+='}'
|
||||
return s
|
||||
|
||||
def MakeFontEncoding(map):
|
||||
#Build differences from reference encoding
|
||||
ref=ReadMap('cp1252')
|
||||
s=''
|
||||
last=0
|
||||
for i in xrange(32,256):
|
||||
if(map[i]!=ref[i]):
|
||||
if(i!=last+1):
|
||||
s+=str(i)+' '
|
||||
last=i
|
||||
s+='/'+map[i]+' '
|
||||
return s.rstrip()
|
||||
|
||||
def SaveToFile(filename,s,mode='t'):
|
||||
f=file(filename,'w'+mode)
|
||||
if(not f):
|
||||
die('Can\'t write to file '+filename)
|
||||
f.write(s)
|
||||
f.close()
|
||||
|
||||
def ReadShort(f):
|
||||
return struct.unpack('>H',f.read(2))[0]
|
||||
|
||||
def ReadLong(f):
|
||||
return struct.unpack('>L',f.read(4))[0]
|
||||
|
||||
def CheckTTF(filename):
|
||||
#Check if font license allows embedding
|
||||
f=file(filename,'rb')
|
||||
if(not f):
|
||||
die('Error: Can\'t open '+filename)
|
||||
#Extract number of tables
|
||||
f.seek(4,SEEK_CUR)
|
||||
nb=ReadShort(f)
|
||||
f.seek(6,SEEK_CUR)
|
||||
#Seek OS/2 table
|
||||
found=0
|
||||
for i in xrange(0,nb):
|
||||
if(f.read(4)=='OS/2'):
|
||||
found=1
|
||||
break
|
||||
f.seek(12,SEEK_CUR)
|
||||
if(not found):
|
||||
f.close()
|
||||
return
|
||||
f.seek(4,SEEK_CUR)
|
||||
offset=ReadLong(f)
|
||||
f.seek(offset,SEEK_SET)
|
||||
#Extract fsType flags
|
||||
f.seek(8,SEEK_CUR)
|
||||
fsType=ReadShort(f)
|
||||
rl=(fsType & 0x02)!=0
|
||||
pp=(fsType & 0x04)!=0
|
||||
e=(fsType & 0x08)!=0
|
||||
f.close()
|
||||
if(rl and not pp and not e):
|
||||
print 'Warning: font license does not allow embedding'
|
||||
|
||||
# ******************************************************************************
|
||||
# * fontfile : chemin du fichier TTF (ou chaine vide si pas d'incorporation) *
|
||||
# * afmfile : chemin du fichier AFM *
|
||||
# * enc : encodage (ou chaine vide si la police est symbolique) *
|
||||
# * patch : patch optionnel pour l'encodage *
|
||||
# * type : type de la police si $fontfile est vide *
|
||||
# *******************************************************************************/
|
||||
def MakeFont(fontfile,afmfile,enc='cp1252',patch={},type='TrueType'):
|
||||
#Generate a font definition file
|
||||
if(enc):
|
||||
map=ReadMap(enc)
|
||||
for cc,gn in patch.iteritems():
|
||||
map[cc]=gn
|
||||
else:
|
||||
map=[]
|
||||
if(not file_exists(afmfile)):
|
||||
die('Error: AFM file not found: '+afmfile)
|
||||
fm=ReadAFM(afmfile,map)
|
||||
if(enc):
|
||||
diff=MakeFontEncoding(map)
|
||||
else:
|
||||
diff=''
|
||||
fd=MakeFontDescriptor(fm,empty(map))
|
||||
#Find font type
|
||||
if(fontfile):
|
||||
ext=strtolower(substr(fontfile,-3))
|
||||
if(ext=='ttf'):
|
||||
type='TrueType'
|
||||
elif(ext=='pfb'):
|
||||
type='Type1'
|
||||
else:
|
||||
die('Error: unrecognized font file extension: '+ext)
|
||||
else:
|
||||
if(type!='TrueType' and type!='Type1'):
|
||||
die('Error: incorrect font type: '+type)
|
||||
#Start generation
|
||||
s=''+"\n"
|
||||
s+='type=\''+type+"'\n"
|
||||
s+='name=\''+fm['FontName']+"'\n"
|
||||
s+='desc='+fd+"\n"
|
||||
if not 'UnderlinePosition' in fm:
|
||||
fm['UnderlinePosition']=-100
|
||||
if not 'UnderlineThickness' in fm:
|
||||
fm['UnderlineThickness']=50
|
||||
s+='up='+str(fm['UnderlinePosition'])+"\n"
|
||||
s+='ut='+str(fm['UnderlineThickness'])+"\n"
|
||||
w=MakeWidthArray(fm)
|
||||
s+='cw='+str(w)+"\n"
|
||||
s+='enc=\''+enc+"'\n"
|
||||
s+='diff=\''+diff+"'\n"
|
||||
base=substr(basename(afmfile),0,-4)
|
||||
if(fontfile):
|
||||
#Embedded font
|
||||
if(not file_exists(fontfile)):
|
||||
die('Error: font file not found: '+fontfile)
|
||||
if(type=='TrueType'):
|
||||
CheckTTF(fontfile)
|
||||
f=file(fontfile,'rb')
|
||||
if(not f):
|
||||
die('Error: Can\'t open '+fontfile)
|
||||
filecnt=f.read()
|
||||
f.close()
|
||||
if(type=='Type1'):
|
||||
#Find first two sections and discard third one
|
||||
header=(ord(filecnt[0])==128)
|
||||
if(header):
|
||||
#Strip first binary header
|
||||
filecnt=substr(filecnt,6)
|
||||
pos=strpos(filecnt,'eexec')
|
||||
if(not pos):
|
||||
die('Error: font file does not seem to be valid Type1')
|
||||
size1=pos+6
|
||||
if(header and ord(filecnt[size1])==128):
|
||||
#Strip second binary header
|
||||
filecnt=substr(filecnt,0,size1)+substr(filecnt,size1+6)
|
||||
pos=strpos(filecnt,'00000000')
|
||||
if(not pos):
|
||||
die('Error: font file does not seem to be valid Type1')
|
||||
size2=pos-size1
|
||||
filecnt=substr(filecnt,0,size1+size2)
|
||||
if(1):
|
||||
cmp=base+'.z'
|
||||
SaveToFile(cmp,zlib.compress(filecnt),'b')
|
||||
s+='filename=\''+cmp+"'\n"
|
||||
print 'Font file compressed ('+cmp+')'
|
||||
else:
|
||||
s+='filename=\''+basename(fontfile)+"'\n"
|
||||
print 'Notice: font file could not be compressed (zlib extension not available)'
|
||||
if(type=='Type1'):
|
||||
s+='size1='+str(size1)+"\n"
|
||||
s+='size2='+str(size2)+"\n"
|
||||
else:
|
||||
s+='originalsize='+str(filesize(fontfile))+"\n"
|
||||
else:
|
||||
#Not embedded font
|
||||
s+='file='+"''\n"
|
||||
s+="\n"
|
||||
SaveToFile(base+'.py',s)
|
||||
print 'Font definition file generated ('+base+'.py'+')'
|
||||
|
||||
if __name__ == '__main__':
|
||||
MakeFont('font/calligra.ttf','font/calligra.afm')
|
||||
MakeFont('font/a010013l.pfb','font/a010013l.afm')
|
||||
@@ -0,0 +1,15 @@
|
||||
# Updates the unique, final XREF table
|
||||
# Usage: Fix1 in.pdf [out.pdf]
|
||||
import sys
|
||||
from PDFRUUtils import *
|
||||
|
||||
def Fix1(inPDF, outPDF):
|
||||
buf=UpdateStreamLengths(file(inPDF,'rb').read())
|
||||
newbuf=ReplaceXRefsTable(buf, BuildXRefsTable(FindXRefs(buf)))
|
||||
file(outPDF,'wb').write(newbuf)
|
||||
|
||||
if __name__=='__main__':
|
||||
inPDF=outPDF=sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
outPDF=sys.argv[2]
|
||||
Fix1(inPDF, outPDF)
|
||||
@@ -0,0 +1,12 @@
|
||||
# Decompress streams, to edit file
|
||||
# Usage: Fix2 in.pdf [out.pdf]
|
||||
import sys
|
||||
from PDFRUUtils import *
|
||||
|
||||
inPDF=outPDF=sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
outPDF=sys.argv[2]
|
||||
|
||||
buf=DecompressStreams(file(inPDF,'rb').read())
|
||||
newbuf=ReplaceXRefsTable(buf, BuildXRefsTable(FindXRefs(buf)))
|
||||
file(outPDF,'wb').write(newbuf)
|
||||
@@ -0,0 +1,12 @@
|
||||
# Compress streams
|
||||
# Usage: Fix3 in.pdf [out.pdf]
|
||||
import sys
|
||||
from PDFRUUtils import *
|
||||
|
||||
inPDF=outPDF=sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
outPDF=sys.argv[2]
|
||||
|
||||
buf=CompressStreams(file(inPDF,'rb').read())
|
||||
newbuf=ReplaceXRefsTable(buf, BuildXRefsTable(FindXRefs(buf)))
|
||||
file(outPDF,'wb').write(newbuf)
|
||||
@@ -0,0 +1,94 @@
|
||||
# Utilities to Re-Use PDF files generated by FPDF for Python
|
||||
# (Probably, more memory-wasting than it should)
|
||||
import re, zlib
|
||||
|
||||
def UpdateStreamLengths(pdf):
|
||||
"Updates the streams /Length in a modified, uncompressed PDF file"
|
||||
L, Lengths=[],{}
|
||||
for m in re.finditer('<</Length (\d+)(>>)\nstream\n(.+?)\nendstream',pdf,re.S):
|
||||
oldlen, newlen = m.group(1), len(m.group(3))
|
||||
if newlen!=oldlen:
|
||||
L+=[m.start(1)]
|
||||
# length_start=old_len, next_content
|
||||
Lengths[str(m.start(1))]=(str(newlen), m.start(2))
|
||||
if not L:
|
||||
return pdf
|
||||
newpdf=''
|
||||
i=0
|
||||
for j in L:
|
||||
newpdf+=pdf[i:j]
|
||||
i=Lengths[str(j)][1]
|
||||
newpdf+=Lengths[str(j)][0]
|
||||
newpdf+=pdf[i:]
|
||||
return newpdf
|
||||
|
||||
def FindXRefs(pdf):
|
||||
"Returns a dictionary of {PDF object:position} found"
|
||||
XRefs={}
|
||||
for m in re.finditer('^(\d+) 0 obj',pdf,re.M):
|
||||
XRefs[int(m.group(1))] = m.start()
|
||||
return XRefs
|
||||
|
||||
def BuildXRefsTable(XRefs):
|
||||
"Constructs the PDF xref table from a dictionary returned by FindXRefs"
|
||||
s='xref\n'
|
||||
s+='0 '+str(len(XRefs)+1)+'\n'
|
||||
s+='0000000000 65535 f \n'
|
||||
for i in xrange(1,len(XRefs)+1):
|
||||
s+='%010d 00000 n \n'%XRefs[i]
|
||||
return s
|
||||
|
||||
def ReplaceXRefsTable(pdf, newtable):
|
||||
"Replaces the unique XRef table in a PDF file with the updated one"
|
||||
startxref=pdf.find('xref')
|
||||
newbuf=pdf[:startxref] + newtable + re.sub('\d+(?=\n%%EOF)',str(startxref), pdf[pdf.find('trailer'):])
|
||||
return newbuf
|
||||
|
||||
def DecompressStreams(pdf):
|
||||
"Decompresses all deflated streams and returns the updated PDF file"
|
||||
L, streams=[], {}
|
||||
for m in re.finditer('^<</Filter /FlateDecode /Length (\d+)>>\n(stream)',pdf,re.M):
|
||||
start=m.start(2)+7
|
||||
# stream_start: filter_start, stream_end
|
||||
streams[start]=(m.start(), start+int(m.group(1)))
|
||||
L+=[start]
|
||||
delta=0
|
||||
for i in L:
|
||||
start=i+delta
|
||||
end=streams[i][1]+delta
|
||||
stream=zlib.decompress(pdf[start:end])
|
||||
before=len(pdf)
|
||||
pdf=pdf.replace(pdf[streams[i][0]+delta:end], '<</Length %d>>\nstream\n'%len(stream)+stream)
|
||||
delta+=len(pdf)-before
|
||||
return pdf
|
||||
|
||||
def CompressStreams(pdf):
|
||||
"Compresses all plain streams and returns the updated PDF file"
|
||||
L, streams=[], {}
|
||||
for m in re.finditer('^<</Length (\d+)>>\n(stream)',pdf,re.M):
|
||||
start=m.start(2)+7
|
||||
# stream_start: filter_start, stream_end
|
||||
streams[start]=(m.start(), start+int(m.group(1)))
|
||||
L+=[start]
|
||||
delta=0
|
||||
for i in L:
|
||||
start=i+delta
|
||||
end=streams[i][1]+delta
|
||||
stream=zlib.compress(pdf[start:end])
|
||||
before=len(pdf)
|
||||
pdf=pdf.replace(pdf[streams[i][0]+delta:end], '<</Filter /FlateDecode /Length %d>>\nstream\n'%len(stream)+stream)
|
||||
delta+=len(pdf)-before
|
||||
return pdf
|
||||
|
||||
if __name__=='__main__':
|
||||
buf=file('b.pdf','rb').read()
|
||||
newbuf=DecompressStreams(buf)
|
||||
newbuf=ReplaceXRefsTable(newbuf, BuildXRefsTable(FindXRefs(newbuf)))
|
||||
|
||||
newbuf=UpdateStreamLengths(newbuf) # does nothing here: test purpose only!
|
||||
file('b0.pdf','wb').write(newbuf)
|
||||
|
||||
newbuf=CompressStreams(newbuf)
|
||||
newbuf=ReplaceXRefsTable(newbuf, BuildXRefsTable(FindXRefs(newbuf)))
|
||||
|
||||
file('b1.pdf','wb').write(newbuf) #should be identical
|
||||
@@ -0,0 +1,85 @@
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
import sys,os
|
||||
from pyfpdf import FPDF
|
||||
|
||||
class Form:
|
||||
def __init__(self, infile):
|
||||
keys = ('name','type','x1','y1','x2','y2','font','size',
|
||||
'bold','italic','underline','foreground','background',
|
||||
'align','text','priority')
|
||||
# parse form format file and create fields dict
|
||||
self.fields = {}
|
||||
for linea in open(infile).readlines():
|
||||
kargs = {}
|
||||
for i,v in enumerate(linea.split(";")):
|
||||
if not v.startswith("'"):
|
||||
v = v.replace(",",".")
|
||||
else:
|
||||
v = v#.decode('latin1')
|
||||
if v=='':
|
||||
v = None
|
||||
else:
|
||||
v = eval(v.strip())
|
||||
kargs[keys[i]] = v
|
||||
self.fields[kargs['name'].lower()] = kargs
|
||||
self.handlers = {'T': self.text, 'L': self.line, 'I': self.image,
|
||||
'B': self.rect, 'BC': self.barcode}
|
||||
|
||||
def set(self, name, value):
|
||||
if name.lower() in self.fields:
|
||||
self.fields[name.lower()]['text'] = value
|
||||
|
||||
def render(self, outfile):
|
||||
pdf = FPDF()
|
||||
pdf.add_page();
|
||||
pdf.set_font('Arial','B',16);
|
||||
|
||||
for field in self.fields.values():
|
||||
self.handlers[field['type'].upper()](pdf, **field)
|
||||
|
||||
pdf.output(outfile,"F")
|
||||
|
||||
def text(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', font="arial", size=10,
|
||||
bold=False, italic=False, underline=False, align="", *args, **kwargs):
|
||||
if text:
|
||||
font = font.strip().lower()
|
||||
if font == 'arial black':
|
||||
font = 'arial'
|
||||
style = ""
|
||||
if bold: style += "B"
|
||||
if italic: style += "I"
|
||||
if underline: style += "U"
|
||||
align = {'I':'L','D':'R','C':'C','':'',None:None}[align]
|
||||
pdf.set_font(font,style,size)
|
||||
##m_k = 72 / 2.54
|
||||
##h = (size/m_k)
|
||||
pdf.set_xy(x1,y1)
|
||||
pdf.cell(w=x2-x1,h=y2-y1,txt=text,border=0,ln=0,align=align)
|
||||
#pdf.Text(x=x1,y=y1,txt=text)
|
||||
|
||||
def line(self, pdf, x1=0, y1=0, x2=0, y2=0, size=0, *args, **kwargs):
|
||||
pdf.set_line_width(size)
|
||||
pdf.line(x1, y1, x2, y2)
|
||||
|
||||
def rect(self, pdf, x1=0, y1=0, x2=0, y2=0, size=0, *args, **kwargs):
|
||||
pdf.set_line_width(size)
|
||||
pdf.rect(x1, y1, x2-x1, y2-y1)
|
||||
|
||||
def image(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', *args,**kwargs):
|
||||
pdf.image(text,x1,y1,w=x2-x1,h=y2-y1,type='',link='')
|
||||
|
||||
def barcode(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', font="arial", size=1,
|
||||
*args, **kwargs):
|
||||
font = font.lower().strip()
|
||||
if font == 'interleaved 2of5 nt':
|
||||
pdf.interleaved2of5(text,x1,y1,w=size)
|
||||
|
||||
if __name__ == "__main__":
|
||||
f = Form("invoice.csv")
|
||||
f.set("EMPRESA","Saraza")
|
||||
f.set("logo","logo.png")
|
||||
f.render("./invoice.pdf")
|
||||
if sys.platform.startswith("linux"):
|
||||
os.system("evince ./invoice.pdf")
|
||||
else:
|
||||
os.system("./invoice.pdf")
|
||||
@@ -0,0 +1,136 @@
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
|
||||
import os
|
||||
from pyfpdf import FPDF
|
||||
|
||||
pdf = FPDF()
|
||||
pdf.add_page()
|
||||
pdf.set_font('helvetica', '', 13.0)
|
||||
pdf.set_xy(105.0, 8.0)
|
||||
pdf.cell(ln=0, h=22.0, align='C', w=75.0, txt='Sample Invoice', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.rect(15.0, 15.0, 170.0, 245.0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.rect(95.0, 15.0, 10.0, 10.0)
|
||||
pdf.image('../tutorial/logo.png', 20.0, 17.0, link='', type='', w=13.0, h=13.0)
|
||||
pdf.set_font('arial', 'B', 16.0)
|
||||
pdf.set_xy(95.0, 18.0)
|
||||
pdf.cell(ln=0, h=2.0, align='C', w=10.0, txt='X', border=0)
|
||||
pdf.set_font('arial', '', 8.0)
|
||||
pdf.set_xy(105.0, 21.0)
|
||||
pdf.cell(ln=0, h=4.0, align='C', w=75.0, txt='Original', border=0)
|
||||
pdf.set_font('arial', 'B', 7.0)
|
||||
pdf.set_xy(95.0, 21.5)
|
||||
pdf.cell(ln=0, h=4.5, align='C', w=10.0, txt='COD.00', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(100.0, 25.0, 100.0, 57.0)
|
||||
pdf.set_font('arial', 'B', 14.0)
|
||||
pdf.set_xy(125.0, 25.5)
|
||||
pdf.cell(ln=0, h=9.5, align='L', w=60.0, txt='00000001', border=0)
|
||||
pdf.set_xy(115.0, 27.5)
|
||||
pdf.cell(ln=0, h=5.5, align='L', w=10.0, txt='N\xba: ', border=0)
|
||||
pdf.set_font('arial', 'B', 12.0)
|
||||
pdf.set_xy(17.0, 32.5)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=98.0, txt='COMPANY', border=0)
|
||||
pdf.set_font('arial', '', 12.0)
|
||||
pdf.set_xy(115.0, 33.0)
|
||||
pdf.cell(ln=0, h=7.0, align='L', w=60.0, txt='Date:', border=0)
|
||||
pdf.set_xy(135.0, 33.0)
|
||||
pdf.cell(ln=0, h=7.0, align='L', w=40.0, txt='19/02/2009', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 57.0, 185.0, 57.0)
|
||||
pdf.set_font('times', '', 10.0)
|
||||
pdf.set_xy(17.0, 59.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=13.0, txt='Mr.(s):', border=0)
|
||||
pdf.set_xy(35.0, 59.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=140.0, txt='Mariano Reingart', border=0)
|
||||
pdf.set_xy(17.0, 64.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=18.0, txt='Address:', border=0)
|
||||
pdf.set_xy(35.0, 64.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=125.0, txt='Siempreviva 12345', border=0)
|
||||
pdf.set_xy(17.0, 69.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=18.0, txt='Tel\xe9fono:', border=0)
|
||||
pdf.set_xy(35.0, 69.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=80.0, txt='+1-5555-5555', border=0)
|
||||
pdf.set_xy(115.0, 69.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=18.0, txt='City:', border=0)
|
||||
pdf.set_xy(133.0, 69.0)
|
||||
pdf.cell(ln=0, h=6.0, align='L', w=42.0, txt='Springfield', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 77.0, 185.0, 77.0)
|
||||
pdf.set_xy(17.0, 80.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=15.0, txt='VAT:', border=0)
|
||||
pdf.set_xy(35.0, 80.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=70.0, txt='Responsable', border=0)
|
||||
pdf.set_xy(115.0, 80.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=20.0, txt='Tax ID:', border=0)
|
||||
pdf.set_xy(135.0, 80.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=40.0, txt='10-12345678-9', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 88.0, 185.0, 88.0)
|
||||
pdf.set_xy(17.0, 90.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=48.0, txt='Due Date:', border=0)
|
||||
pdf.set_xy(65.0, 90.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=20.0, txt='23/07/1978', border=0)
|
||||
pdf.set_xy(92.0, 90.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=43.0, txt='Period', border=0)
|
||||
pdf.set_xy(125.0, 90.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=20.0, txt='01/01/2009', border=0)
|
||||
pdf.set_xy(150.0, 90.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=20.0, txt='31/01/2009', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 95.0, 185.0, 95.0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(155.0, 95.0, 155.0, 230.0)
|
||||
pdf.set_xy(20.0, 97.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=125.0, txt='Description', border=0)
|
||||
pdf.set_xy(160.0, 97.0)
|
||||
pdf.cell(ln=0, h=5.0, align='R', w=20.0, txt='Amount', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 102.0, 185.0, 102.0)
|
||||
pdf.set_xy(20.0, 103.0)
|
||||
pdf.cell(ln=0, h=7.0, align='L', w=125.0, txt='Esto es una prueba y no es v\xe1lido como factura', border=0)
|
||||
pdf.set_xy(160.0, 103.0)
|
||||
pdf.cell(ln=0, h=7.0, align='R', w=20.0, txt='100,00', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.line(15.0, 230.0, 185.0, 230.0)
|
||||
pdf.set_xy(20.0, 233.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=95.0, txt='CAE N\xba', border=0)
|
||||
pdf.set_xy(45.0, 233.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=30.0, txt='01234567890', border=0)
|
||||
pdf.set_font('arial', '', 12.0)
|
||||
pdf.set_xy(105.0, 234.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=45.0, txt='Subtotal:', border=0)
|
||||
pdf.set_font('arial', 'B', 12.0)
|
||||
pdf.set_xy(145.0, 234.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=33.0, txt='100,00', border=0)
|
||||
pdf.set_font('arial', '', 10.0)
|
||||
pdf.set_xy(20.0, 238.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=95.0, txt='Fecha Vto. CAE:', border=0)
|
||||
pdf.set_xy(55.0, 238.0)
|
||||
pdf.cell(ln=0, h=5.0, align='L', w=30.0, txt='19/02/2009', border=0)
|
||||
pdf.set_font('arial', '', 12.0)
|
||||
pdf.set_xy(125.0, 241.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=25.0, txt='VAT 21%:', border=0)
|
||||
pdf.set_font('arial', 'B', 12.0)
|
||||
pdf.set_xy(145.0, 241.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=33.0, txt='21,00', border=0)
|
||||
pdf.interleaved2of5('012345678905', 20.0, 243.5, w=0.75)
|
||||
pdf.set_font('arial', 'B', 12.0)
|
||||
pdf.set_xy(105.0, 251.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=73.0, txt='121,00', border=0)
|
||||
pdf.set_font('arial', '', 12.0)
|
||||
pdf.set_xy(125.0, 251.0)
|
||||
pdf.cell(ln=0, h=9.0, align='R', w=25.0, txt='Total:', border=0)
|
||||
pdf.set_line_width(0.0)
|
||||
pdf.rect(155.0, 252.0, 25.0, 7.0)
|
||||
pdf.set_font('courier', '', 10.0)
|
||||
pdf.set_xy(20.0, 253.0)
|
||||
pdf.cell(ln=0, h=7.0, align='L', w=120.0, txt='012345678905', border=0)
|
||||
pdf.output('./invoice.pdf', 'F')
|
||||
|
||||
import sys
|
||||
if sys.platform.startswith("linux"):
|
||||
os.system("evince ./invoice.pdf")
|
||||
else:
|
||||
os.system("./invoice.pdf")
|
||||
@@ -0,0 +1,26 @@
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
import sys,os
|
||||
sys.path.append("..")
|
||||
import pyfpdf
|
||||
|
||||
customer = {'name':'John Doe','tax_id':'00-0000000-0','vat':True}
|
||||
items = [
|
||||
{'qty':12,'description':'Eggs','price':1.00},
|
||||
{'qty':20,'description':'Spam','price':3.00},
|
||||
{'qty':1,'description':'Varios','price':0.50},
|
||||
]
|
||||
|
||||
pdf = pyfpdf.FPDF()
|
||||
pdf.add_page();
|
||||
pdf.set_font('Arial','B',16);
|
||||
for line in open("simple-csv-invoice.txt").readlines():
|
||||
print line
|
||||
args = eval(line.strip())
|
||||
pdf.text(x=args[0],y=args[1],txt=str(args[2]).decode('latin1'));
|
||||
|
||||
pdf.output(r"./invoice.pdf","F")
|
||||
import sys
|
||||
if sys.platform.startswith("linux"):
|
||||
os.system("evince ./invoice.pdf")
|
||||
else:
|
||||
os.system("./invoice.pdf")
|
||||
@@ -0,0 +1,20 @@
|
||||
100, 10, 'INVOICE'
|
||||
10, 46, 'VAT:'
|
||||
53, 46, customer['vat'] and 'X' or ''
|
||||
63, 46, not customer['vat'] and 'X' or ''
|
||||
10, 20, customer['name']
|
||||
100, 20, customer['tax_id']
|
||||
10, 60, items[0]['qty']
|
||||
40, 60, items[0]['description']
|
||||
150, 60, items[0]['price']
|
||||
190, 60, items[0]['qty']*items[0]['price']
|
||||
10, 65, items[1]['qty']
|
||||
40, 65, items[1]['description']
|
||||
150, 65, items[1]['price']
|
||||
190, 65, items[1]['qty']*items[1]['price']
|
||||
10, 70, items[2]['qty']
|
||||
40, 70, items[2]['description']
|
||||
150, 70, items[2]['price']
|
||||
190, 70, items[2]['qty']*items[2]['price']
|
||||
100,100, 'Total:'
|
||||
120,100, sum([item['qty']*item['price'] for item in items])
|
||||
@@ -0,0 +1,210 @@
|
||||
'barcode';'BC';20.30;246.80;140.30;254.30;'Interleaved 2of5 NT';0.75;0;0;0;0;0;'I';'200000000001000159053338016581200810081';3
|
||||
'barcode_readable';'T';19.30;253.30;140.30;260.30;'Arial';10.00;0;0;0;0;0;'I';'200000000001000159053338016581200810081';3
|
||||
'box';'B';15.30;15.30;185.30;260.30;'Arial';0.00;0;0;0;0;0;'I';None;0
|
||||
'box_x';'B';95.30;15.30;105.30;25.30;'Arial';0.00;1;0;0;0;0;'I';None;2
|
||||
'company_footer1';'T';115.30;45.30;175.30;50.30;'Arial';10.00;0;0;0;0;0;'I';'Company footer 1';2
|
||||
'company_footer2';'T';115.30;50.30;175.30;55.30;'Arial';10.00;0;0;0;0;0;'I';'Company footer 2';2
|
||||
'company_header1';'T';17.30;40.30;85.30;45.30;'Arial';10.00;0;0;0;0;0;'I';'Company header 1';2
|
||||
'company_header2';'T';17.30;45.30;85.30;50.30;'Arial';10.00;0;0;0;0;0;'I';'Company header 2';2
|
||||
'company_logo';'I';20.30;17.30;55.70;30.30;None;0.00;0;0;0;0;0;'I';'tutorial/logo.png';2
|
||||
'company_name';'T';17.30;32.80;98.30;37.80;'Arial';12.00;1;0;0;0;0;'I';'Company name';2
|
||||
'currency';'T';42.30;90.30;67.30;94.30;'Arial';10.00;0;0;0;0;65535;'I';'U.S.D.';0
|
||||
'currency_l';'T';17.30;90.30;65.30;94.30;'Arial';10.00;0;0;0;0;0;'I';'Currency:';0
|
||||
'customer_address';'T';35.30;64.30;160.30;70.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_address_l';'t';17.30;64.30;35.30;70.30;'Arial';10.00;0;0;0;0;0;'I';'Address:';0
|
||||
'customer_city';'T';133.30;69.30;175.30;75.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_city_l';'T';115.30;69.30;133.30;75.30;'Arial';10.00;0;0;0;0;0;'I';'City:';0
|
||||
'customer_country';'T';133.30;73.30;175.30;79.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_name';'T';35.30;59.30;175.30;65.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_name_l';'T';17.30;59.30;30.30;65.30;'Arial';10.00;0;0;0;0;0;'I';'Bill to:';0
|
||||
'customer_phone';'T';35.30;69.30;115.30;75.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_phone_l';'T';17.30;69.30;35.30;75.30;'Arial';10.00;0;0;0;0;0;'I';'Phone/Fax:';0
|
||||
'customer_taxid';'T';135.30;74.30;175.30;79.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_taxid_l';'T';115.30;74.30;135.30;79.30;'Arial';10.00;0;0;0;0;0;'I';'Tax ID:';0
|
||||
'customer_vat';'T';35.30;74.30;105.30;79.30;'Arial';10.00;0;0;0;0;0;'I';None;0
|
||||
'customer_vat_l';'T';17.30;74.30;32.30;79.30;'Arial';10.00;0;0;0;0;0;'I';'VAT:';0
|
||||
'document_copy';'T';105.30;21.30;140.30;25.30;'Arial';8.00;0;0;0;0;0;'C';'Original';2
|
||||
'document_label';'T';105.30;15.90;180.30;21.10;'Arial Black';13.00;0;0;0;0;0;'C';'INVOICE';2
|
||||
'document_number';'T';115.30;27.80;125.30;33.30;'Arial';14.00;1;0;0;0;0;'I';'N\xba: ';2
|
||||
'document_type';'T';95.30;16.10;105.30;24.30;'Arial';16.00;1;0;0;0;0;'C';'X';2
|
||||
'due_date';'T';65.30;82.30;85.30;86.30;'Arial';10.00;0;0;0;0;65535;'I';'31/12/2009';0
|
||||
'due_date_l';'T';17.30;82.30;65.30;86.30;'Arial';10.00;0;0;0;0;0;'I';'Due Date:';0
|
||||
'issue_date';'T';135.30;33.30;175.30;40.30;'Arial';12.00;0;0;0;0;65535;'I';None;0
|
||||
'issue_date_l';'T';115.30;33.30;175.30;40.30;'Arial';12.00;0;0;0;0;0;'I';'Date:';0
|
||||
'item_amount';'T';160.30;97.30;185.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Amount';0
|
||||
'item_amount01';'T';160.30;103.30;183.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount02';'T';160.30;108.30;183.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount03';'T';160.30;113.30;183.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount04';'T';160.30;118.30;183.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount05';'T';160.30;123.30;183.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount06';'T';160.30;128.30;183.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount07';'T';160.30;133.30;183.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount08';'T';160.30;138.30;183.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount09';'T';160.30;143.30;183.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount10';'T';160.30;148.30;183.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount11';'T';160.30;153.30;183.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount12';'T';160.30;158.30;183.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount13';'T';160.30;163.30;183.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount14';'T';160.30;168.30;183.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount15';'T';160.30;173.30;183.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount16';'T';160.30;178.30;183.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount17';'T';160.30;183.30;183.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount18';'T';160.30;188.30;183.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount19';'T';160.30;193.30;183.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount20';'T';160.30;198.30;183.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount21';'T';160.30;203.30;183.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount22';'T';160.30;208.30;183.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount23';'T';160.30;213.30;183.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount24';'T';160.30;218.30;183.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount25';'T';160.30;223.30;183.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_code';'T';30.30;97.30;45.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Cod.';0
|
||||
'item_code01';'T';30.30;103.30;43.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code02';'T';30.30;108.30;43.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code03';'T';30.30;113.30;43.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code04';'T';30.30;118.30;43.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code05';'T';30.30;123.30;43.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code06';'T';30.30;128.30;43.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code07';'T';30.30;133.30;43.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code08';'T';30.30;138.30;43.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code09';'T';30.30;143.30;43.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code10';'T';30.30;148.30;43.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code11';'T';30.30;153.30;43.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code12';'T';30.30;158.30;43.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code13';'T';30.30;163.30;43.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code14';'T';30.30;168.30;43.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code15';'T';30.30;173.30;43.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code16';'T';30.30;178.30;43.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code17';'T';30.30;183.30;43.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code18';'T';30.30;188.30;43.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code19';'T';30.30;193.30;43.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code20';'T';30.30;198.30;43.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code21';'T';30.30;203.30;43.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code22';'T';30.30;208.30;43.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code23';'T';30.30;213.30;43.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code24';'T';30.30;218.30;43.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code25';'T';30.30;223.30;43.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description';'T';45.30;97.30;140.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Description';0
|
||||
'item_description01';'T';47.30;103.30;138.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description02';'T';47.30;108.30;138.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description03';'T';47.30;113.30;138.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description04';'T';47.30;118.30;138.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description05';'T';47.30;123.30;138.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description06';'T';47.30;128.30;138.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description07';'T';47.30;133.30;138.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description08';'T';47.30;138.30;138.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description09';'T';47.30;143.30;138.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description10';'T';47.30;148.30;138.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description11';'T';47.30;153.30;138.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description12';'T';47.30;158.30;138.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description13';'T';47.30;163.30;138.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description14';'T';47.30;168.30;138.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description15';'T';47.30;173.30;138.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description16';'T';47.30;178.30;138.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description17';'T';47.30;183.30;138.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description18';'T';47.30;188.30;138.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description19';'T';47.30;193.30;138.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description20';'T';47.30;198.30;138.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description21';'T';47.30;203.30;138.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description22';'T';47.30;208.30;138.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description23';'T';47.30;213.30;138.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description24';'T';47.30;218.30;138.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description25';'T';47.30;223.30;138.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_price';'T';140.30;97.30;160.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Price';0
|
||||
'item_price01';'T';140.30;103.30;158.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price02';'T';140.30;108.30;158.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price03';'T';140.30;113.30;158.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price04';'T';140.30;118.30;158.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price05';'T';140.30;123.30;158.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price06';'T';140.30;128.30;158.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price07';'T';140.30;133.30;158.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price08';'T';140.30;138.30;158.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price09';'T';140.30;143.30;158.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price10';'T';140.30;148.30;158.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price11';'T';140.30;153.30;158.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price12';'T';140.30;158.30;158.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price13';'T';140.30;163.30;158.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price14';'T';140.30;168.30;158.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price15';'T';140.30;173.30;158.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price16';'T';140.30;178.30;158.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price17';'T';140.30;183.30;158.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price18';'T';140.30;188.30;158.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price19';'T';140.30;193.30;158.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price20';'T';140.30;198.30;158.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price21';'T';140.30;203.30;158.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price22';'T';140.30;208.30;158.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price23';'T';140.30;213.30;158.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price24';'T';140.30;218.30;158.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price25';'T';140.30;223.30;158.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity';'T';15.30;97.30;30.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Qty.';0
|
||||
'item_quantity01';'T';15.30;103.30;25.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity02';'T';15.30;108.30;25.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity03';'T';15.30;113.30;25.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity04';'T';15.30;118.30;25.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity05';'T';15.30;123.30;25.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity06';'T';15.30;128.30;25.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity07';'T';15.30;133.30;25.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity08';'T';15.30;138.30;25.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity09';'T';15.30;143.30;25.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity10';'T';15.30;148.30;25.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity11';'T';15.30;153.30;25.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity12';'T';15.30;158.30;25.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity13';'T';15.30;163.30;25.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity14';'T';15.30;168.30;25.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity15';'T';15.30;173.30;25.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity16';'T';15.30;178.30;25.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity17';'T';15.30;183.30;25.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity18';'T';15.30;188.30;25.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity19';'T';15.30;193.30;25.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity20';'T';15.30;198.30;25.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity21';'T';15.30;203.30;25.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity22';'T';15.30;208.30;25.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity23';'T';15.30;213.30;25.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity24';'T';15.30;218.30;25.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity25';'T';15.30;223.30;25.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_unit01';'T';24.30;103.30;30.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit02';'T';24.30;108.30;30.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit03';'T';24.30;113.30;30.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit04';'T';24.30;118.30;30.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit05';'T';24.30;123.30;30.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit06';'T';24.30;128.30;30.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit07';'T';24.30;133.30;30.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit08';'T';24.30;138.30;30.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit09';'T';24.30;143.30;30.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit10';'T';24.30;148.30;30.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit11';'T';24.30;153.30;30.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit12';'T';24.30;158.30;30.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit13';'T';24.30;163.30;30.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit14';'T';24.30;168.30;30.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit15';'T';24.30;173.30;30.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit16';'T';24.30;178.30;30.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit17';'T';24.30;183.30;30.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit18';'T';24.30;188.30;30.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit19';'T';24.30;193.30;30.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit20';'T';24.30;198.30;30.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit21';'T';24.30;203.30;30.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit22';'T';24.30;208.30;30.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit23';'T';24.30;213.30;30.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit24';'T';24.30;218.30;30.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit25';'T';24.30;223.30;30.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'line1';'L';100.30;25.30;100.30;57.30;'Arial';0;0;0;0;0;0;'I';None;3
|
||||
'line2';'L';15.30;57.30;185.30;57.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line3';'L';15.30;80.30;185.30;80.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line5';'L';15.30;95.30;185.30;95.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line6';'L';15.30;230.30;185.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line9';'L';15.30;102.30;185.30;102.30;None;0.00;0;0;0;0;0;'I';None;0
|
||||
'line_cod';'L';45.30;95.30;45.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_desc';'L';140.30;95.30;140.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_price';'L';160.30;95.30;160.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_qty';'L';30.30;95.30;30.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'net';'T';145.30;234.30;178.30;243.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'net_l';'T';105.30;234.30;150.30;243.30;'Arial';12.00;0;0;0;0;0;'D';'NET:';0
|
||||
'number';'T';125.30;25.80;185.30;35.30;'Arial';14.00;1;0;0;0;0;'I';'0000-00000000';2
|
||||
'page';'T';140.30;21.30;180.30;25.30;'Arial';8.00;0;0;0;0;0;'C';'Page';2
|
||||
'payment';'T';45.30;86.30;150.30;90.30;'Arial';10.00;0;0;0;0;65535;'I';'cash $';0
|
||||
'payment_l';'T';17.30;86.30;45.30;90.30;'Arial';10.00;0;0;0;0;0;'I';'Payment terms:';0
|
||||
'total';'T';105.30;251.30;178.30;260.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'total_box';'B';155.30;252.30;180.30;259.30;None;0.00;0;0;0;0;0;'I';None;0
|
||||
'total_label';'T';125.30;251.30;150.30;260.30;'Arial';12.00;0;0;0;0;0;'D';'Total:';0
|
||||
'vat';'T';145.30;241.30;178.30;250.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'vat';'T';115.30;40.30;175.30;45.30;'Arial';10.00;0;0;0;0;0;'I';'Tax or Vat number';2
|
||||
'vat_l';'T';125.30;241.30;150.30;250.30;'Arial';12.00;0;0;0;0;0;'D';'VAT 21%:';0
|
||||
|
@@ -0,0 +1,6 @@
|
||||
[metadata]
|
||||
description-file = README.md
|
||||
|
||||
[wheel]
|
||||
universal = 1
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from distutils.core import setup
|
||||
|
||||
import os
|
||||
import sys
|
||||
import warnings
|
||||
import subprocess
|
||||
|
||||
import fpdf
|
||||
package_dir = 'fpdf'
|
||||
|
||||
# convert the README and format in restructured text (only when registering)
|
||||
long_desc = ""
|
||||
if os.path.exists("README.md"):
|
||||
try:
|
||||
cmd = ['pandoc', '--from=markdown', '--to=rst', 'README.md']
|
||||
long_desc = subprocess.check_output(cmd).decode("utf8")
|
||||
except Exception as e:
|
||||
warnings.warn("Exception when converting the README format: %s" % e)
|
||||
|
||||
setup(name='fpdf',
|
||||
version=fpdf.__version__,
|
||||
description='Simple PDF generation for Python',
|
||||
long_description=long_desc,
|
||||
author='Olivier PLATHEY ported by Max',
|
||||
author_email='maxpat78@yahoo.it',
|
||||
maintainer = "Mariano Reingart",
|
||||
maintainer_email = "reingart@gmail.com",
|
||||
url='http://code.google.com/p/pyfpdf',
|
||||
license='LGPLv3+',
|
||||
download_url="https://github.com/reingart/pyfpdf/tarball/%s" % fpdf.__version__,
|
||||
packages=['fpdf', ],
|
||||
package_dir={'fpdf': package_dir},
|
||||
package_data={'fpdf': ['font/*.ttf', 'font/*.txt']},
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 2.5",
|
||||
"Programming Language :: Python :: 2.6",
|
||||
"Programming Language :: Python :: 2.7",
|
||||
"Programming Language :: Python :: 3.2",
|
||||
"Programming Language :: Python :: 3.3",
|
||||
"Programming Language :: Python :: 3.4",
|
||||
"Operating System :: OS Independent",
|
||||
"Topic :: Software Development :: Libraries :: PHP Classes",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: Multimedia :: Graphics",
|
||||
],
|
||||
keywords=["pdf", "unicode", "png", "jpg", "ttf"],
|
||||
)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
English: Hello World
|
||||
Greek: Γειά σου κόσμος
|
||||
Polish: Witaj świecie
|
||||
Portuguese: Olá mundo
|
||||
Russian: Здравствуй, Мир
|
||||
Vietnamese: Xin chào thế giới
|
||||
Arabic: مرحبا العالم
|
||||
Hebrew: שלום עולם
|
||||
Hindi: नमस्ते दुनिया
|
||||
Chinese: 你好世界
|
||||
Japanese: こんにちは世界
|
||||
Korean: 안녕하세요
|
||||
Thai: สวัสดีชาวโลก
|
||||
@@ -0,0 +1,47 @@
|
||||
"Print all charters"
|
||||
|
||||
from fpdf import FPDF, FPDF_VERSION, TTFontFile
|
||||
|
||||
print FPDF_VERSION
|
||||
|
||||
class MyTTFontFile(TTFontFile):
|
||||
def getCMAP4(self, unicode_cmap_offset, glyphToChar, charToGlyph):
|
||||
TTFontFile.getCMAP4(self, unicode_cmap_offset, glyphToChar, charToGlyph)
|
||||
self.saveChar = charToGlyph
|
||||
|
||||
def getCMAP12(self, unicode_cmap_offset, glyphToChar, charToGlyph):
|
||||
TTFontFile.getCMAP12(self, unicode_cmap_offset, glyphToChar, charToGlyph)
|
||||
self.saveChar = charToGlyph
|
||||
|
||||
|
||||
pdf=FPDF()
|
||||
pdf.compression = True
|
||||
pdf.add_page()
|
||||
|
||||
fontpath = "DroidSansFallback.ttf"
|
||||
pdf.add_font("font", '', fontpath, uni = True)
|
||||
ttf = MyTTFontFile()
|
||||
ttf.getMetrics(fontpath)
|
||||
|
||||
|
||||
pdf.set_font("font", '', 10)
|
||||
|
||||
# create PDF with first 999 charters in font
|
||||
cnt = 0
|
||||
for char in ttf.saveChar:
|
||||
cnt += 1
|
||||
pdf.write(8, u"%03d) %06x - " % (cnt, char) + unichr(char))
|
||||
pdf.ln()
|
||||
if cnt >= 999:
|
||||
break
|
||||
|
||||
fn = 'charmap.pdf'
|
||||
pdf.output(fn,'F')
|
||||
|
||||
import os
|
||||
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from .common import *
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Test environment
|
||||
|
||||
import common
|
||||
|
||||
def main():
|
||||
common.log("CHECK")
|
||||
|
||||
try:
|
||||
from fpdf import FPDF_VERSION
|
||||
except ImportError:
|
||||
FPDF_VERSION = None
|
||||
common.log("VER =", FPDF_VERSION)
|
||||
|
||||
try:
|
||||
try:
|
||||
import Image
|
||||
except:
|
||||
from PIL import Image
|
||||
except ImportError:
|
||||
Image = None
|
||||
if Image:
|
||||
common.log("PIL = yes")
|
||||
else:
|
||||
common.log("PIL = no")
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,284 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# common utilities for pyfpdf tests
|
||||
# Note: 1) this file imported from both 2 and 3 version of python
|
||||
# 2) import this file before import fpdf
|
||||
# 3) assert this file in tests/cover folder
|
||||
|
||||
import sys, os, subprocess
|
||||
|
||||
PY3K = sys.version_info >= (3, 0)
|
||||
|
||||
basepath = os.path.abspath(os.path.join(__file__, "..", ".."))
|
||||
|
||||
RESHASH = "38db8db76e80a2e75f94d1df9eda307e"
|
||||
|
||||
# if PYFPDFTESTLOCAL is not set - use instaled pyfpdf version
|
||||
PYFPDFTESTLOCAL = ("PYFPDFTESTLOCAL" in os.environ)
|
||||
if PYFPDFTESTLOCAL:
|
||||
sys.path = [os.path.join(basepath, "fpdf_local")] + sys.path
|
||||
|
||||
|
||||
if PY3K:
|
||||
#import common3 as _common
|
||||
def tobytes(value):
|
||||
return value.encode("latin1")
|
||||
def frombytes(value):
|
||||
return value.decode("latin1")
|
||||
from hashlib import md5
|
||||
unicode = str
|
||||
|
||||
else:
|
||||
#import common2 as _common
|
||||
def tobytes(value):
|
||||
return value
|
||||
def frombytes(value):
|
||||
return value
|
||||
try:
|
||||
from hashlib import md5
|
||||
except ImportError:
|
||||
import md5
|
||||
|
||||
def exec_cmd(cmd):
|
||||
"Execute command and return console output (stdout, stderr)"
|
||||
obj = subprocess.Popen(cmd, \
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.PIPE)
|
||||
std, err = obj.communicate()
|
||||
return (frombytes(std), frombytes(err))
|
||||
|
||||
def start_by_ext(fn):
|
||||
"Open file in associated progrom"
|
||||
try:
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except WindowsError:
|
||||
os.system("start " + fn)
|
||||
except:
|
||||
subprocess.call(["xdg-open", fn])
|
||||
|
||||
def writer(stream, items):
|
||||
sep = ""
|
||||
for item in items:
|
||||
stream.write(sep)
|
||||
sep = " "
|
||||
if not isinstance(item, str):
|
||||
item = str(item)
|
||||
if not PY3K:
|
||||
if not isinstance(item, unicode):
|
||||
item = str(item)
|
||||
stream.write(item)
|
||||
stream.write("\n")
|
||||
|
||||
def log(*kw):
|
||||
writer(sys.stdout, kw)
|
||||
|
||||
def err(*kw):
|
||||
writer(sys.stderr, kw)
|
||||
|
||||
def test_putinfo(self):
|
||||
"Replace info stamp with defaults for all automated test objects"
|
||||
self._out('/Producer '+self._textstring('PyFPDF TEST http://pyfpdf.googlecode.com/'))
|
||||
if hasattr(self,'title'):
|
||||
self._out('/Title '+self._textstring(self.title))
|
||||
if hasattr(self,'subject'):
|
||||
self._out('/Subject '+self._textstring(self.subject))
|
||||
if hasattr(self,'author'):
|
||||
self._out('/Author '+self._textstring(self.author))
|
||||
if hasattr (self,'keywords'):
|
||||
self._out('/Keywords '+self._textstring(self.keywords))
|
||||
if hasattr(self,'creator'):
|
||||
self._out('/Creator '+self._textstring(self.creator))
|
||||
self._out('/CreationDate '+self._textstring('D:19700101000000'))
|
||||
|
||||
def file_hash(fn):
|
||||
"Calc MD5 hash for file"
|
||||
md = md5()
|
||||
f = open(fn, "rb")
|
||||
try:
|
||||
md.update(f.read())
|
||||
finally:
|
||||
f.close()
|
||||
return md.hexdigest()
|
||||
|
||||
def read_cover_info(fn):
|
||||
"Read cover test info"
|
||||
f = open(fn, "rb")
|
||||
da = {"res": []}
|
||||
mark = "#PyFPDF-cover-test:"
|
||||
encmark = "# -*- coding:"
|
||||
enc = None
|
||||
try:
|
||||
hdr = False
|
||||
for line in f.readlines():
|
||||
if enc is None:
|
||||
if line.decode("latin-1")[:len(encmark)] == unicode(encmark):
|
||||
enc = line.decode("latin-1")[len(encmark):].strip()
|
||||
if enc[-3:] == unicode("-*-"):
|
||||
enc = enc[:-3].strip()
|
||||
try:
|
||||
line.decode(enc)
|
||||
except:
|
||||
enc = None
|
||||
line = line.decode(enc or "UTF-8").strip()
|
||||
if line[:len(mark)] == mark:
|
||||
hdr = True
|
||||
kv = line[len(mark):].split("=", 1)
|
||||
if len(kv) == 2:
|
||||
if kv[0] == "res":
|
||||
da["res"].append(kv[1])
|
||||
else:
|
||||
da[kv[0]] = kv[1]
|
||||
else:
|
||||
if hdr and len(line) == 0:
|
||||
break
|
||||
|
||||
finally:
|
||||
f.close()
|
||||
return da
|
||||
|
||||
def parse_test_args(args, deffn):
|
||||
"Parse test args, return (fn, autotest)"
|
||||
args = args[1:]
|
||||
da = {}
|
||||
da["fn"] = deffn
|
||||
da["autotest"] = False
|
||||
da["check"] = False
|
||||
while len(args) > 0:
|
||||
arg = args[0]
|
||||
if arg == "--help":
|
||||
log("Test usage: [--auto] [--check] [<outputname>]")
|
||||
log(" --auto - no version and timestamp in file, do not open")
|
||||
log(" --check - compare new file with stock")
|
||||
log(" <outputname> - output filename, default \"%s\"" % deffn)
|
||||
sys.exit(0)
|
||||
if arg == "--auto":
|
||||
da["autotest"] = True
|
||||
elif arg == "--check":
|
||||
da["check"] = True
|
||||
else:
|
||||
da["fn"] = arg
|
||||
args = args[1:]
|
||||
return da
|
||||
|
||||
def load_res_file(path):
|
||||
items = {}
|
||||
res = None
|
||||
for line in open(path):
|
||||
line = line.strip()
|
||||
if line[:1] == "#":
|
||||
continue
|
||||
kv = line.split("=", 1)
|
||||
if len(kv) != 2:
|
||||
continue
|
||||
if kv[0] == "res":
|
||||
res = kv[1]
|
||||
if res not in items:
|
||||
items[res] = ["", []]
|
||||
elif res is None:
|
||||
continue
|
||||
elif kv[0] == "hash":
|
||||
items[res][0] = kv[1]
|
||||
elif kv[0] == "tags":
|
||||
items[res][1] += [kv[1].split(",")]
|
||||
return items
|
||||
|
||||
def check_env(settings, args):
|
||||
"Check test environment"
|
||||
verbose = not args["autotest"]
|
||||
# check python version
|
||||
if PY3K:
|
||||
if settings.get("python3", "yes") == "no":
|
||||
# python 3 inacceptable
|
||||
if verbose:
|
||||
err("Python 3.x unsupported %s" % repr(sys.version_info))
|
||||
else:
|
||||
log("NOTFORPY3")
|
||||
return False
|
||||
else:
|
||||
if settings.get("python2", "yes") == "no":
|
||||
# python 2 inacceptable
|
||||
if verbose:
|
||||
err("Python 2.x unsupported %s" % repr(sys.version_info))
|
||||
else:
|
||||
log("NOTFORPY2")
|
||||
return False
|
||||
if settings.get("pil", "no") == "yes":
|
||||
# import PIL
|
||||
try:
|
||||
try:
|
||||
import Image
|
||||
except:
|
||||
from PIL import Image
|
||||
except ImportError:
|
||||
Image = None
|
||||
if Image is None:
|
||||
if verbose:
|
||||
err("PIL or Pillow module is required")
|
||||
else:
|
||||
log("NOPIL")
|
||||
return False
|
||||
# check res
|
||||
reslst = None
|
||||
for res in settings.get("res", []):
|
||||
if reslst is None:
|
||||
# check
|
||||
respath = os.path.join(basepath, "resources.txt")
|
||||
if file_hash(respath) != RESHASH:
|
||||
if verbose:
|
||||
err("File resources.txt damaged (hash mismatch)")
|
||||
else:
|
||||
log("RESHASH")
|
||||
return False
|
||||
# load data
|
||||
reslst = load_res_file(respath)
|
||||
if res not in reslst:
|
||||
err("Resource \"" + res + "\" not found")
|
||||
if not verbose:
|
||||
log("NORES")
|
||||
return False
|
||||
# check hash
|
||||
respath = os.path.join(basepath, res)
|
||||
hs = file_hash(respath)
|
||||
if hs != reslst[res][0]:
|
||||
err("Resource \"" + res + "\" damaged")
|
||||
err(" read = %s" % hs)
|
||||
err(" required = %s" % reslst[res][0])
|
||||
if not verbose:
|
||||
log("RESERR")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def check_result(settings, args):
|
||||
check = True
|
||||
if settings.get("fn"):
|
||||
if args["check"]:
|
||||
# compare with hash
|
||||
hs = file_hash(args["fn"])
|
||||
fhs = settings.get("hash", "")
|
||||
if fhs != "" and hs != fhs:
|
||||
check = False
|
||||
err("Hash mismatch:")
|
||||
err(" new = %s" % hs)
|
||||
err(" required = %s" % fhs)
|
||||
|
||||
if args["autotest"]:
|
||||
if check:
|
||||
log("OK")
|
||||
else:
|
||||
log("HASHERROR")
|
||||
else:
|
||||
if settings.get("fn"):
|
||||
start_by_ext(args["fn"])
|
||||
else:
|
||||
log("Test passed")
|
||||
|
||||
def testmain(fn, testfunc):
|
||||
si = read_cover_info(fn)
|
||||
da = parse_test_args(sys.argv, si.get("fn"))
|
||||
if not check_env(si, da):
|
||||
return
|
||||
testfunc(da["fn"], da["autotest"] or da["check"])
|
||||
check_result(si, da)
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Test caching"
|
||||
|
||||
#PyFPDF-cover-test:res=font/DejaVuSansCondensed.ttf
|
||||
#PyFPDF-cover-test:res=font/DejaVuSans.ttf
|
||||
|
||||
import common
|
||||
import fpdf
|
||||
|
||||
import os, shutil, time
|
||||
|
||||
def testfile(f1, f2):
|
||||
# create pdf
|
||||
pdf = fpdf.FPDF()
|
||||
if f1:
|
||||
pdf.add_font('DejaVuSansCondensed', '', f1, uni = True)
|
||||
if f2:
|
||||
pdf.add_font('DejaVuSans', '', f2, uni = True)
|
||||
pdf.set_font('DejaVuSans', "", 10)
|
||||
return pdf
|
||||
|
||||
def trashfile(fn):
|
||||
f = open(fn, "w")
|
||||
f.write("1234567890")
|
||||
f.close()
|
||||
|
||||
try:
|
||||
from hashlib import md5
|
||||
except ImportError:
|
||||
try:
|
||||
from md5 import md5
|
||||
except ImportError:
|
||||
md5 = None
|
||||
def hashfn(fn):
|
||||
h = md5()
|
||||
if common.PY3K:
|
||||
h.update(fn.encode("UTF-8"))
|
||||
else:
|
||||
h.update(fn)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
cachepath = os.path.join(os.path.dirname(__file__), "cache")
|
||||
if os.path.exists(cachepath):
|
||||
# cleanup dest
|
||||
for item in os.listdir(cachepath):
|
||||
os.remove(os.path.join(cachepath, item))
|
||||
else:
|
||||
# create font dir
|
||||
os.makedirs(cachepath)
|
||||
hashpath = os.path.join(os.path.dirname(__file__), "hash")
|
||||
if os.path.exists(hashpath):
|
||||
# cleanup dest
|
||||
for item in os.listdir(hashpath):
|
||||
os.remove(os.path.join(hashpath, item))
|
||||
else:
|
||||
# create font dir
|
||||
os.makedirs(hashpath)
|
||||
# copy font files
|
||||
shutil.copy(os.path.join(common.basepath, "font", "DejaVuSansCondensed.ttf"), cachepath)
|
||||
shutil.copy(os.path.join(common.basepath, "font", "DejaVuSans.ttf"), cachepath)
|
||||
f1 = os.path.join(cachepath, "DejaVuSansCondensed.ttf")
|
||||
f2 = os.path.join(cachepath, "DejaVuSans.ttf")
|
||||
|
||||
# --- normal cache mode ---
|
||||
fpdf.set_global("FPDF_CACHE_MODE", 0)
|
||||
# first load
|
||||
t0 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t1 = time.time()
|
||||
assert os.path.exists(f1[:-3] + "pkl")
|
||||
assert os.path.exists(f2[:-3] + "pkl")
|
||||
# load cached
|
||||
t2 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t3 = time.time()
|
||||
if not nostamp:
|
||||
common.log("Cache fonts: ", t1 - t0)
|
||||
common.log("Reload fonts: ", t3 - t2)
|
||||
pdf.add_page()
|
||||
# trigger cw127
|
||||
#pdf.write(5, "Γειά σου κόσμος")
|
||||
pdf.write(5, "Привет!")
|
||||
pdf.write(10, "Hello")
|
||||
pdf.output(os.path.join(cachepath, "pdf0.pdf"), "F")
|
||||
# check cw127
|
||||
assert not os.path.exists(f1[:-3] + "cw127.pkl")
|
||||
assert os.path.exists(f2[:-3] + "cw127.pkl")
|
||||
|
||||
# --- disable cache reading ---
|
||||
fpdf.set_global("FPDF_CACHE_MODE", 1)
|
||||
# put garbage data to cache files - fpdf should not read pkl
|
||||
trashfile(f1[:-3] + "pkl")
|
||||
trashfile(f2[:-3] + "pkl")
|
||||
trashfile(f2[:-3] + "cw127.pkl")
|
||||
# test same file
|
||||
t0 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t1 = time.time()
|
||||
# remove pkl files
|
||||
os.remove(f1[:-3] + "pkl")
|
||||
os.remove(f2[:-3] + "pkl")
|
||||
os.remove(f2[:-3] + "cw127.pkl")
|
||||
# test reload
|
||||
t2 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t3 = time.time()
|
||||
if not nostamp:
|
||||
common.log("No cache 1st: ", t1 - t0)
|
||||
common.log("No cache 2nd: ", t3 - t2)
|
||||
pdf.add_page()
|
||||
pdf.write(5, "Γειά σου κόσμος")
|
||||
pdf.write(10, "Hello")
|
||||
pdf.output(os.path.join(cachepath, "pdf1.pdf"), "F")
|
||||
# test no files created
|
||||
assert not os.path.exists(f1[:-3] + "pkl")
|
||||
assert not os.path.exists(f2[:-3] + "pkl")
|
||||
assert not os.path.exists(f1[:-3] + "cw127.pkl")
|
||||
assert not os.path.exists(f2[:-3] + "cw127.pkl")
|
||||
|
||||
# --- hash cache ---
|
||||
fpdf.set_global("FPDF_CACHE_MODE", 2)
|
||||
fpdf.set_global("FPDF_CACHE_DIR", hashpath)
|
||||
t0 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t1 = time.time()
|
||||
assert not os.path.exists(f1[:-3] + "pkl")
|
||||
assert not os.path.exists(f2[:-3] + "pkl")
|
||||
# load cached
|
||||
t2 = time.time()
|
||||
pdf = testfile(f1, f2)
|
||||
t3 = time.time()
|
||||
# test reload
|
||||
if not nostamp:
|
||||
common.log("Hash load 1st:", t1 - t0)
|
||||
common.log("Hash load 2nd:", t3 - t2)
|
||||
# check hash
|
||||
assert os.path.exists(os.path.join(hashpath, hashfn(f1) + ".pkl"))
|
||||
assert os.path.exists(os.path.join(hashpath, hashfn(f2) + ".pkl"))
|
||||
pdf.add_page()
|
||||
pdf.write(5, "Хешировали, хешировали, да выдохешиовали.")
|
||||
pdf.write(10, "Hello")
|
||||
pdf.output(os.path.join(cachepath, "pdf2.pdf"), "F")
|
||||
assert not os.path.exists(os.path.join(hashpath, hashfn(f1) + ".cw127.pkl"))
|
||||
assert os.path.exists(os.path.join(hashpath, hashfn(f2) + ".cw127.pkl"))
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"PDF Template Helper for FPDF.py"
|
||||
|
||||
__author__ = "Mariano Reingart <reingart@gmail.com>"
|
||||
__copyright__ = "Copyright (C) 2010 Mariano Reingart"
|
||||
__license__ = "LGPL 3.0"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=invoice.pdf
|
||||
#PyFPDF-cover-test:hash=5844bbebe3e33b0ac9cc15ac39327a81
|
||||
#PyFPDF-cover-test:res=invoice.csv
|
||||
|
||||
import common
|
||||
from fpdf import Template
|
||||
|
||||
import os
|
||||
|
||||
class randomfake:
|
||||
RINT1_10 = [8, 5, 7, 9, 10, 8, 1, 9, 1, 7, 6, 2, 3, 7, 8, 4, 6, 5, 7, 2, \
|
||||
5, 8, 6, 5, 5, 8, 7, 7, 6]
|
||||
RINT65_90 = [67, 67, 87, 78, 84, 67, 86, 75, 86, 89, 81, 69, 72, 71, 84, \
|
||||
80, 71 , 86 , 82 , 70 , 84 , 69 , 70]
|
||||
RFLT = [0.820710198665, 0.342854771472, 0.0238515965298, 0.177658111957, \
|
||||
0.422301628067, 0.701867781693, 0.168650983171, 0.329723498664, \
|
||||
0.490481106182, 0.892634029991, 0.994758791625, 0.998243714035, \
|
||||
0.596244312914 ,0.318601111178 ,0.321593673214 ,0.203486335469]
|
||||
def __init__(self):
|
||||
self.icnt1_10 = 0
|
||||
self.icnt65_90 = 0
|
||||
self.fcnt = 0
|
||||
|
||||
def randint(self, beg, end):
|
||||
if beg == 1 and end == 10:
|
||||
self.icnt1_10 += 1
|
||||
if self.icnt1_10 > len(self.RINT1_10):
|
||||
self.icnt1_10 = 1
|
||||
return self.RINT1_10[self.icnt1_10 - 1]
|
||||
if beg == 65 and end == 90:
|
||||
self.icnt65_90 += 1
|
||||
if self.icnt65_90 > len(self.RINT65_90):
|
||||
self.icnt65_90 = 1
|
||||
return self.RINT65_90[self.icnt65_90 - 1]
|
||||
raise Exception("Not implemented")
|
||||
|
||||
def random(self):
|
||||
self.fcnt += 1
|
||||
if self.fcnt > len(self.RFLT):
|
||||
self.fcnt = 1
|
||||
return self.RFLT[self.fcnt - 1]
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
|
||||
# generate sample invoice (according Argentina's regulations)
|
||||
from decimal import Decimal
|
||||
|
||||
f = Template(format="A4",
|
||||
title="Sample Invoice", author="Sample Company",
|
||||
subject="Sample Customer", keywords="Electronic TAX Invoice")
|
||||
if nostamp:
|
||||
f.pdf._putinfo = lambda: common.test_putinfo(f.pdf)
|
||||
random = randomfake()
|
||||
else:
|
||||
import random
|
||||
|
||||
csvpath = os.path.join(common.basepath, "invoice.csv")
|
||||
f.parse_csv(infile=csvpath, delimiter=";", decimal_sep=",")
|
||||
|
||||
detail = "Lorem ipsum dolor sit amet, consectetur. " * 30
|
||||
items = []
|
||||
for i in range(1, 30):
|
||||
ds = "Sample product %s" % i
|
||||
qty = random.randint(1,10)
|
||||
price = round(random.random()*100,3)
|
||||
code = "%s%s%02d" % (chr(random.randint(65,90)), chr(random.randint(65,90)),i)
|
||||
items.append(dict(code=code, unit='u',
|
||||
qty=qty, price=price,
|
||||
amount=qty*price,
|
||||
ds="%s: %s" % (i,ds)))
|
||||
|
||||
# divide and count lines
|
||||
lines = 0
|
||||
li_items = []
|
||||
for it in items:
|
||||
qty = it['qty']
|
||||
code = it['code']
|
||||
unit = it['unit']
|
||||
for ds in f.split_multicell(it['ds'], 'item_description01'):
|
||||
# add item description line (without price nor amount)
|
||||
li_items.append(dict(code=code, ds=ds, qty=qty, unit=unit, price=None, amount=None))
|
||||
# clean qty and code (show only at first)
|
||||
unit = qty = code = None
|
||||
# set last item line price and amount
|
||||
li_items[-1].update(amount = it['amount'],
|
||||
price = it['price'])
|
||||
|
||||
obs="\n<U>Detail:</U>\n\n" + detail
|
||||
for ds in f.split_multicell(obs, 'item_description01'):
|
||||
li_items.append(dict(code=code, ds=ds, qty=qty, unit=unit, price=None, amount=None))
|
||||
|
||||
# calculate pages:
|
||||
lines = len(li_items)
|
||||
max_lines_per_page = 24
|
||||
pages = int(lines / (max_lines_per_page - 1))
|
||||
if lines % (max_lines_per_page - 1): pages = pages + 1
|
||||
|
||||
# completo campos y hojas
|
||||
for page in range(1, int(pages)+1):
|
||||
f.add_page()
|
||||
f['page'] = 'Page %s of %s' % (page, pages)
|
||||
if pages>1 and page<pages:
|
||||
s = 'Continues on page %s' % (page+1)
|
||||
else:
|
||||
s = ''
|
||||
f['item_description%02d' % (max_lines_per_page+1)] = s
|
||||
|
||||
f["company_name"] = "Sample Company"
|
||||
f["company_logo"] = os.path.join(common.basepath, "../tutorial/logo.png")
|
||||
f["company_header1"] = "Some Address - somewhere -"
|
||||
f["company_header2"] = "http://www.example.com"
|
||||
f["company_footer1"] = "Tax Code ..."
|
||||
f["company_footer2"] = "Tax/VAT ID ..."
|
||||
f['number'] = '0001-00001234'
|
||||
f['issue_date'] = '2010-09-10'
|
||||
f['due_date'] = '2099-09-10'
|
||||
f['customer_name'] = "Sample Client"
|
||||
f['customer_address'] = "Siempreviva 1234"
|
||||
|
||||
# print line item...
|
||||
li = 0
|
||||
k = 0
|
||||
total = Decimal("0.00")
|
||||
for it in li_items:
|
||||
k = k + 1
|
||||
if k > page * (max_lines_per_page - 1):
|
||||
break
|
||||
if it['amount']:
|
||||
total += Decimal("%.6f" % it['amount'])
|
||||
if k > (page - 1) * (max_lines_per_page - 1):
|
||||
li += 1
|
||||
if it['qty'] is not None:
|
||||
f['item_quantity%02d' % li] = it['qty']
|
||||
if it['code'] is not None:
|
||||
f['item_code%02d' % li] = it['code']
|
||||
if it['unit'] is not None:
|
||||
f['item_unit%02d' % li] = it['unit']
|
||||
f['item_description%02d' % li] = it['ds']
|
||||
if it['price'] is not None:
|
||||
f['item_price%02d' % li] = "%0.3f" % it['price']
|
||||
if it['amount'] is not None:
|
||||
f['item_amount%02d' % li] = "%0.2f" % it['amount']
|
||||
|
||||
if pages == page:
|
||||
f['net'] = "%0.2f" % (total/Decimal("1.21"))
|
||||
f['vat'] = "%0.2f" % (total*(1-1/Decimal("1.21")))
|
||||
f['total_label'] = 'Total:'
|
||||
else:
|
||||
f['total_label'] = 'SubTotal:'
|
||||
f['total'] = "%0.2f" % total
|
||||
|
||||
f.render(outputname)
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Test images flow mode (cell-like, trigger page breaks)"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=issue_14.pdf
|
||||
#PyFPDF-cover-test:hash=7e4a5b0a77c4eaefa475bb7db655fcd9
|
||||
#PyFPDF-cover-test:res=../tutorial/logo_pb.png
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
|
||||
for i in range(1,41):
|
||||
# for flow mode, do not pass x or y:
|
||||
pdf.image(os.path.join(common.basepath, '../tutorial/logo_pb.png'))
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Test issue 33 (Cannot import GIF files that don't have transparency)"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=issue_33.pdf
|
||||
#PyFPDF-cover-test:hash=be95c7ef3a5b14b5a54a52f7eaf3a9e4
|
||||
#PyFPDF-cover-test:2to3=no
|
||||
#PyFPDF-cover-test:pil=yes
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os, sys, tempfile
|
||||
try:
|
||||
try:
|
||||
import Image
|
||||
except:
|
||||
from PIL import Image
|
||||
except ImportError:
|
||||
Image = None
|
||||
|
||||
|
||||
def genbar():
|
||||
# bg
|
||||
bg = Image.new("L", (112, 1), 1)
|
||||
bg = bg.resize((112, 11))
|
||||
# stripes
|
||||
vbarnum = [0x4F43484B, 0xEE90D642, 0xF11A2735, 0xD71A]
|
||||
vbar = Image.new("L", (112, 1), 1)
|
||||
pix = vbar.load()
|
||||
pos = 0
|
||||
for b in vbarnum:
|
||||
for i in range(32):
|
||||
pix[pos, 0] = 0 if (b & 1) else 1
|
||||
b = b >> 1
|
||||
pos += 1
|
||||
if pos >= 112: break
|
||||
vbar = vbar.resize((112, 31), Image.NEAREST)
|
||||
# digit
|
||||
dignum = [0x398, 0x6dc, 0x61a, 0x31b, 0x1bf, 0x6d8, 0x7d8]
|
||||
dbar = Image.new("L", (16, 7), 1)
|
||||
pix = dbar.load()
|
||||
pos = 0
|
||||
ypos = 0
|
||||
for b in dignum:
|
||||
for i in range(16):
|
||||
pix[pos, ypos] = 0 if (b & 1) else 1
|
||||
b = b >> 1
|
||||
pos += 1
|
||||
ypos += 1
|
||||
pos = 0
|
||||
# result
|
||||
bar = Image.new("L", (114, 44), 2)
|
||||
bar.paste(vbar, (1, 1))
|
||||
bar.paste(bg, (1, 32))
|
||||
for i in range(4):
|
||||
bar.paste(dbar, (35 + i * 12, 34))
|
||||
return bar
|
||||
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
plane = genbar()
|
||||
palette = (0,0,0, 255,255,255) + (128,128,128)*254
|
||||
img = Image.fromstring("P", plane.size, plane.tostring())
|
||||
img.putpalette(palette)
|
||||
|
||||
f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
|
||||
gif1 = f.name
|
||||
f.close()
|
||||
f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
|
||||
gif2 = f.name
|
||||
f.close()
|
||||
|
||||
img.save(gif1, "GIF", optimize = 0)
|
||||
img.save(gif2, "GIF", transparency = 1, optimize = 0)
|
||||
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 16)
|
||||
pdf.write(8, "Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.image(gif1, x = 15, y = 15)
|
||||
|
||||
pdf.write(8, "Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.image(gif2, x = 15, y = 39)
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
os.unlink(gif1)
|
||||
os.unlink(gif2)
|
||||
|
||||
def main():
|
||||
si = common.read_cover_info(__file__)
|
||||
da = common.parse_test_args(sys.argv, si["fn"])
|
||||
if not common.check_env(si, da):
|
||||
return
|
||||
dotest(da["fn"], da["autotest"] or da["check"])
|
||||
common.check_result(si, da)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Tests new dashed line feature (issue 35)"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=issue_35.pdf
|
||||
#PyFPDF-cover-test:hash=e8f92b3210aea65caa72f70d0f898c04
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
|
||||
pdf.dashed_line(10, 10, 110, 10)
|
||||
pdf.dashed_line(10, 20, 110, 20, 5, 5)
|
||||
pdf.dashed_line(10, 30, 110, 30, 1, 10)
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Test issue 41 (escape CR char)"
|
||||
|
||||
#PyFPDF-cover-test:format=TXT
|
||||
#PyFPDF-cover-test:fn=issue_41.txt
|
||||
#PyFPDF-cover-test:hash=c576afec3362a7cc3b4b07a12feeefd3
|
||||
|
||||
import common # common set of utilities
|
||||
import fpdf
|
||||
|
||||
import sys
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
txt = "This is test string for issue41 with special symbols \n" +\
|
||||
"ln - \n\n" +\
|
||||
"cr - \r\n" +\
|
||||
"\\ ( ) abcdef..xyz 01234\n" +\
|
||||
"| [ ] ABCDEF..XYZ 56789\n"
|
||||
|
||||
pdf = fpdf.FPDF()
|
||||
f = open(outputname, "wb")
|
||||
f.write(pdf._escape(txt).encode("latin1"))
|
||||
f.close()
|
||||
|
||||
def main():
|
||||
si = common.read_cover_info(__file__)
|
||||
da = common.parse_test_args(sys.argv, si["fn"])
|
||||
if not common.check_env(si, da):
|
||||
return
|
||||
dotest(da["fn"], da["autotest"] or da["check"])
|
||||
common.check_result(si, da)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic test to reproduce issue 60: RTL languages (arabian, hebrew, etc.)"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=issue_60.pdf
|
||||
#PyFPDF-cover-test:hash=bc47380ca9511b96756d1066a3b494c1
|
||||
#PyFPDF-cover-test:res=font/DejaVuSans.ttf
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import sys, traceback, os
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.compress = False
|
||||
pdf.add_page()
|
||||
pdf.add_font('DejaVu', '', \
|
||||
os.path.join(common.basepath, 'font/DejaVuSans.ttf'), uni=True)
|
||||
pdf.set_font('DejaVu', '', 14)
|
||||
# this will be displayed wrong as actually it is stored LTR:
|
||||
text= u"این یک متن پارسی است. This is a Persian text !!"
|
||||
pdf.write(8, text)
|
||||
pdf.ln(8)
|
||||
# Reverse the RLT using the Bidirectional Algorithm to be displayed correctly:
|
||||
# (http://unicode.org/reports/tr9/)
|
||||
from bidi.algorithm import get_display
|
||||
rtl_text = get_display(text)
|
||||
pdf.write(8, rtl_text)
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
from bidi.algorithm import get_display
|
||||
except ImportError:
|
||||
traceback.print_exc(file = sys.stdout)
|
||||
common.err("This test requre PyBiDi (https://pypi.python.org/pypi/python-bidi)")
|
||||
common.log("SKIP")
|
||||
sys.exit(0)
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# -*- coding: latin-1 -*-
|
||||
|
||||
"Basic test to reproduce issue 63: warning in unicode get_char_width"
|
||||
|
||||
#PyFPDF-cover-test:res=font/DejaVuSans.ttf
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os, struct
|
||||
|
||||
if common.PY3K:
|
||||
def u(x):
|
||||
return x
|
||||
else:
|
||||
import codecs
|
||||
def u(x):
|
||||
return codecs.unicode_escape_decode(x)[0]
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
|
||||
pdf = FPDF()
|
||||
pdf.set_font('Arial','',14)
|
||||
s = 'Texto largo que no cabe en esta celda pero que será ajustado'
|
||||
w = pdf.get_string_width(s)
|
||||
if not nostamp:
|
||||
print (s, w)
|
||||
assert round(w, 2) == 135.90
|
||||
pdf.add_font('DejaVu', '', './font/DejaVuSans.ttf', uni=True)
|
||||
pdf.set_font('DejaVu', '', 14)
|
||||
s = u('Texto largo que no cabe en esta celda pero que será ajustado')
|
||||
w = pdf.get_string_width(s)
|
||||
if not nostamp:
|
||||
print (s, w)
|
||||
assert round(w, 2) == 153.64
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic test to check issue 70: raise an exception if add_page was not called"
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os, struct
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
try:
|
||||
# Portrait, millimeter units, A4 page size
|
||||
pdf = FPDF("P", "mm", "A4")
|
||||
# Set font: Times, normal, size 10
|
||||
pdf.set_font('Times','', 12)
|
||||
##pdf.add_page()
|
||||
# Layout cell: 0 x 5 mm, text, no border, Left
|
||||
pdf.cell(0,5,'Input 1 : ',border=0,align="L")
|
||||
pdf.cell(0,5,'Input 2 : ', border=0,align="L")
|
||||
pdf.cell(0,5,'Recomendation : ', border=0, align="L")
|
||||
pdf.cell(0,5,'Data 1 :', border=0, align="L" )
|
||||
pdf.cell(0,5,'Data 2 :', border=0, align="L" )
|
||||
pdf.output(outputname,'F')
|
||||
except RuntimeError as e:
|
||||
assert e.args[0] == "FPDF error: No page open, you need to call add_page() first"
|
||||
else:
|
||||
raise RuntimeError("Exception not raised!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic test to check issue 71: test Code39"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=issue_71.pdf
|
||||
#PyFPDF-cover-test:hash=1575947cac5b0a8cdceedf9b525ee6db
|
||||
# get res from http://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Code_3_of_9.svg/262px-Code_3_of_9.svg.png
|
||||
# PyFPDF-cover-test:res=.png
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
# Portrait, millimeter units, A4 page size
|
||||
pdf = FPDF("P", "mm", "A4")
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
# Set font: Times, normal, size 10
|
||||
pdf.add_page()
|
||||
if not nostamp:
|
||||
# do not show picture in batch
|
||||
url = "http://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Code_3_of_9.svg/262px-Code_3_of_9.svg.png"
|
||||
pdf.image(url, 10, 10)
|
||||
|
||||
pdf.code39("*wikipedia*", 12.75, 7, 1.49)
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Test jpeg image embedding"
|
||||
|
||||
# Note: img_cmyk.jpg has no color profile, PDF rendering may vary
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=jpeg.pdf
|
||||
#PyFPDF-cover-test:hash=eb8db8f336226f6de671a3e515b9cc61
|
||||
#PyFPDF-cover-test:res=img_gray.jpg
|
||||
#PyFPDF-cover-test:res=img_rgb.jpg
|
||||
#PyFPDF-cover-test:res=img_cmyk.jpg
|
||||
|
||||
import common # test utilities
|
||||
from fpdf import FPDF
|
||||
|
||||
import sys
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 14)
|
||||
|
||||
pdf.text(10, 57, 'DeviceGray')
|
||||
pdf.image("img_gray.jpg", 55, 5)
|
||||
|
||||
pdf.text(10, 157, 'DeviceRGB')
|
||||
pdf.image("img_rgb.jpg", 55, 105)
|
||||
|
||||
pdf.text(10, 257, 'DeviceCMYK')
|
||||
pdf.image("img_cmyk.jpg", 55, 205)
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Simple test to check alias_nb_pages replacement under unicode fonts"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=nb_pages.pdf
|
||||
#PyFPDF-cover-test:hash=4f22df85e31007cb275fabdc9fa78f97
|
||||
#PyFPDF-cover-test:res=font/DejaVuSansCondensed.ttf
|
||||
|
||||
import common
|
||||
import fpdf
|
||||
|
||||
import os
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = fpdf.FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
fpdf.set_global("FPDF_CACHE_MODE", 1)
|
||||
# set default alias: {nb} that will be replaced with total page count
|
||||
pdf.alias_nb_pages()
|
||||
|
||||
# Add a Unicode font (uses UTF-8)
|
||||
pdf.add_font('DejaVu', '', \
|
||||
os.path.join(common.basepath, "font", 'DejaVuSansCondensed.ttf'), \
|
||||
uni = True)
|
||||
pdf.set_font('DejaVu', '', 14)
|
||||
|
||||
for i in range(5):
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial','B',16)
|
||||
pdf.cell(40,10,'Hello World! Page %d from {nb}' % (i + 1))
|
||||
pdf.set_font('DejaVu','',14)
|
||||
pdf.cell(40,30,'Hello World! unicode {nb}')
|
||||
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic example to test py3k conversion"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=py3k.pdf
|
||||
#PyFPDF-cover-test:hash=ecf5ec7b9a3bb6015b4c9f0546f62e84
|
||||
#PyFPDF-cover-test:python2=no
|
||||
|
||||
import common # test utilities
|
||||
from fpdf import FPDF
|
||||
|
||||
import sys
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 14)
|
||||
pdf.ln(10)
|
||||
if nostamp:
|
||||
data = "TEST-TEST-TEST"
|
||||
else:
|
||||
data = sys.version
|
||||
|
||||
#áéíóúüñ
|
||||
# This string converted with errors in py2.x
|
||||
pdf.write(5, ('hello world %s áéíóúüñ' % data))
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic example to test PyFPDF"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=simple.pdf
|
||||
#PyFPDF-cover-test:hash=1fd821a42cb5029a51727a6107b623ec
|
||||
#PyFPDF-cover-test:pil=yes
|
||||
#PyFPDF-cover-test:res=../tutorial/logo.png
|
||||
#PyFPDF-cover-test:res=flower2.jpg
|
||||
#PyFPDF-cover-test:res=lena.gif
|
||||
|
||||
import common # test utilities
|
||||
from fpdf import FPDF
|
||||
|
||||
import sys
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 14)
|
||||
pdf.ln(10)
|
||||
if nostamp:
|
||||
data = "TEST-TEST-TEST"
|
||||
else:
|
||||
data = sys.version
|
||||
|
||||
pdf.write(5, 'hello world %s' % data)
|
||||
pdf.image("../tutorial/logo.png", 50, 50)
|
||||
pdf.image("flower2.jpg", 100, 50)
|
||||
pdf.image("lena.gif", 50, 75)
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"This is test template"
|
||||
|
||||
# Lines below must not be separated by blank line
|
||||
# output formats PDF (can be auto-opened), TXT
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
# default filename
|
||||
#PyFPDF-cover-test:fn=template.pdf
|
||||
# hash stamp for compare in --check mode (insert your hash)
|
||||
#PyFPDF-cover-test:hash=b1812fffdcf175976e80317b3766a0f0
|
||||
# use 2to3 tool (default - no)
|
||||
#PyFPDF-cover-test:2to3=no
|
||||
# can be used in python2 (default - yes)
|
||||
#PyFPDF-cover-test:python2=yes
|
||||
# can be used in python3 (default - yes)
|
||||
#PyFPDF-cover-test:python3=yes
|
||||
# is PIL required (default - no)
|
||||
#PyFPDF-cover-test:pil=no
|
||||
# only for platform (default all - *)
|
||||
#PyFPDF-cover-test:platform=*
|
||||
#...
|
||||
#...PyFPDF-cover-test:res=some_resource.ttf
|
||||
#...PyFPDF-cover-test:res=other_resource.txt
|
||||
#...
|
||||
|
||||
import common # common set of utilities
|
||||
from fpdf import FPDF
|
||||
|
||||
import sys
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
# filename - output filename
|
||||
# nostamp - do no use stamp in result file
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 16)
|
||||
pdf.write(8, "Test template")
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Basic test of TrueType Unicode font handling"
|
||||
|
||||
#PyFPDF-cover-test:res=font/DejaVuSansCondensed.ttf
|
||||
#PyFPDF-cover-test:res=dejavusanscondensed.cw.dat
|
||||
|
||||
import common
|
||||
from fpdf.ttfonts import TTFontFile
|
||||
|
||||
import os, struct
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
ttf = TTFontFile()
|
||||
ttffile = os.path.join(common.basepath, "font", "DejaVuSansCondensed.ttf");
|
||||
ttf.getMetrics(ttffile)
|
||||
# test basic metrics:
|
||||
assert round(ttf.descent, 0) == -236
|
||||
assert round(ttf.capHeight, 0) == 928
|
||||
assert ttf.flags == 4
|
||||
assert [round(i, 0) for i in ttf.bbox] == [-918, -415, 1513, 1167]
|
||||
assert ttf.italicAngle == 0
|
||||
assert ttf.stemV == 87
|
||||
assert round(ttf.defaultWidth, 0) == 540
|
||||
assert round(ttf.underlinePosition, 0) == -63
|
||||
assert round(ttf.underlineThickness, 0) == 44
|
||||
# test char widths 8(against binary file generated by tfpdf.php):
|
||||
data = open(os.path.join(common.basepath, "dejavusanscondensed.cw.dat"),\
|
||||
"rb").read()
|
||||
char_widths = struct.unpack(">%dH" % int(len(data) / 2), data)
|
||||
assert len(ttf.charWidths) == len(char_widths)
|
||||
diff = []
|
||||
for i, (x, y) in enumerate(zip(char_widths, ttf.charWidths)):
|
||||
if x != y: # compare each char width
|
||||
diff.append(i)
|
||||
assert not diff
|
||||
# for checking assertion works ttf.charWidths[1] = 600
|
||||
assert tuple(ttf.charWidths) == tuple(char_widths)
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Example of unicode support based on tfPDF http://www.fpdf.org/en/script/script92.php"
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=ex.pdf
|
||||
#PyFPDF-cover-test:hash=f77f71491e1662a732212861a2d87928
|
||||
#PyFPDF-cover-test:res=font/DejaVuSansCondensed.ttf
|
||||
#PyFPDF-cover-test:res=HelloWorld.txt
|
||||
|
||||
import common
|
||||
from fpdf import FPDF
|
||||
|
||||
import os
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
pdf = FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
# Add a Unicode font (uses UTF-8)
|
||||
pdf.add_font('DejaVu', '', \
|
||||
os.path.join(common.basepath, "font", 'DejaVuSansCondensed.ttf'), \
|
||||
uni = True)
|
||||
pdf.set_font('DejaVu','',14)
|
||||
|
||||
# Load a UTF-8 string from a file and print it
|
||||
txt = open(os.path.join(common.basepath, "HelloWorld.txt"), "rb").\
|
||||
read().decode("UTF-8")
|
||||
pdf.write(8, txt)
|
||||
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"Example of unicode support winfonts based on tfPDF"
|
||||
# http://www.fpdf.org/en/script/script92.php
|
||||
|
||||
#PyFPDF-cover-test:format=PDF
|
||||
#PyFPDF-cover-test:fn=winfonts.pdf
|
||||
#PyFPDF-cover-test:platform=win32
|
||||
#PyFPDF-cover-test:res=HelloWorld.txt
|
||||
|
||||
# This test can't calc hash because TTF fonts can vary on systems
|
||||
|
||||
import common
|
||||
import fpdf
|
||||
|
||||
import os, time
|
||||
|
||||
def dotest(outputname, nostamp):
|
||||
fpdf.set_global('SYSTEM_TTFONTS', "c:\\WINDOWS\\Fonts")
|
||||
|
||||
pdf = fpdf.FPDF()
|
||||
if nostamp:
|
||||
pdf._putinfo = lambda: common.test_putinfo(pdf)
|
||||
|
||||
pdf.add_page()
|
||||
# Add a Windows System font (uses UTF-8)
|
||||
t0 = time.time()
|
||||
pdf.add_font('sysfont','','arial.ttf',uni=True)
|
||||
pdf.set_font('sysfont','',14)
|
||||
t1 = time.time()
|
||||
if not nostamp:
|
||||
common.log("ttf loading time", t1-t0)
|
||||
|
||||
# Load a UTF-8 string from a file and print it
|
||||
txt = open(os.path.join(common.basepath, "HelloWorld.txt"), "rb").\
|
||||
read().decode("UTF-8")
|
||||
pdf.multi_cell(25, 5, txt)
|
||||
|
||||
pdf.text(100, 5, '1234')
|
||||
|
||||
pdf.write(5,'To find out what\'s new in self tutorial, click ')
|
||||
pdf.set_font('','U')
|
||||
link=pdf.add_link()
|
||||
pdf.write(5,'here',link)
|
||||
|
||||
# Select a standard font (uses windows-1252)
|
||||
pdf.set_font('Arial','',14)
|
||||
pdf.ln(10)
|
||||
pdf.write(5, 'The file size of this PDF is only 12 KB.')
|
||||
|
||||
pdf.output(outputname, 'F')
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.testmain(__file__, dotest)
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
%PDF-1.3
|
||||
3 0 obj
|
||||
<</Type /Page
|
||||
/Parent 1 0 R
|
||||
/Resources 2 0 R
|
||||
/Contents 4 0 R>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<</Filter /FlateDecode /Length 99>>
|
||||
stream
|
||||
xœUÍ1€0Ð�Sü�BKË\7G�½¾�±.�OþŠ…[ÁEUÙ£á™vRçvp‰l '¢»¼ùÀJµ÷ª$–Ñ×l‹køìȳ_[=åµÌníy¢7}&5
|
||||
endstream
|
||||
endobj
|
||||
1 0 obj
|
||||
<</Type /Pages
|
||||
/Kids [3 0 R ]
|
||||
/Count 1
|
||||
/MediaBox [0 0 595.28 841.89]
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
||||
/Font <<
|
||||
>>
|
||||
/XObject <<
|
||||
>>
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Producer (PyFPDF 1.7.1 http://pyfpdf.googlecode.com/)
|
||||
/CreationDate (D:20130308083055)
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Type /Catalog
|
||||
/Pages 1 0 R
|
||||
/OpenAction [3 0 R /FitH null]
|
||||
/PageLayout /OneColumn
|
||||
>>
|
||||
endobj
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000255 00000 n
|
||||
0000000342 00000 n
|
||||
0000000009 00000 n
|
||||
0000000087 00000 n
|
||||
0000000436 00000 n
|
||||
0000000545 00000 n
|
||||
trailer
|
||||
<<
|
||||
/Size 7
|
||||
/Root 6 0 R
|
||||
/Info 5 0 R
|
||||
>>
|
||||
startxref
|
||||
648
|
||||
%%EOF
|
||||
@@ -0,0 +1,21 @@
|
||||
"Tests new dashed line feature (issue 35)"
|
||||
|
||||
from fpdf import FPDF
|
||||
|
||||
import os
|
||||
|
||||
pdf=FPDF()
|
||||
pdf.add_page()
|
||||
|
||||
pdf.dashed_line(10, 10, 110, 10)
|
||||
pdf.dashed_line(10, 20, 110, 20, 5, 5)
|
||||
pdf.dashed_line(10, 30, 110, 30, 1, 10)
|
||||
|
||||
fn = 'dashed_line_issue35.pdf'
|
||||
pdf.output(fn,'F')
|
||||
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,29 @@
|
||||
# Example of unicode support based on tfPDF
|
||||
# http://www.fpdf.org/en/script/script92.php
|
||||
|
||||
from fpdf import FPDF
|
||||
import sys
|
||||
|
||||
pdf = FPDF()
|
||||
pdf.add_page()
|
||||
|
||||
# Add a Unicode font (uses UTF-8)
|
||||
pdf.add_font('DejaVu','','DejaVuSansCondensed.ttf',uni=True)
|
||||
pdf.set_font('DejaVu','',14)
|
||||
fn = 'ex.pdf'
|
||||
|
||||
# Load a UTF-8 string from a file and print it
|
||||
txt = open('HelloWorld.txt').read()
|
||||
pdf.write(8, txt)
|
||||
|
||||
# Select a standard font (uses windows-1252)
|
||||
pdf.set_font('Arial','',14)
|
||||
pdf.ln(10)
|
||||
pdf.write(5, 'The file size of this PDF is only 12 KB.')
|
||||
|
||||
pdf.output(fn,'F')
|
||||
import os
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,99 @@
|
||||
# -*- coding: latin-1 -*-
|
||||
|
||||
"HTML Renderer for FPDF.py"
|
||||
|
||||
__author__ = "Mariano Reingart <reingart@gmail.com>"
|
||||
__copyright__ = "Copyright (C) 2010 Mariano Reingart"
|
||||
__license__ = "LGPL 3.0"
|
||||
|
||||
# Inspired by tuto5.py and several examples from fpdf.org, html2fpdf, etc.
|
||||
|
||||
from fpdf import FPDF, HTMLMixin
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
html="""
|
||||
<H1 align="center">html2fpdf</H1>
|
||||
<h2>Basic usage</h2>
|
||||
<p>You can now easily print text mixing different
|
||||
styles : <B>bold</B>, <I>italic</I>, <U>underlined</U>, or
|
||||
<B><I><U>all at once</U></I></B>!<BR>You can also insert links
|
||||
on text, such as <A HREF="http://www.fpdf.org">www.fpdf.org</A>,
|
||||
or on an image: click on the logo.<br>
|
||||
<center>
|
||||
<A HREF="http://www.fpdf.org"><img src="../tutorial/logo.png" width="104" height="71"></A>
|
||||
</center>
|
||||
<h3>Sample List</h3>
|
||||
<ul><li>option 1</li>
|
||||
<ol><li>option 2</li></ol>
|
||||
<li>option 3</li></ul>
|
||||
|
||||
<table border="0" align="center" width="50%">
|
||||
<thead><tr><th width="30%">Header 1</th><th width="70%">header 2</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>cell 1</td><td>cell 2</td></tr>
|
||||
<tr><td>cell 2</td><td>cell 3</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table border="1">
|
||||
<thead><tr bgcolor="#A0A0A0"><th width="30%">Header 1</th><th width="70%">header 2</th></tr></thead>
|
||||
<tfoot><tr bgcolor="#E0E0E0"><td>footer 1</td><td>footer 2</td></tr></tfoot>
|
||||
<tbody>
|
||||
<tr><td>cell 1</td><td>cell 2</td></tr>
|
||||
<tr>
|
||||
<td width="30%">cell 1</td><td width="70%" bgcolor="#D0D0FF" align='right'>cell 2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody><tr><td colspan="2">cell spanned</td></tr></tbody>
|
||||
<tbody>
|
||||
""" + """<tr bgcolor="#F0F0F0">
|
||||
<td>cell 3</td><td>cell 4</td>
|
||||
</tr><tr bgcolor="#FFFFFF">
|
||||
<td>cell 5</td><td>cell 6</td>
|
||||
</tr>""" * 200 + """
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<font face='helvetica' size='40'>Font example: Arial 40pt</font>
|
||||
|
||||
|
||||
"""
|
||||
|
||||
class MyFPDF(FPDF, HTMLMixin):
|
||||
def header(self):
|
||||
self.image('../tutorial/logo_pb.png',10,8,33)
|
||||
self.set_font('Arial','B',15)
|
||||
self.cell(80)
|
||||
self.cell(30,10,'Title',1,0,'C')
|
||||
self.ln(20)
|
||||
|
||||
def footer(self):
|
||||
self.set_y(-15)
|
||||
self.set_font('Arial','I',8)
|
||||
txt = 'Page %s of %s' % (self.page_no(), self.alias_nb_pages())
|
||||
self.cell(0,10,txt,0,0,'C')
|
||||
|
||||
pdf=MyFPDF()
|
||||
#First page
|
||||
pdf.add_page()
|
||||
pdf.write_html(html)
|
||||
|
||||
# this will fail (tables without widht are not supported):
|
||||
try:
|
||||
pdf.write_html("""<table><tr><td></td></tr></table>""")
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
# this may be rendered incorrectly as currently there is no two pass auto-layout:
|
||||
pdf.write_html("""<table><tr><th></th><td width="100%">100%</td></tr></table>""")
|
||||
|
||||
fn = 'html.pdf'
|
||||
pdf.output(fn,'F')
|
||||
|
||||
import os
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
@@ -0,0 +1,46 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"HTML Renderer for FPDF.py (unicode)"
|
||||
|
||||
__author__ = "Mariano Reingart <reingart@gmail.com>"
|
||||
__copyright__ = "Copyright (C) 2010 Mariano Reingart"
|
||||
__license__ = "LGPL 3.0"
|
||||
|
||||
# Inspired by tuto5.py and several examples from fpdf.org, html2fpdf, etc.
|
||||
|
||||
from fpdf import FPDF, HTMLMixin
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
|
||||
class MyFPDF(FPDF, HTMLMixin): pass
|
||||
|
||||
pdf=MyFPDF()
|
||||
|
||||
# load the unicode font
|
||||
pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
|
||||
|
||||
pdf.add_page()
|
||||
|
||||
# test the basic fonts
|
||||
pdf.write_html("""<p><font face="Arial"><B>hello</B> <I>world</I></font></p>""")
|
||||
pdf.write_html("""<p><font face="Times"><B>hello</B> <I>world</I></font></p>""")
|
||||
pdf.write_html("""<p><font face="Courier"><B>hello</B> <I>world</I></font></p>""")
|
||||
pdf.write_html("""<p><font face="zapfdingbats"><B>hello</B> <I>world</I></font></p>""")
|
||||
|
||||
# test the unicode (utf8) font:
|
||||
|
||||
# greek
|
||||
pdf.write_html(u"""<p><font face="DejaVu">Γειά σου κόσμος</font></p>""")
|
||||
# russian
|
||||
pdf.write_html(u"""<p><font face="DejaVu">Здравствуй, Мир</font></p>""")
|
||||
|
||||
fn = 'html_unicode.pdf'
|
||||
pdf.output(fn,'F')
|
||||
|
||||
import os
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,210 @@
|
||||
'barcode';'BC';20.30;246.80;140.30;254.30;'Interleaved 2of5 NT';0.75;0;0;0;0;0;'I';'200000000001000159053338016581200810081';3
|
||||
'barcode_readable';'T';19.30;253.30;140.30;260.30;'Arial';10.00;0;0;0;0;0;'I';'200000000001000159053338016581200810081';3
|
||||
'box';'B';15.30;15.30;185.30;260.30;'Arial';0.00;0;0;0;0;0;'I';None;0
|
||||
'box_x';'B';95.30;15.30;105.30;25.30;'Arial';0.00;1;0;0;0;0;'I';None;2
|
||||
'company_footer1';'T';115.30;45.30;175.30;50.30;'Arial';10.00;0;0;0;0;0;'I';'Company footer 1';2
|
||||
'company_footer2';'T';115.30;50.30;175.30;55.30;'Arial';10.00;0;0;0;0;0;'I';'Company footer 2';2
|
||||
'company_header1';'T';17.30;40.30;85.30;45.30;'Arial';10.00;0;0;0;0;0;'I';'Company header 1';2
|
||||
'company_header2';'T';17.30;45.30;85.30;50.30;'Arial';10.00;0;0;0;0;0;'I';'Company header 2';2
|
||||
'company_logo';'I';20.30;17.30;55.70;30.30;None;0.00;0;0;0;0;0;'I';'tutorial/logo.png';2
|
||||
'company_name';'T';17.30;32.80;98.30;37.80;'Arial';12.00;1;0;0;0;0;'I';'Company name';2
|
||||
'currency';'T';42.30;90.30;67.30;94.30;'Arial';10.00;0;0;0;0;65535;'I';'U.S.D.';0
|
||||
'currency_l';'T';17.30;90.30;65.30;94.30;'Arial';10.00;0;0;0;0;0;'I';'Currency:';0
|
||||
'customer_address';'T';35.30;64.30;160.30;70.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_address_l';'t';17.30;64.30;35.30;70.30;'Arial';10.00;0;0;0;0;0;'I';'Address:';0
|
||||
'customer_city';'T';133.30;69.30;175.30;75.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_city_l';'T';115.30;69.30;133.30;75.30;'Arial';10.00;0;0;0;0;0;'I';'City:';0
|
||||
'customer_country';'T';133.30;73.30;175.30;79.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_name';'T';35.30;59.30;175.30;65.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_name_l';'T';17.30;59.30;30.30;65.30;'Arial';10.00;0;0;0;0;0;'I';'Bill to:';0
|
||||
'customer_phone';'T';35.30;69.30;115.30;75.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_phone_l';'T';17.30;69.30;35.30;75.30;'Arial';10.00;0;0;0;0;0;'I';'Phone/Fax:';0
|
||||
'customer_taxid';'T';135.30;74.30;175.30;79.30;'Arial';10.00;0;0;0;0;65535;'I';None;0
|
||||
'customer_taxid_l';'T';115.30;74.30;135.30;79.30;'Arial';10.00;0;0;0;0;0;'I';'Tax ID:';0
|
||||
'customer_vat';'T';35.30;74.30;105.30;79.30;'Arial';10.00;0;0;0;0;0;'I';None;0
|
||||
'customer_vat_l';'T';17.30;74.30;32.30;79.30;'Arial';10.00;0;0;0;0;0;'I';'VAT:';0
|
||||
'document_copy';'T';105.30;21.30;140.30;25.30;'Arial';8.00;0;0;0;0;0;'C';'Original';2
|
||||
'document_label';'T';105.30;15.90;180.30;21.10;'Arial Black';13.00;0;0;0;0;0;'C';'INVOICE';2
|
||||
'document_number';'T';115.30;27.80;125.30;33.30;'Arial';14.00;1;0;0;0;0;'I';'N\xba: ';2
|
||||
'document_type';'T';95.30;16.10;105.30;24.30;'Arial';16.00;1;0;0;0;0;'C';'X';2
|
||||
'due_date';'T';65.30;82.30;85.30;86.30;'Arial';10.00;0;0;0;0;65535;'I';'31/12/2009';0
|
||||
'due_date_l';'T';17.30;82.30;65.30;86.30;'Arial';10.00;0;0;0;0;0;'I';'Due Date:';0
|
||||
'issue_date';'T';135.30;33.30;175.30;40.30;'Arial';12.00;0;0;0;0;65535;'I';None;0
|
||||
'issue_date_l';'T';115.30;33.30;175.30;40.30;'Arial';12.00;0;0;0;0;0;'I';'Date:';0
|
||||
'item_amount';'T';160.30;97.30;185.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Amount';0
|
||||
'item_amount01';'T';160.30;103.30;183.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount02';'T';160.30;108.30;183.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount03';'T';160.30;113.30;183.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount04';'T';160.30;118.30;183.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount05';'T';160.30;123.30;183.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount06';'T';160.30;128.30;183.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount07';'T';160.30;133.30;183.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount08';'T';160.30;138.30;183.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount09';'T';160.30;143.30;183.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount10';'T';160.30;148.30;183.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount11';'T';160.30;153.30;183.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount12';'T';160.30;158.30;183.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount13';'T';160.30;163.30;183.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount14';'T';160.30;168.30;183.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount15';'T';160.30;173.30;183.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount16';'T';160.30;178.30;183.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount17';'T';160.30;183.30;183.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount18';'T';160.30;188.30;183.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount19';'T';160.30;193.30;183.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount20';'T';160.30;198.30;183.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount21';'T';160.30;203.30;183.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount22';'T';160.30;208.30;183.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount23';'T';160.30;213.30;183.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount24';'T';160.30;218.30;183.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_amount25';'T';160.30;223.30;183.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_code';'T';30.30;97.30;45.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Cod.';0
|
||||
'item_code01';'T';30.30;103.30;43.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code02';'T';30.30;108.30;43.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code03';'T';30.30;113.30;43.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code04';'T';30.30;118.30;43.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code05';'T';30.30;123.30;43.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code06';'T';30.30;128.30;43.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code07';'T';30.30;133.30;43.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code08';'T';30.30;138.30;43.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code09';'T';30.30;143.30;43.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code10';'T';30.30;148.30;43.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code11';'T';30.30;153.30;43.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code12';'T';30.30;158.30;43.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code13';'T';30.30;163.30;43.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code14';'T';30.30;168.30;43.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code15';'T';30.30;173.30;43.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code16';'T';30.30;178.30;43.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code17';'T';30.30;183.30;43.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code18';'T';30.30;188.30;43.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code19';'T';30.30;193.30;43.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code20';'T';30.30;198.30;43.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code21';'T';30.30;203.30;43.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code22';'T';30.30;208.30;43.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code23';'T';30.30;213.30;43.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code24';'T';30.30;218.30;43.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_code25';'T';30.30;223.30;43.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description';'T';45.30;97.30;140.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Description';0
|
||||
'item_description01';'T';47.30;103.30;138.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description02';'T';47.30;108.30;138.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description03';'T';47.30;113.30;138.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description04';'T';47.30;118.30;138.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description05';'T';47.30;123.30;138.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description06';'T';47.30;128.30;138.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description07';'T';47.30;133.30;138.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description08';'T';47.30;138.30;138.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description09';'T';47.30;143.30;138.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description10';'T';47.30;148.30;138.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description11';'T';47.30;153.30;138.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description12';'T';47.30;158.30;138.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description13';'T';47.30;163.30;138.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description14';'T';47.30;168.30;138.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description15';'T';47.30;173.30;138.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description16';'T';47.30;178.30;138.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description17';'T';47.30;183.30;138.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description18';'T';47.30;188.30;138.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description19';'T';47.30;193.30;138.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description20';'T';47.30;198.30;138.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description21';'T';47.30;203.30;138.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description22';'T';47.30;208.30;138.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description23';'T';47.30;213.30;138.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description24';'T';47.30;218.30;138.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_description25';'T';47.30;223.30;138.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_price';'T';140.30;97.30;160.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Price';0
|
||||
'item_price01';'T';140.30;103.30;158.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price02';'T';140.30;108.30;158.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price03';'T';140.30;113.30;158.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price04';'T';140.30;118.30;158.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price05';'T';140.30;123.30;158.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price06';'T';140.30;128.30;158.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price07';'T';140.30;133.30;158.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price08';'T';140.30;138.30;158.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price09';'T';140.30;143.30;158.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price10';'T';140.30;148.30;158.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price11';'T';140.30;153.30;158.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price12';'T';140.30;158.30;158.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price13';'T';140.30;163.30;158.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price14';'T';140.30;168.30;158.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price15';'T';140.30;173.30;158.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price16';'T';140.30;178.30;158.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price17';'T';140.30;183.30;158.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price18';'T';140.30;188.30;158.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price19';'T';140.30;193.30;158.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price20';'T';140.30;198.30;158.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price21';'T';140.30;203.30;158.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price22';'T';140.30;208.30;158.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price23';'T';140.30;213.30;158.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price24';'T';140.30;218.30;158.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_price25';'T';140.30;223.30;158.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity';'T';15.30;97.30;30.30;102.30;'Arial';10.00;0;0;0;0;65535;'C';'Qty.';0
|
||||
'item_quantity01';'T';15.30;103.30;25.30;108.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity02';'T';15.30;108.30;25.30;113.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity03';'T';15.30;113.30;25.30;118.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity04';'T';15.30;118.30;25.30;123.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity05';'T';15.30;123.30;25.30;128.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity06';'T';15.30;128.30;25.30;133.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity07';'T';15.30;133.30;25.30;138.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity08';'T';15.30;138.30;25.30;143.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity09';'T';15.30;143.30;25.30;148.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity10';'T';15.30;148.30;25.30;153.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity11';'T';15.30;153.30;25.30;158.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity12';'T';15.30;158.30;25.30;163.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity13';'T';15.30;163.30;25.30;168.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity14';'T';15.30;168.30;25.30;173.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity15';'T';15.30;173.30;25.30;178.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity16';'T';15.30;178.30;25.30;183.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity17';'T';15.30;183.30;25.30;188.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity18';'T';15.30;188.30;25.30;193.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity19';'T';15.30;193.30;25.30;198.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity20';'T';15.30;198.30;25.30;203.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity21';'T';15.30;203.30;25.30;208.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity22';'T';15.30;208.30;25.30;213.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity23';'T';15.30;213.30;25.30;218.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity24';'T';15.30;218.30;25.30;223.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_quantity25';'T';15.30;223.30;25.30;228.30;'Arial';10.00;0;0;0;0;65535;'D';'';0
|
||||
'item_unit01';'T';24.30;103.30;30.30;108.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit02';'T';24.30;108.30;30.30;113.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit03';'T';24.30;113.30;30.30;118.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit04';'T';24.30;118.30;30.30;123.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit05';'T';24.30;123.30;30.30;128.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit06';'T';24.30;128.30;30.30;133.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit07';'T';24.30;133.30;30.30;138.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit08';'T';24.30;138.30;30.30;143.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit09';'T';24.30;143.30;30.30;148.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit10';'T';24.30;148.30;30.30;153.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit11';'T';24.30;153.30;30.30;158.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit12';'T';24.30;158.30;30.30;163.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit13';'T';24.30;163.30;30.30;168.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit14';'T';24.30;168.30;30.30;173.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit15';'T';24.30;173.30;30.30;178.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit16';'T';24.30;178.30;30.30;183.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit17';'T';24.30;183.30;30.30;188.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit18';'T';24.30;188.30;30.30;193.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit19';'T';24.30;193.30;30.30;198.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit20';'T';24.30;198.30;30.30;203.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit21';'T';24.30;203.30;30.30;208.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit22';'T';24.30;208.30;30.30;213.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit23';'T';24.30;213.30;30.30;218.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit24';'T';24.30;218.30;30.30;223.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'item_unit25';'T';24.30;223.30;30.30;228.30;'Arial';10.00;0;0;0;0;65535;'I';'';0
|
||||
'line1';'L';100.30;25.30;100.30;57.30;'Arial';0;0;0;0;0;0;'I';None;3
|
||||
'line2';'L';15.30;57.30;185.30;57.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line3';'L';15.30;80.30;185.30;80.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line5';'L';15.30;95.30;185.30;95.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line6';'L';15.30;230.30;185.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line9';'L';15.30;102.30;185.30;102.30;None;0.00;0;0;0;0;0;'I';None;0
|
||||
'line_cod';'L';45.30;95.30;45.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_desc';'L';140.30;95.30;140.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_price';'L';160.30;95.30;160.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'line_qty';'L';30.30;95.30;30.30;230.30;None;0.00;0;0;0;0;0;'I';None;3
|
||||
'net';'T';145.30;234.30;178.30;243.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'net_l';'T';105.30;234.30;150.30;243.30;'Arial';12.00;0;0;0;0;0;'D';'NET:';0
|
||||
'number';'T';125.30;25.80;185.30;35.30;'Arial';14.00;1;0;0;0;0;'I';'0000-00000000';2
|
||||
'page';'T';140.30;21.30;180.30;25.30;'Arial';8.00;0;0;0;0;0;'C';'Page';2
|
||||
'payment';'T';45.30;86.30;150.30;90.30;'Arial';10.00;0;0;0;0;65535;'I';'cash $';0
|
||||
'payment_l';'T';17.30;86.30;45.30;90.30;'Arial';10.00;0;0;0;0;0;'I';'Payment terms:';0
|
||||
'total';'T';105.30;251.30;178.30;260.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'total_box';'B';155.30;252.30;180.30;259.30;None;0.00;0;0;0;0;0;'I';None;0
|
||||
'total_label';'T';125.30;251.30;150.30;260.30;'Arial';12.00;0;0;0;0;0;'D';'Total:';0
|
||||
'vat';'T';145.30;241.30;178.30;250.30;'Arial';12.00;1;0;0;0;65535;'D';None;0
|
||||
'vat';'T';115.30;40.30;175.30;45.30;'Arial';10.00;0;0;0;0;0;'I';'Tax or Vat number';2
|
||||
'vat_l';'T';125.30;241.30;150.30;250.30;'Arial';12.00;0;0;0;0;0;'D';'VAT 21%:';0
|
||||
|
@@ -0,0 +1,120 @@
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
|
||||
"PDF Template Helper for FPDF.py"
|
||||
|
||||
__author__ = "Mariano Reingart <reingart@gmail.com>"
|
||||
__copyright__ = "Copyright (C) 2010 Mariano Reingart"
|
||||
__license__ = "LGPL 3.0"
|
||||
|
||||
import sys, os
|
||||
from fpdf import Template
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# generate sample invoice (according Argentina's regulations)
|
||||
|
||||
import random
|
||||
from decimal import Decimal
|
||||
|
||||
f = Template(format="A4",
|
||||
title="Sample Invoice", author="Sample Company",
|
||||
subject="Sample Customer", keywords="Electronic TAX Invoice")
|
||||
f.parse_csv(infile="invoice.csv", delimiter=";", decimal_sep=",")
|
||||
|
||||
detail = "Lorem ipsum dolor sit amet, consectetur. " * 30
|
||||
items = []
|
||||
for i in range(1, 30):
|
||||
ds = "Sample product %s" % i
|
||||
qty = random.randint(1,10)
|
||||
price = round(random.random()*100,3)
|
||||
code = "%s%s%02d" % (chr(random.randint(65,90)), chr(random.randint(65,90)),i)
|
||||
items.append(dict(code=code, unit='u',
|
||||
qty=qty, price=price,
|
||||
amount=qty*price,
|
||||
ds="%s: %s" % (i,ds)))
|
||||
|
||||
# divide and count lines
|
||||
lines = 0
|
||||
li_items = []
|
||||
for it in items:
|
||||
qty = it['qty']
|
||||
code = it['code']
|
||||
unit = it['unit']
|
||||
for ds in f.split_multicell(it['ds'], 'item_description01'):
|
||||
# add item description line (without price nor amount)
|
||||
li_items.append(dict(code=code, ds=ds, qty=qty, unit=unit, price=None, amount=None))
|
||||
# clean qty and code (show only at first)
|
||||
unit = qty = code = None
|
||||
# set last item line price and amount
|
||||
li_items[-1].update(amount = it['amount'],
|
||||
price = it['price'])
|
||||
|
||||
obs="\n<U>Detail:</U>\n\n" + detail
|
||||
for ds in f.split_multicell(obs, 'item_description01'):
|
||||
li_items.append(dict(code=code, ds=ds, qty=qty, unit=unit, price=None, amount=None))
|
||||
|
||||
# calculate pages:
|
||||
lines = len(li_items)
|
||||
max_lines_per_page = 24
|
||||
pages = int(lines / (max_lines_per_page - 1))
|
||||
if lines % (max_lines_per_page - 1): pages = pages + 1
|
||||
|
||||
# completo campos y hojas
|
||||
for page in range(1, int(pages)+1):
|
||||
f.add_page()
|
||||
f['page'] = 'Page %s of %s' % (page, pages)
|
||||
if pages>1 and page<pages:
|
||||
s = 'Continues on page %s' % (page+1)
|
||||
else:
|
||||
s = ''
|
||||
f['item_description%02d' % (max_lines_per_page+1)] = s
|
||||
|
||||
f["company_name"] = "Sample Company"
|
||||
f["company_logo"] = "../tutorial/logo.png"
|
||||
f["company_header1"] = "Some Address - somewhere -"
|
||||
f["company_header2"] = "http://www.example.com"
|
||||
f["company_footer1"] = "Tax Code ..."
|
||||
f["company_footer2"] = "Tax/VAT ID ..."
|
||||
f['number'] = '0001-00001234'
|
||||
f['issue_date'] = '2010-09-10'
|
||||
f['due_date'] = '2099-09-10'
|
||||
f['customer_name'] = "Sample Client"
|
||||
f['customer_address'] = "Siempreviva 1234"
|
||||
|
||||
# print line item...
|
||||
li = 0
|
||||
k = 0
|
||||
total = Decimal("0.00")
|
||||
for it in li_items:
|
||||
k = k + 1
|
||||
if k > page * (max_lines_per_page - 1):
|
||||
break
|
||||
if it['amount']:
|
||||
total += Decimal("%.6f" % it['amount'])
|
||||
if k > (page - 1) * (max_lines_per_page - 1):
|
||||
li += 1
|
||||
if it['qty'] is not None:
|
||||
f['item_quantity%02d' % li] = it['qty']
|
||||
if it['code'] is not None:
|
||||
f['item_code%02d' % li] = it['code']
|
||||
if it['unit'] is not None:
|
||||
f['item_unit%02d' % li] = it['unit']
|
||||
f['item_description%02d' % li] = it['ds']
|
||||
if it['price'] is not None:
|
||||
f['item_price%02d' % li] = "%0.3f" % it['price']
|
||||
if it['amount'] is not None:
|
||||
f['item_amount%02d' % li] = "%0.2f" % it['amount']
|
||||
|
||||
if pages == page:
|
||||
f['net'] = "%0.2f" % (total/Decimal("1.21"))
|
||||
f['vat'] = "%0.2f" % (total*(1-1/Decimal("1.21")))
|
||||
f['total_label'] = 'Total:'
|
||||
else:
|
||||
f['total_label'] = 'SubTotal:'
|
||||
f['total'] = "%0.2f" % total
|
||||
|
||||
f.render("./invoice.pdf")
|
||||
if sys.platform.startswith("linux"):
|
||||
os.system("evince ./invoice.pdf")
|
||||
else:
|
||||
os.startfile("./invoice.pdf")
|
||||
@@ -0,0 +1,19 @@
|
||||
"Test images flow mode (cell-like, trigger page breaks)"
|
||||
|
||||
from fpdf import FPDF, FPDF_VERSION
|
||||
|
||||
print(FPDF_VERSION)
|
||||
|
||||
pdf=FPDF()
|
||||
pdf.add_page()
|
||||
for i in range(1,41):
|
||||
# for flow mode, do not pass x or y:
|
||||
pdf.image('../tutorial/logo_pb.png')
|
||||
|
||||
fn = 'issue14.pdf'
|
||||
pdf.output(fn,'F')
|
||||
import os
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
@@ -0,0 +1,97 @@
|
||||
"Test issue 33 (Cannot import GIF files that don't have transparency)"
|
||||
|
||||
from fpdf import FPDF, FPDF_VERSION
|
||||
|
||||
import os, tempfile
|
||||
try:
|
||||
import Image
|
||||
except:
|
||||
from PIL import Image
|
||||
|
||||
def genbar():
|
||||
# bg
|
||||
bg = Image.new("L", (112, 1), 1)
|
||||
bg = bg.resize((112, 11))
|
||||
# stripes
|
||||
vbarnum = [0x4F43484B, 0xEE90D642, 0xF11A2735, 0xD71A]
|
||||
vbar = Image.new("L", (112, 1), 1)
|
||||
pix = vbar.load()
|
||||
pos = 0
|
||||
for b in vbarnum:
|
||||
for i in range(32):
|
||||
pix[pos, 0] = 0 if (b & 1) else 1
|
||||
b = b >> 1
|
||||
pos += 1
|
||||
if pos >= 112: break
|
||||
vbar = vbar.resize((112, 31), Image.NEAREST)
|
||||
# digit
|
||||
dignum = [0x398, 0x6dc, 0x61a, 0x31b, 0x1bf, 0x6d8, 0x7d8]
|
||||
dbar = Image.new("L", (16, 7), 1)
|
||||
pix = dbar.load()
|
||||
pos = 0
|
||||
ypos = 0
|
||||
for b in dignum:
|
||||
for i in range(16):
|
||||
pix[pos, ypos] = 0 if (b & 1) else 1
|
||||
b = b >> 1
|
||||
pos += 1
|
||||
ypos += 1
|
||||
pos = 0
|
||||
# result
|
||||
bar = Image.new("L", (114, 44), 2)
|
||||
bar.paste(vbar, (1, 1))
|
||||
bar.paste(bg, (1, 32))
|
||||
for i in range(4):
|
||||
bar.paste(dbar, (35 + i * 12, 34))
|
||||
return bar
|
||||
|
||||
|
||||
plane = genbar()
|
||||
palette = (0,0,0, 255,255,255) + (128,128,128)*254
|
||||
img = Image.fromstring("P", plane.size, plane.tostring())
|
||||
img.putpalette(palette)
|
||||
|
||||
f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
|
||||
gif1 = f.name
|
||||
f.close()
|
||||
f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
|
||||
gif2 = f.name
|
||||
f.close()
|
||||
|
||||
|
||||
img.save(gif1, "GIF")
|
||||
|
||||
img.save(gif2, "GIF", transparency = 1)
|
||||
|
||||
|
||||
pdf=FPDF()
|
||||
pdf.compress = False
|
||||
pdf.add_page()
|
||||
pdf.set_font('Arial', '', 16)
|
||||
pdf.write(8, "Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.image(gif1, x = 15, y = 15)
|
||||
|
||||
pdf.write(8, "Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.write(8, " Transparency")
|
||||
pdf.ln()
|
||||
pdf.image(gif2, x = 15, y = 39)
|
||||
|
||||
fn = 'issue33.pdf'
|
||||
pdf.output(fn,'F')
|
||||
|
||||
|
||||
os.unlink(gif1)
|
||||
os.unlink(gif2)
|
||||
|
||||
try:
|
||||
os.startfile(fn)
|
||||
except:
|
||||
os.system("xdg-open \"%s\"" % fn)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user