This commit is contained in:
Heraud.Antoine 2019-10-25 15:45:30 +02:00
commit c37adc36b4
21 changed files with 2971 additions and 113 deletions

116
config/build.xml Normal file
View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="Tess4J" default="default" basedir=".">
<description>Builds, tests, and runs the project Tess4J.</description>
<import file="nbproject/build-impl.xml"/>
<property name="version" value="3.4.8"/>
<target name="-pre-compile">
<copy todir="${build.classes.dir}">
<fileset dir="lib" includes="win32-x86/**,win32-x86-64/**" />
</copy>
</target>
<target name="-post-jar">
<move todir="./">
<fileset dir="${dist.dir}" includes="${ant.project.name}.jar" />
</move>
<delete dir="${dist.dir}/lib"/>
</target>
<target name="-post-clean">
<delete file="${ant.project.name}.jar"/>
<delete>
<fileset dir="${test.src.dir}/test-results" includes="**"/>
</delete>
</target>
<target name="dist" depends="clean,jar"
description="create binary and source distribution archives">
<mkdir dir="${dist.dir}"/>
<zip zipfile="${dist.dir}/${ant.project.name}-${version}-src.zip">
<zipfileset dir="." prefix="${ant.project.name}">
<exclude name="**/.*"/>
<!--<exclude name="${dist.dir}/**"/>-->
<exclude name="${build.dir}/**"/>
<exclude name="doc/**"/>
<!--<exclude name="${ant.project.name}.jar"/>-->
<exclude name="native/**"/>
</zipfileset>
</zip>
<!--
<zip zipfile="${dist.dir}/${ant.project.name}-${version}.zip">
<zipfileset dir="." includes="*,lib/**,tessdata/**,${dist.jar}" prefix="${ant.project.name}"
excludes="build.xml,src,build,dist,doc,test,nbproject,native,eurotext.*">
<exclude name="*.mf"/>
</zipfileset>
</zip>
-->
<delete dir="${dist.dir}/lib"/>
</target>
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar-with-manifest: JAR building (if you are using a manifest)
-do-jar-without-manifest: JAR building (if you are not using a manifest)
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="Tess4J-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>

1
config/config.txt Normal file
View File

@ -0,0 +1 @@
Code : 8

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
build.xml.data.CRC32=1dc6a699
build.xml.script.CRC32=f0eaf91d
build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=1f03e186
nbproject/build-impl.xml.script.CRC32=a52f4060
nbproject/build-impl.xml.stylesheet.CRC32=3a2fa800@1.88.0.48

View File

@ -0,0 +1,8 @@
compile.on.save=true
do.depend=true
do.jar=true
do.jlink=false
javac.debug=false
javadoc.preview=true
jlink.strip=false
user.properties.file=C:\\Users\\Quan\\AppData\\Roaming\\NetBeans\\dev\\build.properties

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group/>
</open-files>
</project-private>

View File

@ -0,0 +1,138 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.processors.list=
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.desc=A Java wrapper for Tesseract OCR API
application.homepage=http://tess4j.sf.net
application.title=Tess4J
application.vendor=Quan Nguyen
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
build.dir=build
build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.modulepath=\
${run.modulepath}
debug.test.classpath=\
${run.test.classpath}
debug.test.modulepath=\
${run.test.modulepath}
# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/tess4j-${version}.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.commons-beanutils-1.9.2.jar=lib/commons-beanutils-1.9.2.jar
file.reference.commons-io-2.6.jar=lib/commons-io-2.6.jar
file.reference.commons-logging-1.2.jar=lib/commons-logging-1.2.jar
file.reference.fontbox-2.0.9.jar=lib/fontbox-2.0.9.jar
file.reference.ghost4j-1.0.1.jar=lib/ghost4j-1.0.1.jar
file.reference.itext-2.1.7.jar=lib/itext-2.1.7.jar
file.reference.jai-imageio-core-1.4.0.jar=lib/jai-imageio-core-1.4.0.jar
file.reference.jbig2-imageio-3.0.0.jar=lib/jbig2-imageio-3.0.0.jar
file.reference.jboss-vfs-3.2.12.Final.jar=lib/jboss-vfs-3.2.12.Final.jar
file.reference.jna-4.1.0.jar=lib/jna-4.1.0.jar
file.reference.jul-to-slf4j-1.7.25.jar=lib/jul-to-slf4j-1.7.25.jar
file.reference.lept4j-1.6.4.jar=lib/lept4j-1.6.4.jar
file.reference.log4j-1.2.17.jar=lib/log4j-1.2.17.jar
file.reference.logback-classic-1.2.3.jar=lib/logback-classic-1.2.3.jar
file.reference.logback-core-1.2.3.jar=lib/logback-core-1.2.3.jar
file.reference.pdfbox-2.0.9.jar=lib/pdfbox-2.0.9.jar
file.reference.pdfbox-tools-2.0.9.jar=lib/pdfbox-tools-2.0.9.jar
file.reference.slf4j-api-1.7.25.jar=lib/slf4j-api-1.7.25.jar
includes=**
jar.archive.disabled=${jnlp.enabled}
jar.compress=false
jar.index=${jnlp.enabled}
javac.classpath=\
${file.reference.ghost4j-1.0.1.jar}:\
${file.reference.jna-4.1.0.jar}:\
${file.reference.log4j-1.2.17.jar}:\
${file.reference.itext-2.1.7.jar}:\
${file.reference.commons-beanutils-1.9.2.jar}:\
${file.reference.commons-logging-1.2.jar}:\
${file.reference.slf4j-api-1.7.25.jar}:\
${file.reference.jul-to-slf4j-1.7.25.jar}:\
${file.reference.commons-io-2.6.jar}:\
${file.reference.jboss-vfs-3.2.12.Final.jar}:\
${file.reference.logback-classic-1.2.3.jar}:\
${file.reference.logback-core-1.2.3.jar}:\
${file.reference.jai-imageio-core-1.4.0.jar}:\
${file.reference.lept4j-1.6.4.jar}:\
${file.reference.pdfbox-2.0.9.jar}:\
${file.reference.pdfbox-tools-2.0.9.jar}:\
${file.reference.fontbox-2.0.9.jar}:\
${file.reference.jbig2-imageio-3.0.0.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=true
javac.external.vm=false
javac.modulepath=
javac.processormodulepath=
javac.processorpath=\
${javac.classpath}
javac.source=1.7
javac.target=1.7
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}:\
${libs.junit_4.classpath}:\
${libs.hamcrest.classpath}
javac.test.modulepath=\
${javac.modulepath}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.html5=false
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=Tess4J API
jlink.launcher=false
jlink.launcher.name=Tess4J
jnlp.codebase.type=no.codebase
jnlp.descriptor=application
jnlp.enabled=false
jnlp.mixed.code=default
jnlp.offline-allowed=false
jnlp.signed=false
jnlp.signing=
jnlp.signing.alias=
jnlp.signing.keystore=
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false
platform.active=default_platform
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
# Space-separated list of JVM arguments used when running the project
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
# or test-sys-prop.name=value to set system properties for unit tests):
run.jvmargs=
run.modulepath=\
${javac.modulepath}
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
run.test.modulepath=\
${javac.test.modulepath}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>Tess4J</name>
<source-roots>
<root id="src.dir"/>
</source-roots>
<test-roots>
<root id="test.src.dir"/>
</test-roots>
</data>
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
<definitions>.\lib\nblibraries.properties</definitions>
</libraries>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
</configuration>
</project>

