Fixed: DecodeParms array support.

pull/1/head
Yusuke Shinyama 2014-07-09 19:07:27 +09:00
parent 137fc3a1ae
commit f5b5e31921
2 changed files with 8 additions and 6 deletions

View File

@ -71,7 +71,7 @@ class ImageWriter(object):
stream = image.stream stream = image.stream
filters = stream.get_filters() filters = stream.get_filters()
(width, height) = image.srcsize (width, height) = image.srcsize
if len(filters) == 1 and filters[0] in LITERALS_DCT_DECODE: if len(filters) == 1 and filters[0][0] in LITERALS_DCT_DECODE:
ext = '.jpg' ext = '.jpg'
elif (image.bits == 1 or elif (image.bits == 1 or
image.bits == 8 and image.colorspace in (LITERAL_DEVICE_RGB, LITERAL_DEVICE_GRAY)): image.bits == 8 and image.colorspace in (LITERAL_DEVICE_RGB, LITERAL_DEVICE_GRAY)):

View File

@ -218,11 +218,14 @@ class PDFStream(PDFObject):
def get_filters(self): def get_filters(self):
filters = self.get_any(('F', 'Filter')) filters = self.get_any(('F', 'Filter'))
params = self.get_any(('DP', 'DecodeParms', 'FDecodeParms'), {})
if not filters: if not filters:
return [] return []
if isinstance(filters, list): if not isinstance(filters, list):
return filters filters = [filters]
return [filters] if not isinstance(params, list):
params = [params]
return zip(filters, params)
def decode(self): def decode(self):
assert self.data is None and self.rawdata is not None assert self.data is None and self.rawdata is not None
@ -235,8 +238,7 @@ class PDFStream(PDFObject):
self.data = data self.data = data
self.rawdata = None self.rawdata = None
return return
for f in filters: for (f,params) in filters:
params = self.get_any(('DP', 'DecodeParms', 'FDecodeParms'), {})
if f in LITERALS_FLATE_DECODE: if f in LITERALS_FLATE_DECODE:
# will get errors if the document is encrypted. # will get errors if the document is encrypted.
try: try: