@@ -98,16 +98,17 @@ class _object:
98
98
99
99
import os
100
100
import weakref
101
+ import io
101
102
from binascii import hexlify
102
103
import math
103
104
104
105
fitz_py2 = str is bytes # if true, this is Python 2
105
106
106
107
107
108
VersionFitz = "1.14.0"
108
- VersionBind = "1.14.12 "
109
- VersionDate = "2019-03-21 06:59:25 "
110
- version = (VersionBind , VersionFitz , "20190321065925 " )
109
+ VersionBind = "1.14.13 "
110
+ VersionDate = "2019-04-07 06:43:20 "
111
+ version = (VersionBind , VersionFitz , "20190407064320 " )
111
112
112
113
113
114
class Matrix ():
@@ -174,7 +175,7 @@ def preTranslate(self, tx, ty):
174
175
return self
175
176
176
177
def preScale (self , sx , sy ):
177
- """Calculate pre scaling and replacing current matrix."""
178
+ """Calculate pre scaling and replace current matrix."""
178
179
self .a *= sx
179
180
self .b *= sx
180
181
self .c *= sy
@@ -1782,28 +1783,36 @@ def __init__(self, filename=None, stream=None, filetype=None, rect=None, width=0
1782
1783
if not filename or type (filename ) is str :
1783
1784
pass
1784
1785
else :
1785
- if fitz_py2 : # Python 2
1786
+ if fitz_py2 : # Python 2
1786
1787
if type (filename ) is unicode :
1787
1788
filename = filename .encode ("utf8" )
1788
1789
else :
1789
- filename = str (filename ) # should take care of pathlib
1790
+ filename = str (filename ) # should take care of pathlib
1790
1791
1791
- self .streamlen = len (stream ) if stream else 0
1792
+ if stream :
1793
+ if not (filename or filetype ):
1794
+ raise ValueError ("need filetype for opening a stream" )
1795
+
1796
+ if type (stream ) is bytes :
1797
+ self .stream = stream
1798
+ elif type (stream ) is bytearray :
1799
+ self .stream = bytes (stream )
1800
+ elif type (stream ) is io .BytesIO :
1801
+ self .stream = stream .getvalue ()
1802
+ else :
1803
+ raise ValueError ("'stream' has bad type" )
1804
+ stream = self .stream
1805
+ else :
1806
+ self .stream = None
1792
1807
1793
- self .name = ""
1794
- if filename and self .streamlen == 0 :
1808
+ if filename and not stream :
1795
1809
self .name = filename
1796
-
1797
- if self .streamlen > 0 :
1798
- if not (filename or filetype ):
1799
- raise ValueError ("filetype missing with stream specified" )
1800
- if type (stream ) not in (bytes , bytearray ):
1801
- raise ValueError ("stream must be bytes or bytearray" )
1810
+ else :
1811
+ self .name = ""
1802
1812
1803
1813
self .isClosed = False
1804
1814
self .isEncrypted = 0
1805
1815
self .metadata = None
1806
- self .stream = stream # prevent garbage collecting this
1807
1816
self .openErrCode = 0
1808
1817
self .openErrMsg = ''
1809
1818
self .FontInfos = []
@@ -1920,9 +1929,6 @@ def embeddedFileInfo(self, id):
1920
1929
1921
1930
def embeddedFileUpd (self , id , buffer = None , filename = None , ufilename = None , desc = None ):
1922
1931
"""Change an embedded file given its entry number or name."""
1923
- if self .isClosed or self .isEncrypted :
1924
- raise ValueError ("operation illegal for closed / encrypted doc" )
1925
-
1926
1932
return _fitz .Document_embeddedFileUpd (self , id , buffer , filename , ufilename , desc )
1927
1933
1928
1934
@@ -1941,9 +1947,11 @@ def embeddedFileGet(self, id):
1941
1947
1942
1948
def embeddedFileAdd (self , buffer , name , filename = None , ufilename = None , desc = None ):
1943
1949
"""Embed a new file."""
1950
+
1944
1951
if self .isClosed or self .isEncrypted :
1945
1952
raise ValueError ("operation illegal for closed / encrypted doc" )
1946
1953
1954
+
1947
1955
return _fitz .Document_embeddedFileAdd (self , buffer , name , filename , ufilename , desc )
1948
1956
1949
1957
@@ -2126,7 +2134,7 @@ def save(self, filename, garbage=0, clean=0, deflate=0, incremental=0, ascii=0,
2126
2134
if self .pageCount < 1 :
2127
2135
raise ValueError ("cannot save with zero pages" )
2128
2136
if incremental :
2129
- if self .name != filename or self .streamlen > 0 :
2137
+ if self .name != filename or self .stream :
2130
2138
raise ValueError ("incremental needs original file" )
2131
2139
2132
2140
@@ -2461,17 +2469,17 @@ def saveIncr(self):
2461
2469
2462
2470
def __repr__ (self ):
2463
2471
m = "closed " if self .isClosed else ""
2464
- if self .streamlen == 0 :
2465
- if self .name == "" :
2466
- return m + "fitz.Document(<new PDF>)"
2472
+ if self .stream is None :
2473
+ if self .name is "" :
2474
+ return m + "fitz.Document(<new PDF, doc# %i >)" % self . _graft_id
2467
2475
return m + "fitz.Document('%s')" % (self .name ,)
2468
- return m + "fitz.Document('%s', <memory>)" % (self .name ,)
2476
+ return m + "fitz.Document('%s', <memory, doc# %i >)" % (self .name , self . _graft_id )
2469
2477
2470
2478
def __getitem__ (self , i = 0 ):
2471
2479
if type (i ) is not int :
2472
- raise ValueError ("invalid page number(s)" )
2480
+ raise ValueError ("bad page number(s)" )
2473
2481
if i >= len (self ):
2474
- raise IndexError ("invalid page number(s)" )
2482
+ raise IndexError ("bad page number(s)" )
2475
2483
return self .loadPage (i )
2476
2484
2477
2485
def __len__ (self ):
@@ -2500,11 +2508,12 @@ def __del__(self):
2500
2508
for gmap in self .Graftmaps :
2501
2509
self .Graftmaps [gmap ] = None
2502
2510
if hasattr (self , "this" ) and self .thisown :
2503
- self .thisown = False
2504
2511
self .__swig_destroy__ (self )
2512
+ self .thisown = False
2513
+
2505
2514
self .Graftmaps = {}
2506
2515
self .ShownPages = {}
2507
- self .stream = None
2516
+ self .stream = None
2508
2517
self ._reset_page_refs = DUMMY
2509
2518
self .__swig_destroy__ = DUMMY
2510
2519
self .isClosed = True
@@ -3045,19 +3054,19 @@ def _setContents(self, xref=0):
3045
3054
def __str__ (self ):
3046
3055
CheckParent (self )
3047
3056
x = self .parent .name
3048
- if self .parent .streamlen > 0 :
3049
- x + = " (memory)"
3057
+ if self .parent .stream is not None :
3058
+ x = "<memory, doc# %i>" % ( self . parent . _graft_id ,)
3050
3059
if x == "" :
3051
- x = "<new PDF>"
3060
+ x = "<new PDF, doc# %i>" % self . parent . _graft_id
3052
3061
return "page %s of %s" % (self .number , x )
3053
3062
3054
3063
def __repr__ (self ):
3055
3064
CheckParent (self )
3056
3065
x = self .parent .name
3057
- if self .parent .streamlen > 0 :
3058
- x + = " (memory)"
3066
+ if self .parent .stream is not None :
3067
+ x = "<memory, doc# %i>" % ( self . parent . _graft_id ,)
3059
3068
if x == "" :
3060
- x = "<new PDF>"
3069
+ x = "<new PDF, doc# %i>" % self . parent . _graft_id
3061
3070
return "page %s of %s" % (self .number , x )
3062
3071
3063
3072
def _forget_annot (self , annot ):
@@ -3877,9 +3886,11 @@ def fileGet(self):
3877
3886
3878
3887
3879
3888
def fileUpd (self , buffer = None , filename = None , ufilename = None , desc = None ):
3880
- """Update annotation attached file content."""
3889
+ """Update annotation attached file."""
3890
+
3881
3891
CheckParent (self )
3882
3892
3893
+
3883
3894
return _fitz .Annot_fileUpd (self , buffer , filename , ufilename , desc )
3884
3895
3885
3896
@property
@@ -4382,6 +4393,11 @@ def store_shrink(self, percent):
4382
4393
"""Free 'percent' of current store size."""
4383
4394
return _fitz .Tools_store_shrink (self , percent )
4384
4395
4396
+
4397
+ def image_size (self , imagedata ):
4398
+ """Determine dimension and other image data."""
4399
+ return _fitz .Tools_image_size (self , imagedata )
4400
+
4385
4401
@property
4386
4402
4387
4403
def store_size (self ):
0 commit comments