View File

@ -0,0 +1 @@
tessedit_zero_rejection T

View File

@ -0,0 +1 @@
tessedit_char_whitelist 0123456789-.

View File

@ -0,0 +1 @@
tessedit_create_hocr 1

Binary file not shown.

Binary file not shown.

BIN
config/tessdata/pdf.ttf Normal file

Binary file not shown.

793
config/tessdata/pdf.ttx Normal file
View File

@ -0,0 +1,793 @@
<?xml version="1.0" encoding="utf-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.4">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="glyph00001"/>
<GlyphID id="2" name="glyph00002"/>
<GlyphID id="3" name="glyph00003"/>
<GlyphID id="4" name="glyph00004"/>
<GlyphID id="5" name="glyph00005"/>
<GlyphID id="6" name="glyph00006"/>
<GlyphID id="7" name="glyph00007"/>
<GlyphID id="8" name="glyph00008"/>
<GlyphID id="9" name="glyph00009"/>
<GlyphID id="10" name="glyph00010"/>
<GlyphID id="11" name="glyph00011"/>
<GlyphID id="12" name="glyph00012"/>
<GlyphID id="13" name="glyph00013"/>
<GlyphID id="14" name="glyph00014"/>
<GlyphID id="15" name="glyph00015"/>
<GlyphID id="16" name="glyph00016"/>
<GlyphID id="17" name="glyph00017"/>
<GlyphID id="18" name="glyph00018"/>
<GlyphID id="19" name="glyph00019"/>
<GlyphID id="20" name="glyph00020"/>
<GlyphID id="21" name="glyph00021"/>
<GlyphID id="22" name="glyph00022"/>
<GlyphID id="23" name="glyph00023"/>
<GlyphID id="24" name="glyph00024"/>
<GlyphID id="25" name="glyph00025"/>
<GlyphID id="26" name="glyph00026"/>
<GlyphID id="27" name="glyph00027"/>
<GlyphID id="28" name="glyph00028"/>
<GlyphID id="29" name="glyph00029"/>
<GlyphID id="30" name="glyph00030"/>
<GlyphID id="31" name="glyph00031"/>
<GlyphID id="32" name="glyph00032"/>
<GlyphID id="33" name="glyph00033"/>
<GlyphID id="34" name="glyph00034"/>
<GlyphID id="35" name="glyph00035"/>
<GlyphID id="36" name="glyph00036"/>
<GlyphID id="37" name="glyph00037"/>
<GlyphID id="38" name="glyph00038"/>
<GlyphID id="39" name="glyph00039"/>
<GlyphID id="40" name="glyph00040"/>
<GlyphID id="41" name="glyph00041"/>
<GlyphID id="42" name="glyph00042"/>
<GlyphID id="43" name="glyph00043"/>
<GlyphID id="44" name="glyph00044"/>
<GlyphID id="45" name="glyph00045"/>
<GlyphID id="46" name="glyph00046"/>
<GlyphID id="47" name="glyph00047"/>
<GlyphID id="48" name="glyph00048"/>
<GlyphID id="49" name="glyph00049"/>
<GlyphID id="50" name="glyph00050"/>
<GlyphID id="51" name="glyph00051"/>
<GlyphID id="52" name="glyph00052"/>
<GlyphID id="53" name="glyph00053"/>
<GlyphID id="54" name="glyph00054"/>
<GlyphID id="55" name="glyph00055"/>
<GlyphID id="56" name="glyph00056"/>
<GlyphID id="57" name="glyph00057"/>
<GlyphID id="58" name="glyph00058"/>
<GlyphID id="59" name="glyph00059"/>
<GlyphID id="60" name="glyph00060"/>
<GlyphID id="61" name="glyph00061"/>
<GlyphID id="62" name="glyph00062"/>
<GlyphID id="63" name="glyph00063"/>
<GlyphID id="64" name="glyph00064"/>
<GlyphID id="65" name="glyph00065"/>
<GlyphID id="66" name="glyph00066"/>
<GlyphID id="67" name="glyph00067"/>
<GlyphID id="68" name="glyph00068"/>
<GlyphID id="69" name="glyph00069"/>
<GlyphID id="70" name="glyph00070"/>
<GlyphID id="71" name="glyph00071"/>
<GlyphID id="72" name="glyph00072"/>
<GlyphID id="73" name="glyph00073"/>
<GlyphID id="74" name="glyph00074"/>
<GlyphID id="75" name="glyph00075"/>
<GlyphID id="76" name="glyph00076"/>
<GlyphID id="77" name="glyph00077"/>
<GlyphID id="78" name="glyph00078"/>
<GlyphID id="79" name="glyph00079"/>
<GlyphID id="80" name="glyph00080"/>
<GlyphID id="81" name="glyph00081"/>
<GlyphID id="82" name="glyph00082"/>
<GlyphID id="83" name="glyph00083"/>
<GlyphID id="84" name="glyph00084"/>
<GlyphID id="85" name="glyph00085"/>
<GlyphID id="86" name="glyph00086"/>
<GlyphID id="87" name="glyph00087"/>
<GlyphID id="88" name="glyph00088"/>
<GlyphID id="89" name="glyph00089"/>
<GlyphID id="90" name="glyph00090"/>
<GlyphID id="91" name="glyph00091"/>
<GlyphID id="92" name="glyph00092"/>
<GlyphID id="93" name="glyph00093"/>
<GlyphID id="94" name="glyph00094"/>
<GlyphID id="95" name="glyph00095"/>
<GlyphID id="96" name="glyph00096"/>
<GlyphID id="97" name="glyph00097"/>
<GlyphID id="98" name="glyph00098"/>
<GlyphID id="99" name="glyph00099"/>
<GlyphID id="100" name="glyph00100"/>
<GlyphID id="101" name="glyph00101"/>
<GlyphID id="102" name="glyph00102"/>
<GlyphID id="103" name="glyph00103"/>
<GlyphID id="104" name="glyph00104"/>
<GlyphID id="105" name="glyph00105"/>
<GlyphID id="106" name="glyph00106"/>
<GlyphID id="107" name="glyph00107"/>
<GlyphID id="108" name="glyph00108"/>
<GlyphID id="109" name="glyph00109"/>
<GlyphID id="110" name="glyph00110"/>
<GlyphID id="111" name="glyph00111"/>
<GlyphID id="112" name="glyph00112"/>
<GlyphID id="113" name="glyph00113"/>
<GlyphID id="114" name="glyph00114"/>
<GlyphID id="115" name="glyph00115"/>
<GlyphID id="116" name="glyph00116"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="2.31999206543"/>
<checkSumAdjustment value="0xd4fdc458"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00011111"/>
<unitsPerEm value="2048"/>
<created value="Fri Sep 10 06:45:17 2010"/>
<modified value="Fri Sep 10 06:45:17 2010"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="8"/>
<fontDirectionHint value="0"/>
<indexToLocFormat value="1"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="1.0"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="0"/>
<advanceWidthMax value="3554"/>
<minLeftSideBearing value="-2090"/>
<minRightSideBearing value="-1455"/>
<xMaxExtent value="3442"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="117"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="117"/>
<maxPoints value="852"/>
<maxContours value="43"/>
<maxCompositePoints value="104"/>
<maxCompositeContours value="12"/>
<maxZones value="2"/>
<maxTwilightPoints value="16"/>
<maxStorage value="153"/>
<maxFunctionDefs value="8"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="1045"/>
<maxSizeOfInstructions value="534"/>
<maxComponentElements value="8"/>
<maxComponentDepth value="4"/>
</maxp>
<hmtx>
<mtx name=".notdef" width="1000" lsb="0"/>
<mtx name="glyph00001" width="1000" lsb="0"/>
<mtx name="glyph00002" width="1000" lsb="0"/>
<mtx name="glyph00003" width="1000" lsb="0"/>
<mtx name="glyph00004" width="1000" lsb="0"/>
<mtx name="glyph00005" width="1000" lsb="0"/>
<mtx name="glyph00006" width="1000" lsb="0"/>
<mtx name="glyph00007" width="1000" lsb="0"/>
<mtx name="glyph00008" width="1000" lsb="0"/>
<mtx name="glyph00009" width="1000" lsb="0"/>
<mtx name="glyph00010" width="1000" lsb="0"/>
<mtx name="glyph00011" width="1000" lsb="0"/>
<mtx name="glyph00012" width="1000" lsb="0"/>
<mtx name="glyph00013" width="1000" lsb="0"/>
<mtx name="glyph00014" width="1000" lsb="0"/>
<mtx name="glyph00015" width="1000" lsb="0"/>
<mtx name="glyph00016" width="1000" lsb="0"/>
<mtx name="glyph00017" width="1000" lsb="0"/>
<mtx name="glyph00018" width="1000" lsb="0"/>
<mtx name="glyph00019" width="1000" lsb="0"/>
<mtx name="glyph00020" width="1000" lsb="0"/>
<mtx name="glyph00021" width="1000" lsb="0"/>
<mtx name="glyph00022" width="1000" lsb="0"/>
<mtx name="glyph00023" width="1000" lsb="0"/>
<mtx name="glyph00024" width="1000" lsb="0"/>
<mtx name="glyph00025" width="1000" lsb="0"/>
<mtx name="glyph00026" width="1000" lsb="0"/>
<mtx name="glyph00027" width="1000" lsb="0"/>
<mtx name="glyph00028" width="1000" lsb="0"/>
<mtx name="glyph00029" width="1000" lsb="0"/>
<mtx name="glyph00030" width="1000" lsb="0"/>
<mtx name="glyph00031" width="1000" lsb="0"/>
<mtx name="glyph00032" width="1000" lsb="0"/>
<mtx name="glyph00033" width="1000" lsb="0"/>
<mtx name="glyph00034" width="1000" lsb="0"/>
<mtx name="glyph00035" width="1000" lsb="0"/>
<mtx name="glyph00036" width="1000" lsb="0"/>
<mtx name="glyph00037" width="1000" lsb="0"/>
<mtx name="glyph00038" width="1000" lsb="0"/>
<mtx name="glyph00039" width="1000" lsb="0"/>
<mtx name="glyph00040" width="1000" lsb="0"/>
<mtx name="glyph00041" width="1000" lsb="0"/>
<mtx name="glyph00042" width="1000" lsb="0"/>
<mtx name="glyph00043" width="1000" lsb="0"/>
<mtx name="glyph00044" width="1000" lsb="0"/>
<mtx name="glyph00045" width="1000" lsb="0"/>
<mtx name="glyph00046" width="1000" lsb="0"/>
<mtx name="glyph00047" width="1000" lsb="0"/>
<mtx name="glyph00048" width="1000" lsb="0"/>
<mtx name="glyph00049" width="1000" lsb="0"/>
<mtx name="glyph00050" width="1000" lsb="0"/>
<mtx name="glyph00051" width="1000" lsb="0"/>
<mtx name="glyph00052" width="1000" lsb="0"/>
<mtx name="glyph00053" width="1000" lsb="0"/>
<mtx name="glyph00054" width="1000" lsb="0"/>
<mtx name="glyph00055" width="1000" lsb="0"/>
<mtx name="glyph00056" width="1000" lsb="0"/>
<mtx name="glyph00057" width="1000" lsb="0"/>
<mtx name="glyph00058" width="1000" lsb="0"/>
<mtx name="glyph00059" width="1000" lsb="0"/>
<mtx name="glyph00060" width="1000" lsb="0"/>
<mtx name="glyph00061" width="1000" lsb="0"/>
<mtx name="glyph00062" width="1000" lsb="0"/>
<mtx name="glyph00063" width="1000" lsb="0"/>
<mtx name="glyph00064" width="1000" lsb="0"/>
<mtx name="glyph00065" width="1000" lsb="0"/>
<mtx name="glyph00066" width="1000" lsb="0"/>
<mtx name="glyph00067" width="1000" lsb="0"/>
<mtx name="glyph00068" width="1000" lsb="0"/>
<mtx name="glyph00069" width="1000" lsb="0"/>
<mtx name="glyph00070" width="1000" lsb="0"/>
<mtx name="glyph00071" width="1000" lsb="0"/>
<mtx name="glyph00072" width="1000" lsb="0"/>
<mtx name="glyph00073" width="1000" lsb="0"/>
<mtx name="glyph00074" width="1000" lsb="0"/>
<mtx name="glyph00075" width="1000" lsb="0"/>
<mtx name="glyph00076" width="1000" lsb="0"/>
<mtx name="glyph00077" width="1000" lsb="0"/>
<mtx name="glyph00078" width="1000" lsb="0"/>
<mtx name="glyph00079" width="1000" lsb="0"/>
<mtx name="glyph00080" width="1000" lsb="0"/>
<mtx name="glyph00081" width="1000" lsb="0"/>
<mtx name="glyph00082" width="1000" lsb="0"/>
<mtx name="glyph00083" width="1000" lsb="0"/>
<mtx name="glyph00084" width="1000" lsb="0"/>
<mtx name="glyph00085" width="1000" lsb="0"/>
<mtx name="glyph00086" width="1000" lsb="0"/>
<mtx name="glyph00087" width="1000" lsb="0"/>
<mtx name="glyph00088" width="1000" lsb="0"/>
<mtx name="glyph00089" width="1000" lsb="0"/>
<mtx name="glyph00090" width="1000" lsb="0"/>
<mtx name="glyph00091" width="1000" lsb="0"/>
<mtx name="glyph00092" width="1000" lsb="0"/>
<mtx name="glyph00093" width="1000" lsb="0"/>
<mtx name="glyph00094" width="1000" lsb="0"/>
<mtx name="glyph00095" width="1000" lsb="0"/>
<mtx name="glyph00096" width="1000" lsb="0"/>
<mtx name="glyph00097" width="1000" lsb="0"/>
<mtx name="glyph00098" width="1000" lsb="0"/>
<mtx name="glyph00099" width="1000" lsb="0"/>
<mtx name="glyph00100" width="1000" lsb="0"/>
<mtx name="glyph00101" width="1000" lsb="0"/>
<mtx name="glyph00102" width="1000" lsb="0"/>
<mtx name="glyph00103" width="1000" lsb="0"/>
<mtx name="glyph00104" width="1000" lsb="0"/>
<mtx name="glyph00105" width="1000" lsb="0"/>
<mtx name="glyph00106" width="1000" lsb="0"/>
<mtx name="glyph00107" width="1000" lsb="0"/>
<mtx name="glyph00108" width="1000" lsb="0"/>
<mtx name="glyph00109" width="1000" lsb="0"/>
<mtx name="glyph00110" width="1000" lsb="0"/>
<mtx name="glyph00111" width="1000" lsb="0"/>
<mtx name="glyph00112" width="1000" lsb="0"/>
<mtx name="glyph00113" width="1000" lsb="0"/>
<mtx name="glyph00114" width="1000" lsb="0"/>
<mtx name="glyph00115" width="1000" lsb="0"/>
<mtx name="glyph00116" width="1000" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="3" platEncID="0" language="0">
<map code="0xf000" name=".notdef"/>
<map code="0xf001" name="glyph00001"/>
<map code="0xf002" name="glyph00002"/>
<map code="0xf003" name="glyph00003"/>
<map code="0xf004" name="glyph00004"/>
<map code="0xf005" name="glyph00005"/>
<map code="0xf006" name="glyph00006"/>
<map code="0xf007" name="glyph00007"/>
<map code="0xf008" name="glyph00008"/>
<map code="0xf009" name="glyph00009"/>
<map code="0xf00a" name="glyph00010"/>
<map code="0xf00b" name="glyph00011"/>
<map code="0xf00c" name="glyph00012"/>
<map code="0xf00d" name="glyph00013"/>
<map code="0xf00e" name="glyph00014"/>
<map code="0xf00f" name="glyph00015"/>
<map code="0xf010" name="glyph00016"/>
<map code="0xf011" name="glyph00017"/>
<map code="0xf012" name="glyph00018"/>
<map code="0xf013" name="glyph00019"/>
<map code="0xf014" name="glyph00020"/>
<map code="0xf015" name="glyph00021"/>
<map code="0xf016" name="glyph00022"/>
<map code="0xf017" name="glyph00023"/>
<map code="0xf018" name="glyph00024"/>
<map code="0xf019" name="glyph00025"/>
<map code="0xf01a" name="glyph00026"/>
<map code="0xf01b" name="glyph00027"/>
<map code="0xf01c" name="glyph00028"/>
<map code="0xf01d" name="glyph00029"/>
<map code="0xf01e" name="glyph00030"/>
<map code="0xf01f" name="glyph00031"/>
<map code="0xf020" name="glyph00032"/>
<map code="0xf021" name="glyph00033"/>
<map code="0xf022" name="glyph00034"/>
<map code="0xf023" name="glyph00035"/>
<map code="0xf024" name="glyph00036"/>
<map code="0xf025" name="glyph00037"/>
<map code="0xf026" name="glyph00038"/>
<map code="0xf027" name="glyph00039"/>
<map code="0xf028" name="glyph00040"/>
<map code="0xf029" name="glyph00041"/>
<map code="0xf02a" name="glyph00042"/>
<map code="0xf02b" name="glyph00043"/>
<map code="0xf02c" name="glyph00044"/>
<map code="0xf02d" name="glyph00045"/>
<map code="0xf02e" name="glyph00046"/>
<map code="0xf02f" name="glyph00047"/>
<map code="0xf030" name="glyph00048"/>
<map code="0xf031" name="glyph00049"/>
<map code="0xf032" name="glyph00050"/>
<map code="0xf033" name="glyph00051"/>
<map code="0xf034" name="glyph00052"/>
<map code="0xf035" name="glyph00053"/>
<map code="0xf036" name="glyph00054"/>
<map code="0xf037" name="glyph00055"/>
<map code="0xf038" name="glyph00056"/>
<map code="0xf039" name="glyph00057"/>
<map code="0xf03a" name="glyph00058"/>
<map code="0xf03b" name="glyph00059"/>
<map code="0xf03c" name="glyph00060"/>
<map code="0xf03d" name="glyph00061"/>
<map code="0xf03e" name="glyph00062"/>
<map code="0xf03f" name="glyph00063"/>
<map code="0xf040" name="glyph00064"/>
<map code="0xf041" name="glyph00065"/>
<map code="0xf042" name="glyph00066"/>
<map code="0xf043" name="glyph00067"/>
<map code="0xf044" name="glyph00068"/>
<map code="0xf045" name="glyph00069"/>
<map code="0xf046" name="glyph00070"/>
<map code="0xf047" name="glyph00071"/>
<map code="0xf048" name="glyph00072"/>
<map code="0xf049" name="glyph00073"/>
<map code="0xf04a" name="glyph00074"/>
<map code="0xf04b" name="glyph00075"/>
<map code="0xf04c" name="glyph00076"/>
<map code="0xf04d" name="glyph00077"/>
<map code="0xf04e" name="glyph00078"/>
<map code="0xf04f" name="glyph00079"/>
<map code="0xf050" name="glyph00080"/>
<map code="0xf051" name="glyph00081"/>
<map code="0xf052" name="glyph00082"/>
<map code="0xf053" name="glyph00083"/>
<map code="0xf054" name="glyph00084"/>
<map code="0xf055" name="glyph00085"/>
<map code="0xf056" name="glyph00086"/>
<map code="0xf057" name="glyph00087"/>
<map code="0xf058" name="glyph00088"/>
<map code="0xf059" name="glyph00089"/>
<map code="0xf05a" name="glyph00090"/>
<map code="0xf05b" name="glyph00091"/>
<map code="0xf05c" name="glyph00092"/>
<map code="0xf05d" name="glyph00093"/>
<map code="0xf05e" name="glyph00094"/>
<map code="0xf05f" name="glyph00095"/>
<map code="0xf060" name="glyph00096"/>
<map code="0xf061" name="glyph00097"/>
<map code="0xf062" name="glyph00098"/>
<map code="0xf063" name="glyph00099"/>
<map code="0xf064" name="glyph00100"/>
<map code="0xf065" name="glyph00101"/>
<map code="0xf066" name="glyph00102"/>
<map code="0xf067" name="glyph00103"/>
<map code="0xf068" name="glyph00104"/>
<map code="0xf069" name="glyph00105"/>
<map code="0xf06a" name="glyph00106"/>
<map code="0xf06b" name="glyph00107"/>
<map code="0xf06c" name="glyph00108"/>
<map code="0xf06d" name="glyph00109"/>
<map code="0xf06e" name="glyph00110"/>
<map code="0xf06f" name="glyph00111"/>
<map code="0xf070" name="glyph00112"/>
<map code="0xf071" name="glyph00113"/>
<map code="0xf072" name="glyph00114"/>
<map code="0xf073" name="glyph00115"/>
<map code="0xf074" name="glyph00116"/>
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x0" name=".notdef"/>
<map code="0x1" name="glyph00001"/>
<map code="0x2" name="glyph00002"/>
<map code="0x3" name="glyph00003"/>
<map code="0x4" name="glyph00004"/>
<map code="0x5" name="glyph00005"/>
<map code="0x6" name="glyph00006"/>
<map code="0x7" name="glyph00007"/>
<map code="0x8" name="glyph00008"/>
<map code="0x9" name="glyph00009"/>
<map code="0xa" name="glyph00010"/>
<map code="0xb" name="glyph00011"/>
<map code="0xc" name="glyph00012"/>
<map code="0xd" name="glyph00013"/>
<map code="0xe" name="glyph00014"/>
<map code="0xf" name="glyph00015"/>
<map code="0x10" name="glyph00016"/>
<map code="0x11" name="glyph00017"/>
<map code="0x12" name="glyph00018"/>
<map code="0x13" name="glyph00019"/>
<map code="0x14" name="glyph00020"/>
<map code="0x15" name="glyph00021"/>
<map code="0x16" name="glyph00022"/>
<map code="0x17" name="glyph00023"/>
<map code="0x18" name="glyph00024"/>
<map code="0x19" name="glyph00025"/>
<map code="0x1a" name="glyph00026"/>
<map code="0x1b" name="glyph00027"/>
<map code="0x1c" name="glyph00028"/>
<map code="0x1d" name="glyph00029"/>
<map code="0x1e" name="glyph00030"/>
<map code="0x1f" name="glyph00031"/>
<map code="0x20" name="glyph00032"/>
<map code="0x21" name="glyph00033"/>
<map code="0x22" name="glyph00034"/>
<map code="0x23" name="glyph00035"/>
<map code="0x24" name="glyph00036"/>
<map code="0x25" name="glyph00037"/>
<map code="0x26" name="glyph00038"/>
<map code="0x27" name="glyph00039"/>
<map code="0x28" name="glyph00040"/>
<map code="0x29" name="glyph00041"/>
<map code="0x2a" name="glyph00042"/>
<map code="0x2b" name="glyph00043"/>
<map code="0x2c" name="glyph00044"/>
<map code="0x2d" name="glyph00045"/>
<map code="0x2e" name="glyph00046"/>
<map code="0x2f" name="glyph00047"/>
<map code="0x30" name="glyph00048"/>
<map code="0x31" name="glyph00049"/>
<map code="0x32" name="glyph00050"/>
<map code="0x33" name="glyph00051"/>
<map code="0x34" name="glyph00052"/>
<map code="0x35" name="glyph00053"/>
<map code="0x36" name="glyph00054"/>
<map code="0x37" name="glyph00055"/>
<map code="0x38" name="glyph00056"/>
<map code="0x39" name="glyph00057"/>
<map code="0x3a" name="glyph00058"/>
<map code="0x3b" name="glyph00059"/>
<map code="0x3c" name="glyph00060"/>
<map code="0x3d" name="glyph00061"/>
<map code="0x3e" name="glyph00062"/>
<map code="0x3f" name="glyph00063"/>
<map code="0x40" name="glyph00064"/>
<map code="0x41" name="glyph00065"/>
<map code="0x42" name="glyph00066"/>
<map code="0x43" name="glyph00067"/>
<map code="0x44" name="glyph00068"/>
<map code="0x45" name="glyph00069"/>
<map code="0x46" name="glyph00070"/>
<map code="0x47" name="glyph00071"/>
<map code="0x48" name="glyph00072"/>
<map code="0x49" name="glyph00073"/>
<map code="0x4a" name="glyph00074"/>
<map code="0x4b" name="glyph00075"/>
<map code="0x4c" name="glyph00076"/>
<map code="0x4d" name="glyph00077"/>
<map code="0x4e" name="glyph00078"/>
<map code="0x4f" name="glyph00079"/>
<map code="0x50" name="glyph00080"/>
<map code="0x51" name="glyph00081"/>
<map code="0x52" name="glyph00082"/>
<map code="0x53" name="glyph00083"/>
<map code="0x54" name="glyph00084"/>
<map code="0x55" name="glyph00085"/>
<map code="0x56" name="glyph00086"/>
<map code="0x57" name="glyph00087"/>
<map code="0x58" name="glyph00088"/>
<map code="0x59" name="glyph00089"/>
<map code="0x5a" name="glyph00090"/>
<map code="0x5b" name="glyph00091"/>
<map code="0x5c" name="glyph00092"/>
<map code="0x5d" name="glyph00093"/>
<map code="0x5e" name="glyph00094"/>
<map code="0x5f" name="glyph00095"/>
<map code="0x60" name="glyph00096"/>
<map code="0x61" name="glyph00097"/>
<map code="0x62" name="glyph00098"/>
<map code="0x63" name="glyph00099"/>
<map code="0x64" name="glyph00100"/>
<map code="0x65" name="glyph00101"/>
<map code="0x66" name="glyph00102"/>
<map code="0x67" name="glyph00103"/>
<map code="0x68" name="glyph00104"/>
<map code="0x69" name="glyph00105"/>
<map code="0x6a" name="glyph00106"/>
<map code="0x6b" name="glyph00107"/>
<map code="0x6c" name="glyph00108"/>
<map code="0x6d" name="glyph00109"/>
<map code="0x6e" name="glyph00110"/>
<map code="0x6f" name="glyph00111"/>
<map code="0x70" name="glyph00112"/>
<map code="0x71" name="glyph00113"/>
<map code="0x72" name="glyph00114"/>
<map code="0x73" name="glyph00115"/>
<map code="0x74" name="glyph00116"/>
</cmap_format_6>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
</contour>
<instructions><assembly>
</assembly></instructions>
</TTGlyph>
<TTGlyph name="glyph00001" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00002" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00003" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00004" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00005" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00006" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00007" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00008" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00009" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00010" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00011" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00012" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00013" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00014" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00015" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00016" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00017" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00018" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00019" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00020" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00021" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00022" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00023" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00024" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00025" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00026" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00027" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00028" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00029" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00030" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00031" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00032" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00033" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00034" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00035" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00036" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00037" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00038" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00039" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00040" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00041" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00042" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00043" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00044" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00045" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00046" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00047" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00048" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00049" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00050" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00051" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00052" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00053" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00054" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00055" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00056" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00057" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00058" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00059" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00060" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00061" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00062" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00063" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00064" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00065" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00066" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00067" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00068" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00069" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00070" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00071" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00072" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00073" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00074" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00075" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00076" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00077" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00078" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00079" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00080" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00081" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00082" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00083" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00084" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00085" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00086" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00087" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00088" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00089" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00090" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00091" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00092" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00093" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00094" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00095" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00096" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00097" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00098" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00099" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00100" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00101" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00102" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00103" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00104" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00105" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00106" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00107" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00108" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00109" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00110" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00111" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00112" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00113" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00114" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00115" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
<TTGlyph name="glyph00116" xMin="0" yMin="0" xMax="1000" yMax="1000">
</TTGlyph>
</glyf>
</ttFont>

