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
|
||||
self.matrix = matrix
|
||||
self.font = font
|
||||
(_,_,_,_,tx,ty) = self.matrix
|
||||
self.vertical = self.font.is_vertical()
|
||||
self.vertical = font.is_vertical()
|
||||
self.text = ''.join( char for (char,_) in chars )
|
||||
adv = sum( font.char_width(cid) for (_,cid) in chars )
|
||||
adv = (adv * fontsize + len(chars)*charspace) * scaling
|
||||
#size = (font.get_ascent() - font.get_descent()) * fontsize
|
||||
size = font.get_size() * fontsize
|
||||
(_,_,_,_,tx,ty) = self.matrix
|
||||
if not self.vertical:
|
||||
# horizontal text
|
||||
self.vertical = False
|
||||
self.adv = (adv, 0)
|
||||
(dx,dy) = apply_matrix_norm(self.matrix, (adv,size))
|
||||
(_,descent) = apply_matrix_norm(self.matrix, (0,font.get_descent() * fontsize))
|
||||
ty += descent
|
||||
self.adv = (dx, 0)
|
||||
bbox = (tx, ty, tx+dx, ty+dy)
|
||||
else:
|
||||
# vertical text
|
||||
self.adv = (0, adv)
|
||||
(_,cid) = chars[0]
|
||||
(_,disp) = apply_matrix_norm(self.matrix, (0, (1000-font.char_disp(cid))*fontsize*.001))
|
||||
(dx,dy) = apply_matrix_norm(self.matrix, (size,adv))
|
||||
tx -= dx/2
|
||||
ty += disp
|
||||
self.adv = (0, dy)
|
||||
bbox = (tx, ty+dy, tx+dx, ty)
|
||||
self.fontsize = max(apply_matrix_norm(self.matrix, (size,size)))
|
||||
LayoutItem.__init__(self, bbox)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -78,9 +78,11 @@ class PDFTextDevice(PDFDevice):
|
|||
fontsize, charspace, scaling, chars)
|
||||
x += dx
|
||||
y += dy
|
||||
(dx,dy) = apply_matrix_norm(matrix, (-obj*dxscale,0))
|
||||
x += dx
|
||||
y += dy
|
||||
d = -obj*dxscale
|
||||
if font.is_vertical():
|
||||
y += d
|
||||
else:
|
||||
x += d
|
||||
chars = []
|
||||
else:
|
||||
for cid in font.decode(obj):
|
||||
|
@ -95,9 +97,10 @@ class PDFTextDevice(PDFDevice):
|
|||
fontsize, charspace, scaling, chars)
|
||||
x += dx
|
||||
y += dy
|
||||
(dx,dy) = apply_matrix_norm(matrix, (wordspace,0))
|
||||
x += dx
|
||||
y += dy
|
||||
if font.is_vertical():
|
||||
y += wordspace
|
||||
else:
|
||||
x += wordspace
|
||||
chars = []
|
||||
if chars:
|
||||
(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, \
|
||||
resolve1, int_value, float_value, num_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.pdfparser import PDFDocument, PDFParser, PDFPasswordIncorrect
|
||||
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)
|
||||
|
||||
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)):
|
||||
'''Applies a matrix to a point.'''
|
||||
|
|
Loading…
Reference in New Issue