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() 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