text rotation handling fixed.

git-svn-id: https://pdfminerr.googlecode.com/svn/trunk/pdfminer@137 1aa58f4a-7d42-0410-adbc-911cccaed67c
pull/1/head
yusuke.shinyama.dummy 2009-10-03 04:36:54 +00:00
parent 6a2cb8148d
commit 2ed6b90551
4 changed files with 16 additions and 14 deletions

View File

@ -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)

View File

@ -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,

View File

@ -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, \

View File

@ -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.'''