From 5f654dcab019df5e10ee7d06a9df1620e9b56819 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Wed, 8 Nov 2017 15:57:53 -0800 Subject: [PATCH 1/2] Fix PDFpages bug --- lib/matplotlib/backends/backend_pdf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 87a5c1e64de7..46b8ac2d46ca 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -2591,7 +2591,8 @@ def print_pdf(self, filename, **kwargs): bbox_inches_restore=_bbox_inches_restore) self.figure.draw(renderer) renderer.finalize() - file.finalize() + if not isinstance(filename, PdfPages): + file.finalize() finally: if isinstance(filename, PdfPages): # finish off this page file.endStream() From 621393b00c70c89a1b6655dafd941f69609cacfe Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Thu, 9 Nov 2017 10:09:47 -0800 Subject: [PATCH 2/2] TST: Check just one startxref and file size not ballooning --- lib/matplotlib/tests/test_backend_pdf.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/matplotlib/tests/test_backend_pdf.py b/lib/matplotlib/tests/test_backend_pdf.py index 7f1439f89cf3..965e7ef585fd 100644 --- a/lib/matplotlib/tests/test_backend_pdf.py +++ b/lib/matplotlib/tests/test_backend_pdf.py @@ -7,6 +7,7 @@ import io import os +import sys import tempfile import pytest @@ -71,6 +72,19 @@ def test_multipage_pagecount(): assert pdf.get_pagecount() == 2 +def test_multipage_properfinalize(): + pdfio = io.BytesIO() + with PdfPages(pdfio) as pdf: + for i in range(10): + fig = plt.figure() + ax = fig.add_subplot(111) + ax.set_title('This is a long title') + fig.savefig(pdf, format="pdf") + pdfio.seek(0) + assert sum(b'startxref' in line for line in pdfio) == 1 + assert sys.getsizeof(pdfio) < 40000 + + def test_multipage_keep_empty(): from matplotlib.backends.backend_pdf import PdfPages from tempfile import NamedTemporaryFile