diff --git a/MANIFEST.in b/MANIFEST.in index c164a8d..ff00ae3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -10,6 +10,7 @@ recursive-include doc *.conf recursive-include doc *.png recursive-include doc *.pdf prune venv +prune .venv prune doc/_build prune dist exclude example-crash-markdown.txt extract-logo.png fax-from-p8.png mask.png sample-cmap.txt sample-font.type1 \ No newline at end of file diff --git a/doc/examples/extract_fonts.rst b/doc/examples/extract_fonts.rst index 3ac6bbf..b8c80a5 100644 --- a/doc/examples/extract_fonts.rst +++ b/doc/examples/extract_fonts.rst @@ -32,13 +32,12 @@ Now let's see what fonts the very first page uses: .. doctest:: >>> page = next(doc.pages()) - >>> page.Resources.Font - {'T1_0': , ... } - + >>> sorted(page.Resources.Font.keys()) + ['T1_0', 'T1_1', 'T1_2', 'TT0', 'TT1'] We see 5 fonts named `T1_0`, `T1_1`, `T1_2`, `TT0` and `TT1`. -As *pdfreader* is a lazy reader the font data has not been read yet. We just see the names and -the references to the objects. +As *pdfreader* is a lazy reader the font data has not been read yet. +We just have the names and the references to the objects. Let's have a look at font `T1_0`. diff --git a/doc/examples/extract_form_text.rst b/doc/examples/extract_form_text.rst index ceddbd0..769e82b 100644 --- a/doc/examples/extract_form_text.rst +++ b/doc/examples/extract_form_text.rst @@ -53,8 +53,8 @@ listed under page resources. The viewer puts them on canvas: .. doctest:: - >>> list(viewer.canvas.forms.keys()) - ['Fm1', 'Fm2', ... 'Fm29', 'Fm30', 'Fm31'] + >>> sorted(list(viewer.canvas.forms.keys())) + ['Fm1', 'Fm10', 'Fm11', 'Fm12', 'Fm13', 'Fm14',...] As Form is a kind of "sub-document" every entry in *viewer.canvas.forms* dictionary maps to :class:`~pdfreader.viewer.SimpleCanvas` instance: diff --git a/pdfreader/CHANGELOG.txt b/pdfreader/CHANGELOG.txt new file mode 100644 index 0000000..d1c82d7 --- /dev/null +++ b/pdfreader/CHANGELOG.txt @@ -0,0 +1,6 @@ +pdfreader 0.1.3, 2019-12-20 +--------------------------- + - CMap-based text decoding issue fixed + - Multiple filters support for inline images added + - nbspace added to MacRomanEncoding and WinAnsiEncoding + - GraphicsState issue issue related to loosing some state attributes fixed diff --git a/pdfreader/__init__.py b/pdfreader/__init__.py index 3a18bce..72577e4 100644 --- a/pdfreader/__init__.py +++ b/pdfreader/__init__.py @@ -5,4 +5,4 @@ register_pdf_encodings() #: package version -__version__ = version = '0.1.3rc1' +__version__ = version = '0.1.3' diff --git a/pdfreader/parsers/base.py b/pdfreader/parsers/base.py index cb3f216..08f32a2 100644 --- a/pdfreader/parsers/base.py +++ b/pdfreader/parsers/base.py @@ -361,8 +361,11 @@ def dictionary(self): ... /Item4 (OK) ... >> ... >>''' - >>> BasicTypesParser(s, 0).dictionary() - {'Type': 'Example', 'Subtype': 'DictExample', 'Version': Decimal('0.01'), 'IntegerItem': 12, 'StringItem': b'a string', 'ArrayItem': [1, 2], 'ObjRef': , 'SubDictionary': {'Item1': True, 'Item2': False, 'Item3': None, 'Item4': b'OK'}} + >>> expected = {'Type': 'Example', 'Subtype': 'DictExample', 'Version': Decimal('0.01'), 'IntegerItem': 12, + ... 'StringItem': b'a string', 'ArrayItem': [1, 2], 'ObjRef': IndirectReference(12, 0), + ... 'SubDictionary': {'Item1': True, 'Item2': False, 'Item3': None, 'Item4': b'OK'}} + >>> BasicTypesParser(s, 0).dictionary() == expected + True """ pfx = self.read(2) diff --git a/pdfreader/parsers/document.py b/pdfreader/parsers/document.py index 4b10447..73c807f 100644 --- a/pdfreader/parsers/document.py +++ b/pdfreader/parsers/document.py @@ -194,8 +194,10 @@ def trailer(self): ... /ID [<0102AA> <0102BB>] ... >>''' >>> p = PDFParser(s, 0) - >>> p.trailer() - , 'Info': , 'ID': ['0102AA', '0102BB']}> + >>> expected_params = {'Size': 22, 'Root': IndirectReference(2,0), + ... 'Info': IndirectReference(1,0), 'ID': ['0102AA', '0102BB']} + >>> p.trailer() == Trailer(expected_params) + True """ token = self.read(7) if token != b'trailer': diff --git a/setup.py b/setup.py index d1a94ea..764eb5a 100755 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ if sys.version_info[:2] < (3, 6): warnings.warn("Python version >= 3.6 required.") -version = '0.1.3rc1' +version = '0.1.3' import os.path