View File

@ -1,10 +1,5 @@
package commands; package commands;
import picocli.CommandLine;
import picocli.CommandLine.*;
import progressbar.ProgressBar;
import java.io.File; import java.io.File;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@ -17,50 +12,42 @@ import org.apache.logging.log4j.core.config.Configurator;
import config.Config; import config.Config;
import csv.GenerateCSV; import csv.GenerateCSV;
import ocr.GestionnaireCopies; import ocr.GestionnaireCopies;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Model;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;
import picocli.CommandLine.Spec;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@Command( @Command(name = "-r", version = "Version 1.0", sortOptions = false, usageHelpWidth = 60, header = "Read command - Automatic entry", footer = "", description = "\nAnalyzes all scanned copies (pdf files) provided to recognize student's name and mark.\n")
name = "-r",
version = "Version 1.0",
sortOptions = false,
usageHelpWidth = 60,
header = "Read command - Automatic entry",
footer = "",
description = "\nAnalyzes all scanned copies (pdf files) provided to recognize student's name and mark.\n"
)
public class Read implements Callable<Void> {
public Logger logger = LogManager.getLogger(Read.class);
public class Read implements Callable <Void> {
public Logger logger = LogManager.getLogger(Read.class);
@Spec @Spec
Model.CommandSpec spec; Model.CommandSpec spec;
@Option(names= {"-help"}, arity = "0", order = 1, description = "command help") @Option(names = { "-help" }, arity = "0", order = 1, description = "command help")
boolean help; boolean help;
@Option(names= {"-u"}, arity = "1", order = 2, description = "update mode") @Option(names = { "-u" }, arity = "1", order = 2, description = "update mode")
int step; int step;
@Option(names= {"-v"}, arity = "0..*", order = 3, defaultValue = "1", description ="verbose mode") @Option(names = { "-v" }, arity = "0..*", order = 3, defaultValue = "1", description = "verbose mode")
public int vb_level; public int vb_level;
@Option(names= {"-d"}, arity = "1", order = 4, defaultValue = "copies", description ="directory") @Option(names = { "-d" }, arity = "1", order = 4, defaultValue = "copies", description = "directory")
String directory_name; String directory_name;
@Option(names= {"-o"}, arity = "1", order = 5, defaultValue = "result.csv", description ="result") @Option(names = { "-o" }, arity = "1", order = 5, defaultValue = "result.csv", description = "result")
String result_name; String result_name;
@Parameters(arity = "0..1", defaultValue = "./source.txt", description ="source path") @Parameters(arity = "0..1", defaultValue = "config/source.txt", description = "source path")
String source_path; String source_path;
// Flux de sortie si nécéssaire // Flux de sortie si nécéssaire
public Read(PrintStream out) { public Read(PrintStream out) {
} }
@ -68,49 +55,42 @@ public class Read implements Callable <Void> {
// Check de l'extension csv (à améliorer) // Check de l'extension csv (à améliorer)
public boolean isCsv(String file) { public boolean isCsv(String file) {
return file.endsWith(".csv"); return file.endsWith(".csv");
} }
@Override @Override
public Void call() throws Exception { public Void call() throws Exception {
// Niveau de debug selon verbosite // Niveau de debug selon verbosite
if (vb_level >= 0 && vb_level <=2) { if ((this.vb_level >= 0) && (this.vb_level <= 2)) {
Configurator.setLevel("commands", Level.FATAL); Configurator.setLevel("commands", Level.FATAL);
Configurator.setLevel("csv", Level.FATAL); Configurator.setLevel("csv", Level.FATAL);
} } else if ((this.vb_level >= 3) && (this.vb_level <= 4)) {
else if (vb_level >= 3 && vb_level <=4) {
Configurator.setLevel("commands", Level.ERROR); Configurator.setLevel("commands", Level.ERROR);
Configurator.setLevel("csv", Level.ERROR); Configurator.setLevel("csv", Level.ERROR);
} } else if ((this.vb_level >= 5) && (this.vb_level <= 6)) {
else if (vb_level >= 5 && vb_level <=6) {
Configurator.setLevel("commands", Level.WARN); Configurator.setLevel("commands", Level.WARN);
Configurator.setLevel("csv", Level.WARN); Configurator.setLevel("csv", Level.WARN);
} } else if ((this.vb_level >= 7) && (this.vb_level <= 8)) {
else if (vb_level >= 7 && vb_level <=8) {
Configurator.setLevel("commands", Level.INFO); Configurator.setLevel("commands", Level.INFO);
Configurator.setLevel("csv", Level.INFO); Configurator.setLevel("csv", Level.INFO);
} } else {
else {
Configurator.setLevel("commands", Level.DEBUG); Configurator.setLevel("commands", Level.DEBUG);
Configurator.setLevel("csv", Level.DEBUG); Configurator.setLevel("csv", Level.DEBUG);
} }
// Help genere de la commande // Help genere de la commande
if(help) { if (this.help) {
logger.info("Help for 'read' command executed"); this.logger.info("Help for 'read' command executed");
CommandLine.usage(this.spec, System.out); CommandLine.usage(this.spec, System.out);
} } else {
else {
//************* Progress Bar Prototype ************** //************* Progress Bar Prototype **************
// ProgressBar bar = new ProgressBar(); // ProgressBar bar = new ProgressBar();
// //
// System.out.println("\nReading pdf ...\n"); // System.out.println("\nReading pdf ...\n");
// //
// bar.update(0, 1000); // bar.update(0, 1000);
@ -122,46 +102,45 @@ public class Read implements Callable <Void> {
// // update the progress bar // // update the progress bar
// bar.update(i, 1000); // On ajoute 100/imgList.length à chaque temps estimé par image // bar.update(i, 1000); // On ajoute 100/imgList.length à chaque temps estimé par image
// } // }
// //
// System.out.println("\nCopies correction succeed !\n"); // System.out.println("\nCopies correction succeed !\n");
//*************************************************** //***************************************************
// Log des parametres // Log des parametres
logger.info("Read mode activated"); this.logger.info("Read mode activated");
logger.debug("Update : "+step); this.logger.debug("Update : " + this.step);
logger.debug("Verbose : "+vb_level); this.logger.debug("Verbose : " + this.vb_level);
logger.debug("Directory : "+directory_name); this.logger.debug("Directory : " + this.directory_name);
logger.debug("Result : "+result_name); this.logger.debug("Result : " + this.result_name);
logger.debug("Source : "+source_path); this.logger.debug("Source : " + this.source_path);
if (!this.isCsv(this.result_name)) {
if (!isCsv(result_name)) { this.result_name = this.result_name + ".csv";
result_name = result_name+".csv"; this.logger.info("Result file name changed to '" + this.result_name + "'");
logger.info("Result file name changed to '"+result_name+"'");
} }
Config config = new Config(this.source_path); // Initialise le fichier de configuration selon le chemin
Config config = new Config(source_path); //Initialise le fichier de configuration selon le chemin donné // donné
config.readConfig(); config.readConfig();
String filePath = new File("").getAbsolutePath(); String filePath = new File("").getAbsolutePath();
// Instantie l'OCR // Instantie l'OCR
GestionnaireCopies ocr = new GestionnaireCopies(directory_name); GestionnaireCopies ocr = new GestionnaireCopies(this.directory_name);
this.logger.debug("CSV initialized with : " + ocr.createHashMapforCSV() + " , "
logger.debug("CSV initialized with : "+ocr.createHashMapforCSV()+" , "+config.getParam().get("Code")+" , "+result_name); + config.getParam().get("Code") + " , " + this.result_name);
GenerateCSV csv = new GenerateCSV(ocr.createHashMapforCSV(),config.getParam().get("Code"),config.getParam().get("MarkFormat"), result_name); GenerateCSV csv = new GenerateCSV(ocr.createHashMapforCSV(), config.getParam().get("Code"),
config.getParam().get("MarkFormat"), this.result_name);
csv.createFile(); //Génère le fichier csv à partir de la HMap retournée par l'OCR
csv.createFile(); // Génère le fichier csv à partir de la HMap retournée par l'OCR
//Done !
// Done !
} }
return null; return null;
} }
} }

View File

@ -1,28 +1,27 @@
package ocr; package ocr;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException; import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public abstract class OCR { public abstract class OCR {
public static String applyOcrNumber(BufferedImage img) { public static String applyOcrNumber(BufferedImage img) {
//FAIRE L'OCR // FAIRE L'OCR
Tesseract tesseract = new Tesseract(); Tesseract tesseract = new Tesseract();
String str=""; String str = "";
try { try {
tesseract.setDatapath("Tess4J"); tesseract.setDatapath("config");
tesseract.setLanguage("eng"); tesseract.setLanguage("eng");
//tesseract.setOcrEngineMode(2); // tesseract.setOcrEngineMode(2);
tesseract.setTessVariable("tessedit_char_whitelist",",0123456789"); tesseract.setTessVariable("tessedit_char_whitelist", ",0123456789");
str=tesseract.doOCR(img); str = tesseract.doOCR(img);
} catch (TesseractException e) { } catch (TesseractException e) {
e.printStackTrace(); e.printStackTrace();
} }
return str;
return str;
} }
} }

View File

@ -1,19 +1,13 @@
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import picocli.CommandLine;
class TestExec { class TestExec {
@Test @Test
void test() throws InterruptedException { void test() throws InterruptedException {
Exec exec = new Exec(); Exec exec = new Exec();
Exec.main(new String[] {});
//Exec.main(new String[] {});
} }
} }