text rotation handling fixed.
git-svn-id: https://pdfminerr.googlecode.com/svn/trunk/pdfminer@137 1aa58f4a-7d42-0410-adbc-911cccaed67cpull/1/head
parent
6a2cb8148d
commit
2ed6b90551
|
@ -266,29 +266,28 @@ class LTTextItem(LayoutItem, LTText):
|
||||||
assert chars
|
assert chars
|
||||||
self.matrix = matrix
|
self.matrix = matrix
|
||||||
self.font = font
|
self.font = font
|
||||||
(_,_,_,_,tx,ty) = self.matrix
|
self.vertical = font.is_vertical()
|
||||||
self.vertical = self.font.is_vertical()
|
|
||||||
self.text = ''.join( char for (char,_) in chars )
|
self.text = ''.join( char for (char,_) in chars )
|
||||||
adv = sum( font.char_width(cid) for (_,cid) in chars )
|
adv = sum( font.char_width(cid) for (_,cid) in chars )
|
||||||
adv = (adv * fontsize + len(chars)*charspace) * scaling
|
adv = (adv * fontsize + len(chars)*charspace) * scaling
|
||||||
#size = (font.get_ascent() - font.get_descent()) * fontsize
|
#size = (font.get_ascent() - font.get_descent()) * fontsize
|
||||||
size = font.get_size() * fontsize
|
size = font.get_size() * fontsize
|
||||||
|
(_,_,_,_,tx,ty) = self.matrix
|
||||||
if not self.vertical:
|
if not self.vertical:
|
||||||
# horizontal text
|
# horizontal text
|
||||||
self.vertical = False
|
self.adv = (adv, 0)
|
||||||
(dx,dy) = apply_matrix_norm(self.matrix, (adv,size))
|
(dx,dy) = apply_matrix_norm(self.matrix, (adv,size))
|
||||||
(_,descent) = apply_matrix_norm(self.matrix, (0,font.get_descent() * fontsize))
|
(_,descent) = apply_matrix_norm(self.matrix, (0,font.get_descent() * fontsize))
|
||||||
ty += descent
|
ty += descent
|
||||||
self.adv = (dx, 0)
|
|
||||||
bbox = (tx, ty, tx+dx, ty+dy)
|
bbox = (tx, ty, tx+dx, ty+dy)
|
||||||
else:
|
else:
|
||||||
# vertical text
|
# vertical text
|
||||||
|
self.adv = (0, adv)
|
||||||
(_,cid) = chars[0]
|
(_,cid) = chars[0]
|
||||||
(_,disp) = apply_matrix_norm(self.matrix, (0, (1000-font.char_disp(cid))*fontsize*.001))
|
(_,disp) = apply_matrix_norm(self.matrix, (0, (1000-font.char_disp(cid))*fontsize*.001))
|
||||||
(dx,dy) = apply_matrix_norm(self.matrix, (size,adv))
|
(dx,dy) = apply_matrix_norm(self.matrix, (size,adv))
|
||||||
tx -= dx/2
|
tx -= dx/2
|
||||||
ty += disp
|
ty += disp
|
||||||
self.adv = (0, dy)
|
|
||||||
bbox = (tx, ty+dy, tx+dx, ty)
|
bbox = (tx, ty+dy, tx+dx, ty)
|
||||||
self.fontsize = max(apply_matrix_norm(self.matrix, (size,size)))
|
self.fontsize = max(apply_matrix_norm(self.matrix, (size,size)))
|
||||||
LayoutItem.__init__(self, bbox)
|
LayoutItem.__init__(self, bbox)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from pdfminer.utils import mult_matrix, translate_matrix, apply_matrix_norm
|
from pdfminer.utils import mult_matrix, translate_matrix
|
||||||
from pdfminer.pdffont import PDFUnicodeNotDefined
|
from pdfminer.pdffont import PDFUnicodeNotDefined
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,9 +78,11 @@ class PDFTextDevice(PDFDevice):
|
||||||
fontsize, charspace, scaling, chars)
|
fontsize, charspace, scaling, chars)
|
||||||
x += dx
|
x += dx
|
||||||
y += dy
|
y += dy
|
||||||
(dx,dy) = apply_matrix_norm(matrix, (-obj*dxscale,0))
|
d = -obj*dxscale
|
||||||
x += dx
|
if font.is_vertical():
|
||||||
y += dy
|
y += d
|
||||||
|
else:
|
||||||
|
x += d
|
||||||
chars = []
|
chars = []
|
||||||
else:
|
else:
|
||||||
for cid in font.decode(obj):
|
for cid in font.decode(obj):
|
||||||
|
@ -95,9 +97,10 @@ class PDFTextDevice(PDFDevice):
|
||||||
fontsize, charspace, scaling, chars)
|
fontsize, charspace, scaling, chars)
|
||||||
x += dx
|
x += dx
|
||||||
y += dy
|
y += dy
|
||||||
(dx,dy) = apply_matrix_norm(matrix, (wordspace,0))
|
if font.is_vertical():
|
||||||
x += dx
|
y += wordspace
|
||||||
y += dy
|
else:
|
||||||
|
x += wordspace
|
||||||
chars = []
|
chars = []
|
||||||
if chars:
|
if chars:
|
||||||
(dx,dy) = self.render_chars(translate_matrix(matrix, (x,y)), font,
|
(dx,dy) = self.render_chars(translate_matrix(matrix, (x,y)), font,
|
||||||
|
|
|
@ -12,7 +12,7 @@ from pdfminer.psparser import PSException, PSTypeError, PSEOF, \
|
||||||
from pdfminer.pdftypes import PDFException, PDFStream, PDFObjRef, \
|
from pdfminer.pdftypes import PDFException, PDFStream, PDFObjRef, \
|
||||||
resolve1, int_value, float_value, num_value, \
|
resolve1, int_value, float_value, num_value, \
|
||||||
str_value, list_value, dict_value, stream_value
|
str_value, list_value, dict_value, stream_value
|
||||||
from pdfminer.utils import choplist, mult_matrix, translate_matrix, MATRIX_IDENTITY
|
from pdfminer.utils import choplist, mult_matrix, MATRIX_IDENTITY
|
||||||
from pdfminer.pdffont import PDFFontError, PDFType1Font, PDFTrueTypeFont, PDFType3Font, PDFCIDFont
|
from pdfminer.pdffont import PDFFontError, PDFType1Font, PDFTrueTypeFont, PDFType3Font, PDFCIDFont
|
||||||
from pdfminer.pdfparser import PDFDocument, PDFParser, PDFPasswordIncorrect
|
from pdfminer.pdfparser import PDFDocument, PDFParser, PDFPasswordIncorrect
|
||||||
from pdfminer.pdfcolor import PDFColorSpace, PREDEFINED_COLORSPACE, \
|
from pdfminer.pdfcolor import PDFColorSpace, PREDEFINED_COLORSPACE, \
|
||||||
|
|
|
@ -13,7 +13,7 @@ def mult_matrix((a1,b1,c1,d1,e1,f1), (a0,b0,c0,d0,e0,f0)):
|
||||||
a0*e1+c0*f1+e0, b0*e1+d0*f1+f0)
|
a0*e1+c0*f1+e0, b0*e1+d0*f1+f0)
|
||||||
|
|
||||||
def translate_matrix((a,b,c,d,e,f), (x,y)):
|
def translate_matrix((a,b,c,d,e,f), (x,y)):
|
||||||
return (a,b,c,d,e+x,f+y)
|
return (a,b,c,d,x*a+y*c+e,x*b+y*d+f)
|
||||||
|
|
||||||
def apply_matrix_pt((a,b,c,d,e,f), (x,y)):
|
def apply_matrix_pt((a,b,c,d,e,f), (x,y)):
|
||||||
'''Applies a matrix to a point.'''
|
'''Applies a matrix to a point.'''
|
||||||
|
|
Loading…
Reference in New Issue