Commit 6d7bb120 authored by SVN-Git Migration's avatar SVN-Git Migration

Imported Upstream version 20100829+dfsg

parent a4c89e61
MANIFEST
Makefile
README.txt
cmaprsrc/README.txt
cmaprsrc/cid2code_Adobe_CNS1.txt
cmaprsrc/cid2code_Adobe_GB1.txt
cmaprsrc/cid2code_Adobe_Japan1.txt
cmaprsrc/cid2code_Adobe_Korea1.txt
docs/cid.obj
docs/cid.png
docs/index.html
docs/layout.obj
docs/layout.png
docs/miningpdf.html
docs/objrel.obj
docs/objrel.png
docs/programming.html
pdfminer/Makefile
pdfminer/__init__.py
pdfminer/arcfour.py
pdfminer/ascii85.py
pdfminer/cmap/Makefile
pdfminer/cmap/__init__.py
pdfminer/cmapdb.py
pdfminer/converter.py
pdfminer/encodingdb.py
pdfminer/fontmetrics.py
pdfminer/glyphlist.py
pdfminer/latin_enc.py
pdfminer/layout.py
pdfminer/lzw.py
pdfminer/pdfcolor.py
pdfminer/pdfdevice.py
pdfminer/pdffont.py
pdfminer/pdfinterp.py
pdfminer/pdfparser.py
pdfminer/pdftypes.py
pdfminer/psparser.py
pdfminer/rijndael.py
pdfminer/runlength.py
pdfminer/utils.py
samples/Makefile
samples/README
samples/jo.html.ref
samples/jo.pdf
samples/jo.tex
samples/jo.txt.ref
samples/jo.xml.ref
samples/nonfree/dmca.html.ref
samples/nonfree/dmca.pdf
samples/nonfree/dmca.txt.ref
samples/nonfree/dmca.xml.ref
samples/nonfree/f1040nr.html.ref
samples/nonfree/f1040nr.pdf
samples/nonfree/f1040nr.txt.ref
samples/nonfree/f1040nr.xml.ref
samples/nonfree/i1040nr.html.ref
samples/nonfree/i1040nr.pdf
samples/nonfree/i1040nr.txt.ref
samples/nonfree/i1040nr.xml.ref
samples/nonfree/kampo.html.ref
samples/nonfree/kampo.pdf
samples/nonfree/kampo.txt.ref
samples/nonfree/kampo.xml.ref
samples/nonfree/naacl06-shinyama.html.ref
samples/nonfree/naacl06-shinyama.pdf
samples/nonfree/naacl06-shinyama.txt.ref
samples/nonfree/naacl06-shinyama.xml.ref
samples/nonfree/nlp2004slides.html.ref
samples/nonfree/nlp2004slides.pdf
samples/nonfree/nlp2004slides.txt.ref
samples/nonfree/nlp2004slides.xml.ref
samples/simple1.html.ref
samples/simple1.pdf
samples/simple1.txt.ref
samples/simple1.xml.ref
samples/simple2.html.ref
samples/simple2.pdf
samples/simple2.txt.ref
samples/simple2.xml.ref
setup.py
tools/Makefile
tools/conv_afm.py
tools/conv_cmap.py
tools/dumppdf.py
tools/latin2ascii.py
tools/pdf2html.cgi
tools/pdf2txt.py
tools/prof.py
......@@ -2,16 +2,16 @@
##
PACKAGE=pdfminer
PREFIX=/usr/local
PYTHON=python
GIT=git
RM=rm -f
CP=cp -f
all:
install:
$(PYTHON) setup.py install --prefix=$(PREFIX)
$(PYTHON) setup.py install --home=$(HOME)
clean:
-$(PYTHON) setup.py clean
......@@ -51,10 +51,5 @@ test: cmap
test_clean:
-cd samples && $(MAKE) clean
SED=sed
FIND=find . '(' -name .git -o -name .svn -o -name CVS -o -name dev -o -name dist -o -name build ')' -prune -false -o
SORT=sort
TOUCH=touch
MANIFEST:
$(TOUCH) MANIFEST
$(FIND) -type f '!' -name '.*' | $(SED) 's:./::' | $(SORT) > MANIFEST
$(GIT) ls-tree --name-only -r HEAD > MANIFEST
Metadata-Version: 1.0
Name: pdfminer
Version: 20100619p1
Version: 20100829
Summary: PDF parser and analyzer
Home-page: http://www.unixuser.org/~euske/python/pdfminer/index.html
Author: Yusuke Shinyama
Author-email: yusuke at cs dot nyu dot edu
License: MIT/X
Description: PDFMiner is a tool for extracting information from PDF documents.
Unlike other PDF-related tools, it focuses entirely on getting
Unlike other PDF-related tools, it focuses entirely on getting
and analyzing text data. PDFMiner allows to obtain
the exact location of texts in a page, as well as
the exact location of texts in a page, as well as
other information such as fonts or lines.
It includes a PDF converter that can transform PDF files
into other text formats (such as HTML). It has an extensible
......
......@@ -19,7 +19,7 @@ Python PDF parser and analyzer
<div align=right class=lastmod>
<!-- hhmts start -->
Last Modified: Sun Jun 13 04:20:47 UTC 2010
Last Modified: Sun Aug 29 06:43:25 UTC 2010
<!-- hhmts end -->
</div>
......@@ -357,6 +357,8 @@ no stream header is displayed for the ease of saving it to a file.
PDFMiner can be used as a library by other Python programs.
<p>
For details, see the <a href="programming.html">Programming with PDFMiner</a> page.
<p>
Also, check out <a href="http://denis.papathanasiou.org/?p=343">a more complete example by Denis Papathanasiou</a>.
<a name="techdocs"></a>
<hr noshade>
......@@ -387,6 +389,8 @@ For details, see the <a href="programming.html">Programming with PDFMiner</a> pa
<hr noshade>
<h2>Changes</h2>
<ul>
<li> 2010/08/29: A couple of bugfixes. Thanks to Sahan Malagi, pk, and Humberto Pereira.
<li> 2010/07/06: Minor bugfixes. Thanks to Federico Brega.
<li> 2010/06/13: Bugfixes and improvements on CMap data compression. Thanks to Jakub Wilk.
<li> 2010/04/24: Bugfixes and improvements on TOC extraction. Thanks to Jose Maria.
<li> 2010/03/26: Bugfixes. Thanks to Brian Berry and Lubos Pintes.
......@@ -439,6 +443,7 @@ For details, see the <a href="programming.html">Programming with PDFMiner</a> pa
<li> <a href="http://pybrary.net/pyPdf/">pyPdf</a>
<li> <a href="http://www.foolabs.com/xpdf/">xpdf</a>
<li> <a href="http://www.pdfbox.org/">pdfbox</a>
<li> <a href="http://mupdf.com/">mupdf</a>
</ul>
<a name="license"></a>
......
#!/usr/bin/env python
__version__ = '20100619p1'
__version__ = '20100829'
if __name__ == '__main__': print __version__
......@@ -163,7 +163,7 @@ class FileUnicodeMap(UnicodeMap):
assert isinstance(cid, int)
if isinstance(code, PSLiteral):
# Interpret as an Adobe glyph name.
self.cid2unichr[cid] = unichr(name2unicode(code.name))
self.cid2unichr[cid] = name2unicode(code.name)
elif isinstance(code, str):
# Interpret as UTF-16BE.
self.cid2unichr[cid] = unicode(code, 'UTF-16BE', 'ignore')
......
......@@ -2,7 +2,7 @@
import re
from psparser import PSLiteral
from glyphlist import charname2unicode
from glyphlist import glyphname2unicode
from latin_enc import ENCODING
......@@ -11,11 +11,11 @@ from latin_enc import ENCODING
STRIP_NAME = re.compile(r'[0-9]+')
def name2unicode(name):
"""Converts Adobe glyph names to Unicode numbers."""
if name in charname2unicode:
return charname2unicode[name]
if name in glyphname2unicode:
return glyphname2unicode[name]
m = STRIP_NAME.search(name)
if not m: raise KeyError(name)
return int(m.group(0))
return unichr(int(m.group(0)))
## EncodingDB
......@@ -27,7 +27,7 @@ class EncodingDB(object):
win2unicode = {}
pdf2unicode = {}
for (name,std,mac,win,pdf) in ENCODING:
c = unichr(name2unicode(name))
c = name2unicode(name)
if std: std2unicode[std] = c
if mac: mac2unicode[mac] = c
if win: win2unicode[win] = c
......@@ -51,7 +51,7 @@ class EncodingDB(object):
cid = x
elif isinstance(x, PSLiteral):
try:
cid2unicode[cid] = unichr(name2unicode(x.name))
cid2unicode[cid] = name2unicode(x.name)
except KeyError:
pass
cid += 1
......
This diff is collapsed.
#!/usr/bin/env python
import sys
from sys import maxint as INF
from utils import apply_matrix_norm, apply_matrix_pt
from utils import apply_matrix_pt
from utils import bsearch, bbox2str, matrix2str
from pdffont import PDFUnicodeNotDefined
......@@ -208,35 +208,38 @@ class LTChar(LTItem, LTText):
self.matrix = matrix
self.font = font
self.fontsize = fontsize
self.vertical = font.is_vertical()
self.adv = font.char_width(cid) * fontsize * scaling
try:
text = font.to_unichr(cid)
assert isinstance(text, unicode), text
except PDFUnicodeNotDefined:
text = '?'
(a,b,c,d,e,f) = self.matrix
self.upright = (0 < a*d*scaling and b*c <= 0)
LTText.__init__(self, text)
# compute the boundary rectangle.
if self.vertical:
if self.font.is_vertical():
# vertical
size = font.get_size() * fontsize
displacement = (1000 - font.char_disp(cid)) * fontsize * .001
(_,displacement) = apply_matrix_norm(self.matrix, (0, displacement))
(dx,dy) = apply_matrix_norm(self.matrix, (size, self.adv))
(_,_,_,_,tx,ty) = self.matrix
tx -= dx/2
ty += displacement + rise
bbox = (tx, ty+dy, tx+dx, ty)
width = font.get_width() * fontsize
(vx,vy) = font.char_disp(cid)
if vx is None:
vx = width/2
else:
vx = vx * fontsize * .001
vy = (1000 - vy) * fontsize * .001
tx = -vx
ty = vy + rise
bll = (tx, ty+self.adv)
bur = (tx+width, ty)
else:
# horizontal
size = font.get_size() * fontsize
height = font.get_height() * fontsize
descent = font.get_descent() * fontsize
(_,descent) = apply_matrix_norm(self.matrix, (0, descent))
(dx,dy) = apply_matrix_norm(self.matrix, (self.adv, size))
(_,_,_,_,tx,ty) = self.matrix
ty += descent + rise
bbox = (tx, ty, tx+dx, ty+dy)
ty = descent + rise
bll = (0, ty)
bur = (self.adv, ty+height)
(a,b,c,d,e,f) = self.matrix
self.upright = (0 < a*d*scaling and b*c <= 0)
bbox = (apply_matrix_pt(self.matrix, bll) +
apply_matrix_pt(self.matrix, bur))
LTItem.__init__(self, bbox)
return
......@@ -252,7 +255,7 @@ class LTChar(LTItem, LTText):
return max(self.width, self.height)
def is_vertical(self):
return self.vertical
return self.font.is_vertical()
def is_upright(self):
return self.upright
......@@ -691,12 +694,12 @@ class LTAnalyzer(LTContainer):
class LTFigure(LTAnalyzer):
def __init__(self, name, bbox, matrix):
self.name = name
self.matrix = matrix
(x,y,w,h) = bbox
bbox = get_bounds( apply_matrix_pt(matrix, (p,q))
for (p,q) in ((x,y), (x+w,y), (x,y+h), (x+w,y+h)) )
LTAnalyzer.__init__(self, bbox)
self.name = name
self.matrix = matrix
return
def __repr__(self):
......@@ -704,7 +707,7 @@ class LTFigure(LTAnalyzer):
(self.name, bbox2str(self.bbox), matrix2str(self.matrix)))
def analyze(self, laparams):
if laparams.all_texts:
if laparams and laparams.all_texts:
LTAnalyzer.analyze(self, laparams)
return
......
......@@ -159,7 +159,7 @@ class TagExtractor(PDFDevice):
def begin_tag(self, tag, props=None):
s = ''
if props:
if isinstance(props, dict):
s = ''.join( ' %s="%s"' % (enc(k), enc(str(v))) for (k,v)
in sorted(props.iteritems()) )
self.outfp.write('<%s%s>' % (enc(tag.name), s))
......
......@@ -13,7 +13,52 @@ from pdftypes import PDFException, resolve1
from pdftypes import int_value, float_value, num_value
from pdftypes import str_value, list_value, dict_value, stream_value
from fontmetrics import FONT_METRICS
from utils import apply_matrix_norm, nunpack
from utils import apply_matrix_norm, nunpack, choplist
def get_widths(seq):
widths = {}
r = []
for v in seq:
if isinstance(v, list):
if r:
char1 = r[-1]
for (i,w) in enumerate(v):
widths[char1+i] = w
r = []
elif isinstance(v, int):
r.append(v)
if len(r) == 3:
(char1,char2,w) = r
for i in xrange(char1, char2+1):
widths[i] = w
r = []
return widths
#assert get_widths([1]) == {}
#assert get_widths([1,2,3]) == {1:3, 2:3}
#assert get_widths([1,[2,3],6,[7,8]]) == {1:2,2:3, 6:7,7:8}
def get_widths2(seq):
widths = {}
r = []
for v in seq:
if isinstance(v, list):
if r:
char1 = r[-1]
for (i,(w,vx,vy)) in enumerate(choplist(3,v)):
widths[char1+i] = (w,(vx,vy))
r = []
elif isinstance(v, int):
r.append(v)
if len(r) == 5:
(char1,char2,w,vx,vy) = r
for i in xrange(char1, char2+1):
widths[i] = (w,(vx,vy))
r = []
return widths
#assert get_widths2([1]) == {}
#assert get_widths2([1,2,3,4,5]) == {1:(3,(4,5)), 2:(3,(4,5))}
#assert get_widths2([1,[2,3,4,5],6,[7,8,9]]) == {1:(2,(3,4)), 6:(7,(8,9))}
## FontMetricsDB
......@@ -345,9 +390,6 @@ class PDFFont(object):
self.default_width = default_width or descriptor.get('MissingWidth', 0)
self.leading = num_value(descriptor.get('Leading', 0))
self.bbox = list_value(descriptor.get('FontBBox', (0,0,0,0)))
self.size = self.bbox[3]-self.bbox[1]
if self.size == 0:
self.size = self.ascent - self.descent
self.hscale = self.vscale = .001
return
......@@ -367,8 +409,17 @@ class PDFFont(object):
return self.ascent * self.vscale
def get_descent(self):
return self.descent * self.vscale
def get_size(self):
return self.size * self.vscale
def get_width(self):
w = self.bbox[2]-self.bbox[0]
if w == 0:
w = -self.default_width
return w * self.hscale
def get_height(self):
h = self.bbox[3]-self.bbox[1]
if h == 0:
h = self.ascent - self.descent
return h * self.vscale
def char_width(self, cid):
return self.widths.get(cid, self.default_width) * self.hscale
......@@ -522,38 +573,21 @@ class PDFCIDFont(PDFFont):
except CMapDB.CMapNotFound, e:
pass
def get_width(seq):
dic = {}
char1 = char2 = None
for v in seq:
if char1 is None:
char1 = v
elif char2 is None and isinstance(v, int):
char2 = v
else:
if char2 is None:
for (i,w) in enumerate(v):
dic[char1+i] = w
else:
for i in xrange(char1, char2+1):
dic[i] = v
char1 = char2 = None
return dic
self.vertical = self.cmap.is_vertical()
if self.vertical:
# writing mode: vertical
dic = get_width(list_value(spec.get('W2', [])))
widths = dict( (cid,w) for (cid,(d,w)) in dic.iteritems() )
self.disps = dict( (cid,d) for (cid,(d,w)) in dic.iteritems() )
(d,w) = spec.get('DW2', [880, -1000])
widths = get_widths2(list_value(spec.get('W2', [])))
self.disps = dict( (cid,(vx,vy)) for (cid,(_,(vx,vy))) in widths.iteritems() )
(vy,w) = spec.get('DW2', [880, -1000])
self.default_disp = (None,vy)
widths = dict( (cid,w) for (cid,(w,_)) in widths.iteritems() )
default_width = w
self.default_disp = d
else:
# writing mode: horizontal
widths = get_width(list_value(spec.get('W', [])))
self.disps = {}
default_width = spec.get('DW', 1000)
self.default_disp = 0
widths = get_widths(list_value(spec.get('W', [])))
default_width = spec.get('DW', 1000)
PDFFont.__init__(self, descriptor, widths, default_width=default_width)
return
......@@ -570,6 +604,7 @@ class PDFCIDFont(PDFFont):
return self.cmap.decode(bytes)
def char_disp(self, cid):
"Returns an integer for horizontal fonts, a tuple for vertical fonts."
return self.disps.get(cid, self.default_disp)
def to_unichr(self, cid):
......
......@@ -460,8 +460,8 @@ class PDFDocument(object):
(_,objid1) = self._parser.nexttoken() # objid
(_,genno) = self._parser.nexttoken() # genno
(_,kwd) = self._parser.nexttoken()
# #### hack around malformed pdf files
# assert objid1 == objid, (objid, objid1)
# #### hack around malformed pdf files
#assert objid1 == objid, (objid, objid1)
if objid1 != objid:
x = []
while kwd is not self.KEYWORD_OBJ:
......@@ -470,12 +470,15 @@ class PDFDocument(object):
if x:
objid1 = x[-2]
genno = x[-1]
# #### end hack around malformed pdf files
# #### end hack around malformed pdf files
if kwd is not self.KEYWORD_OBJ:
raise PDFSyntaxError('Invalid object spec: offset=%r' % index)
(_,obj) = self._parser.nextobject()
if isinstance(obj, PDFStream):
obj.set_objid(objid, genno)
try:
(_,obj) = self._parser.nextobject()
if isinstance(obj, PDFStream):
obj.set_objid(objid, genno)
except PSEOF:
return None
if 2 <= self.debug:
print >>stderr, 'register: objid=%r: %r' % (objid, obj)
self.objs[objid] = obj
......@@ -578,6 +581,7 @@ class PDFParser(PSStackParser):
def __init__(self, fp):
PSStackParser.__init__(self, fp)
self.doc = None
self.fallback = False
return
def set_document(self, doc):
......@@ -618,12 +622,13 @@ class PDFParser(PSStackParser):
# stream object
((_,dic),) = self.pop(1)
dic = dict_value(dic)
try:
objlen = int_value(dic['Length'])
except KeyError:
if STRICT:
raise PDFSyntaxError('/Length is undefined: %r' % dic)
objlen = 0
objlen = 0
if not self.fallback:
try:
objlen = int_value(dic['Length'])
except KeyError:
if STRICT:
raise PDFSyntaxError('/Length is undefined: %r' % dic)
self.seek(pos)
try:
(_, line) = self.nextline() # 'stream'
......@@ -650,6 +655,7 @@ class PDFParser(PSStackParser):
objlen += len(line)
data += line
self.seek(pos+objlen)
# XXX limit objlen not to exceed object boundary
if 2 <= self.debug:
print >>stderr, 'Stream: pos=%d, objlen=%d, dic=%r, data=%r...' % \
(pos, objlen, dic, data[:10])
......@@ -725,6 +731,7 @@ class PDFParser(PSStackParser):
# fallback
if 1 <= self.debug:
print >>stderr, 'no xref, fallback'
self.fallback = True
xref = PDFXRef()
xref.load_fallback(self)
xrefs.append(xref)
......
......@@ -10,6 +10,7 @@ HTMLS=$(HTMLS_FREE) $(HTMLS_NONFREE)
HTMLS_FREE= \
simple1.html \
simple2.html \
simple3.html \
jo.html
HTMLS_NONFREE= \
nonfree/dmca.html \
......@@ -23,6 +24,7 @@ TEXTS=$(TEXTS_FREE) $(TEXTS_NONFREE)
TEXTS_FREE= \
simple1.txt \
simple2.txt \
simple3.txt \
jo.txt
TEXTS_NONFREE= \
nonfree/dmca.txt \
......@@ -36,6 +38,7 @@ XMLS=$(XMLS_FREE) $(XMLS_NONFREE)
XMLS_FREE= \
simple1.xml \
simple2.xml \
simple3.xml \
jo.xml
XMLS_NONFREE= \
nonfree/dmca.xml \
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<span style="position:absolute; border: gray 1px solid; left:0px; top:50px; width:612px; height:792px;"></span>
<div style="position:absolute; top:50px;"><a name="1">Page 1</a></div>
<span style="position:absolute; border: blue 1px solid; left:0px; top:72px; width:344px; height:554px;"></span>
<span style="position:absolute; left:0px; top:96px; font-size:55px;">H</span>
<span style="position:absolute; left:34px; top:96px; font-size:55px;">e</span>
<span style="position:absolute; left:61px; top:96px; font-size:55px;">l</span>
<span style="position:absolute; left:72px; top:96px; font-size:55px;">l</span>
<span style="position:absolute; left:82px; top:96px; font-size:55px;">o</span>
<span style="position:absolute; left:109px; top:72px; font-size:55px;">H</span>
<span style="position:absolute; left:144px; top:72px; font-size:55px;">e</span>
<span style="position:absolute; left:170px; top:72px; font-size:55px;">l</span>
<span style="position:absolute; left:181px; top:72px; font-size:55px;">l</span>
<span style="position:absolute; left:192px; top:72px; font-size:55px;">o</span>
<span style="position:absolute; left:194px; top:136px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:184px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:232px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:280px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:328px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:352px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:400px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:448px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:496px; font-size:48px;"></span>
<span style="position:absolute; left:194px; top:544px; font-size:48px;"></span>
<span style="position:absolute; left:281px; top:575px; font-size:27px;">W</span>
<span style="position:absolute; left:304px; top:575px; font-size:27px;">o</span>
<span style="position:absolute; left:317px; top:575px; font-size:27px;">r</span>
<span style="position:absolute; left:325px; top:575px; font-size:27px;">l</span>
<span style="position:absolute; left:330px; top:575px; font-size:27px;">d</span>
<span style="position:absolute; left:218px; top:599px; font-size:27px;">W</span>
<span style="position:absolute; left:241px; top:599px; font-size:27px;">o</span>
<span style="position:absolute; left:254px; top:599px; font-size:27px;">r</span>
<span style="position:absolute; left:262px; top:599px; font-size:27px;">l</span>
<span style="position:absolute; left:268px; top:599px; font-size:27px;">d</span>
<div style="position:absolute; top:0px;">Page: <a href="#1">1</a></div>
</body></html>
HelloHello
World
World
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="1" bbox="0.000,0.000,612.000,792.000" rotate="0">
<textbox id="0" bbox="0.000,215.032,344.016,769.552">
<textline bbox="0.000,690.064,218.688,769.552">
<text font="Helvetica" bbox="0.000,690.064,34.656,745.552" size="55.488">H</text>
<text font="Helvetica" bbox="34.656,690.064,61.344,745.552" size="55.488">e</text>
<text font="Helvetica" bbox="61.344,690.064,72.000,745.552" size="55.488">l</text>
<text font="Helvetica" bbox="72.000,690.064,82.656,745.552" size="55.488">l</text>
<text font="Helvetica" bbox="82.656,690.064,109.344,745.552" size="55.488">o</text>
<text font="Helvetica" bbox="109.344,714.064,144.000,769.552" size="55.488">H</text>
<text font="Helvetica" bbox="144.000,714.064,170.688,769.552" size="55.488">e</text>
<text font="Helvetica" bbox="170.688,714.064,181.344,769.552" size="55.488">l</text>
<text font="Helvetica" bbox="181.344,714.064,192.000,769.552" size="55.488">l</text>
<text font="Helvetica" bbox="192.000,714.064,218.688,769.552" size="55.488">o</text>
<text>
</text>
</textline>
<textline bbox="194.688,657.760,242.688,705.760">
<text font="unknown" vertical="true" bbox="194.688,657.760,242.688,705.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,609.760,242.688,657.760">
<text font="unknown" vertical="true" bbox="194.688,609.760,242.688,657.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,561.760,242.688,609.760">
<text font="unknown" vertical="true" bbox="194.688,561.760,242.688,609.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,513.760,242.688,561.760">
<text font="unknown" vertical="true" bbox="194.688,513.760,242.688,561.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,465.760,242.688,513.760">
<text font="unknown" vertical="true" bbox="194.688,465.760,242.688,513.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,441.760,242.688,489.760">
<text font="unknown" vertical="true" bbox="194.688,441.760,242.688,489.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,393.760,242.688,441.760">
<text font="unknown" vertical="true" bbox="194.688,393.760,242.688,441.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,345.760,242.688,393.760">
<text font="unknown" vertical="true" bbox="194.688,345.760,242.688,393.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,297.760,242.688,345.760">
<text font="unknown" vertical="true" bbox="194.688,297.760,242.688,345.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="194.688,249.760,242.688,297.760">
<text font="unknown" vertical="true" bbox="194.688,249.760,242.688,297.760" size="48.000"></text>
<text>
</text>
</textline>
<textline bbox="281.352,239.032,344.016,266.776">
<text font="Helvetica" bbox="281.352,239.032,304.008,266.776" size="27.744">W</text>
<text font="Helvetica" bbox="304.008,239.032,317.352,266.776" size="27.744">o</text>
<text font="Helvetica" bbox="317.352,239.032,325.344,266.776" size="27.744">r</text>
<text font="Helvetica" bbox="325.344,239.032,330.672,266.776" size="27.744">l</text>
<text font="Helvetica" bbox="330.672,239.032,344.016,266.776" size="27.744">d</text>
<text>
</text>
</textline>
<textline bbox="218.688,215.032,281.352,242.776">
<text font="Helvetica" bbox="218.688,215.032,241.344,242.776" size="27.744">W</text>
<text font="Helvetica" bbox="241.344,215.032,254.688,242.776" size="27.744">o</text>
<text font="Helvetica" bbox="254.688,215.032,262.680,242.776" size="27.744">r</text>
<text font="Helvetica" bbox="262.680,215.032,268.008,242.776" size="27.744">l</text>
<text font="Helvetica" bbox="268.008,215.032,281.352,242.776" size="27.744">d</text>
<text>
</text>
</textline>
</textbox>
</page>
<layout>
<textbox id="0" bbox="0.000,215.032,344.016,769.552" />
</layout>
</pages>
#!/usr/bin/env python
import sys
import fileinput
stdout = sys.stdout
stderr = sys.stderr