zhaoterryy / mkdocs-pdf-export-plugin

An MkDocs plugin to export content pages as PDF files
MIT License
313 stars 44 forks source link

Combined PDF generation fails with `CAIRO_STATUS_NO_MEMORY` #27

Open fschrempf opened 5 years ago

fschrempf commented 5 years ago

Building single files with combined: false works. Building with combined: true and using more than a handful of pages causes a crash:

Traceback (most recent call last):
  File "/usr/local/bin/mkdocs", line 11, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/mkdocs/__main__.py", line 163, in build_command
    ), dirty=not clean)
  File "/usr/local/lib/python3.5/dist-packages/mkdocs/commands/build.py", line 298, in build
    config['plugins'].run_event('post_build', config)
  File "/usr/local/lib/python3.5/dist-packages/mkdocs/plugins.py", line 94, in run_event
    result = method(item, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/mkdocs_pdf_export_plugin/plugin.py", line 104, in on_post_build
    self.renderer.write_combined_pdf(abs_pdf_path)
  File "/usr/local/lib/python3.5/dist-packages/mkdocs_pdf_export_plugin/renderer.py", line 41, in write_combined_pdf
    self.combined_doc.write_pdf(output_path)
  File "/usr/local/lib/python3.5/dist-packages/weasyprint/document.py", line 617, in write_pdf
    surface.finish()
  File "/usr/local/lib/python3.5/dist-packages/cairocffi/surfaces.py", line 630, in finish
    self._check_status()
  File "/usr/local/lib/python3.5/dist-packages/cairocffi/surfaces.py", line 160, in _check_status
    _check_status(cairo.cairo_surface_status(self._pointer))
  File "/usr/local/lib/python3.5/dist-packages/cairocffi/__init__.py", line 79, in _check_status
    raise exception(message, status)
MemoryError: ("cairo returned CAIRO_STATUS_NO_MEMORY: b'out of memory'", 1)