Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0ee82be

Browse files
committed
Merge pull request #1130 from jkseppan/pdf-on-stdout
Fix writing pdf on stdout
2 parents be72e1b + f829bb5 commit 0ee82be

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

lib/matplotlib/backends/backend_pdf.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -394,11 +394,19 @@ def __init__(self, filename):
394394
self.nextObject = 1 # next free object id
395395
self.xrefTable = [ [0, 65535, 'the zero object'] ]
396396
self.passed_in_file_object = False
397+
self.original_file_like = None
398+
self.tell_base = 0
397399
if is_string_like(filename):
398400
fh = open(filename, 'wb')
399401
elif is_writable_file_like(filename):
400-
fh = filename
401-
self.passed_in_file_object = True
402+
try:
403+
self.tell_base = filename.tell()
404+
except IOError:
405+
fh = BytesIO()
406+
self.original_file_like = filename
407+
else:
408+
fh = filename
409+
self.passed_in_file_object = True
402410
else:
403411
raise ValueError("filename must be a path or a file-like object")
404412

@@ -524,6 +532,9 @@ def close(self):
524532
self.writeTrailer()
525533
if self.passed_in_file_object:
526534
self.fh.flush()
535+
elif self.original_file_like is not None:
536+
self.original_file_like.write(self.fh.getvalue())
537+
self.fh.close()
527538
else:
528539
self.fh.close()
529540

@@ -1351,7 +1362,7 @@ def reserveObject(self, name=''):
13511362
return Reference(id)
13521363

13531364
def recordXref(self, id):
1354-
self.xrefTable[id][0] = self.fh.tell()
1365+
self.xrefTable[id][0] = self.fh.tell() - self.tell_base
13551366

13561367
def writeObject(self, object, contents):
13571368
self.recordXref(object.id)
@@ -1360,7 +1371,7 @@ def writeObject(self, object, contents):
13601371
def writeXref(self):
13611372
"""Write out the xref table."""
13621373

1363-
self.startxref = self.fh.tell()
1374+
self.startxref = self.fh.tell() - self.tell_base
13641375
self.write(("xref\n0 %d\n" % self.nextObject).encode('ascii'))
13651376
i = 0
13661377
borken = False

0 commit comments

Comments
 (0)