git-svn-id: https://pdfminerr.googlecode.com/svn/trunk/pdfminer@129 1aa58f4a-7d42-0410-adbc-911cccaed67c
parent
16ddc94c77
commit
b8c6cb8367
|
@ -18,7 +18,7 @@ Python PDF parser and analyzer
|
|||
|
||||
<div align=right class=lastmod>
|
||||
<!-- hhmts start -->
|
||||
Last Modified: Mon Aug 24 15:56:08 JST 2009
|
||||
Last Modified: Thu Aug 27 00:20:29 JST 2009
|
||||
<!-- hhmts end -->
|
||||
</div>
|
||||
|
||||
|
@ -101,6 +101,7 @@ World
|
|||
</ol>
|
||||
|
||||
<p>
|
||||
<a name="cmap"></a>
|
||||
<h3>For non-ASCII languages</h3>
|
||||
In order to handle non-ASCII languages (e.g. Japanese),
|
||||
you need to install an additional data called <code>CMap</code>,
|
||||
|
@ -115,17 +116,16 @@ http://www.unixuser.org/~euske/pub/CMap.tar.bz2
|
|||
</a>
|
||||
<li> Expand the archive and put the <code>CMap</code> directory under the directory
|
||||
where <code>pdfminer</code> is installed.
|
||||
(Normally this should be something like <code>/usr/lib/python2.5/site-packages</code>.)
|
||||
(Normally this should be something like <code>/usr/lib/python2.5/site-packages/pdfminer</code>.)
|
||||
For example:
|
||||
<blockquote><pre>
|
||||
$ <strong>cd /usr/lib/python2.5/site-packages</strong>
|
||||
$ <strong>cd /usr/lib/python2.5/site-packages/pdfminer</strong>
|
||||
$ <strong>tar jxf CMap.tar.bz2</strong>
|
||||
</pre></blockquote>
|
||||
<li> Do the following. (this is optional, but highly recommended)<br>
|
||||
<li> Do the following. (this is optional and may take several minutes, but highly recommended!)<br>
|
||||
<blockquote><pre>
|
||||
$ <strong>python -m pdfminer.cmap</strong>
|
||||
</pre></blockquote>
|
||||
This may take several minutes.
|
||||
</ol>
|
||||
|
||||
<a name="usage"></a>
|
||||
|
@ -319,6 +319,8 @@ no stream header is displayed for the ease of saving it to a file.
|
|||
<hr noshade>
|
||||
<h2>Changes</h2>
|
||||
<ul>
|
||||
<li> 2009/08/27: Fixed page rotation handling.
|
||||
<li> 2009/08/26: Fixed zlib decoding bug. Thanks to Shon Urbas.
|
||||
<li> 2009/08/24: Fixed a bug in character placing. Thanks to Pawan Jain.
|
||||
<li> 2009/07/21: Improvement in layout analysis.
|
||||
<li> 2009/07/11: Improvement in layout analysis. Thanks to Lubos Pintes.
|
||||
|
|
|
@ -33,7 +33,7 @@ class TagExtractor(PDFDevice):
|
|||
self.outfp.write(enc(text, self.codec))
|
||||
return
|
||||
|
||||
def begin_page(self, page):
|
||||
def begin_page(self, page, ctm):
|
||||
(x0, y0, x1, y1) = page.mediabox
|
||||
bbox = '%.3f,%.3f,%.3f,%.3f' % (x0, y0, x1, y1)
|
||||
self.outfp.write('<page id="%s" bbox="%s" rotate="%d">' %
|
||||
|
@ -77,8 +77,12 @@ class PDFPageAggregator(PDFTextDevice):
|
|||
self.stack = []
|
||||
return
|
||||
|
||||
def begin_page(self, page):
|
||||
self.cur_item = LTPage(self.pageno, page.mediabox, page.rotate)
|
||||
def begin_page(self, page, ctm):
|
||||
(x0,y0,x1,y1) = page.mediabox
|
||||
(x0,y0) = apply_matrix_pt(ctm, (x0,y0))
|
||||
(x1,y1) = apply_matrix_pt(ctm, (x1,y1))
|
||||
mediabox = (0, 0, abs(x0-x1), abs(y0-y1))
|
||||
self.cur_item = LTPage(self.pageno, mediabox)
|
||||
return
|
||||
|
||||
def end_page(self, _):
|
||||
|
@ -225,10 +229,11 @@ class HTMLConverter(PDFConverter):
|
|||
def end_page(self, page):
|
||||
def render(item):
|
||||
if isinstance(item, LTPage):
|
||||
self.yoffset += item.y1
|
||||
self.write_rect('gray', 1, item.x0, self.yoffset-item.y1, item.width, item.height)
|
||||
if self.showpageno:
|
||||
self.outfp.write('<div style="position:absolute; top:%dpx;">' %
|
||||
((self.yoffset-page.y1)*self.scale))
|
||||
((self.yoffset-item.y1)*self.scale))
|
||||
self.outfp.write('<a name="%s">Page %s</a></div>\n' % (page.id, page.id))
|
||||
for child in item:
|
||||
render(child)
|
||||
|
@ -256,7 +261,6 @@ class HTMLConverter(PDFConverter):
|
|||
render(child)
|
||||
return
|
||||
page = PDFConverter.end_page(self, page)
|
||||
self.yoffset += page.y1
|
||||
render(page)
|
||||
self.yoffset += self.pagepad
|
||||
return
|
||||
|
|
|
@ -32,7 +32,7 @@ class PDFDevice(object):
|
|||
def do_tag(self, tag, props=None):
|
||||
return
|
||||
|
||||
def begin_page(self, page):
|
||||
def begin_page(self, page, ctm):
|
||||
return
|
||||
def end_page(self, page):
|
||||
return
|
||||
|
|
|
@ -690,8 +690,17 @@ class PDFPageInterpreter(object):
|
|||
def process_page(self, page):
|
||||
if 1 <= self.debug:
|
||||
print >>stderr, 'Processing page: %r' % page
|
||||
self.device.begin_page(page)
|
||||
self.render_contents(page.resources, page.contents)
|
||||
(x0,y0,x1,y1) = page.mediabox
|
||||
if page.rotate == 90:
|
||||
ctm = (0,-1,1,0, -y0,x1)
|
||||
elif page.rotate == 180:
|
||||
ctm = (-1,0,0,-1, x1,y1)
|
||||
elif page.rotate == 270:
|
||||
ctm = (0,1,-1,0, x0,-y1)
|
||||
else:
|
||||
ctm = (1,0,0,1, -x0,-y0)
|
||||
self.device.begin_page(page, ctm)
|
||||
self.render_contents(page.resources, page.contents, ctm=ctm)
|
||||
self.device.end_page(page)
|
||||
return
|
||||
|
||||
|
|
Loading…
Reference in New Issue