Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error with Web PDF and option --WebPDFExporter.paginate=False #2193

Open
lsignac opened this issue Nov 23, 2024 · 0 comments
Open

Error with Web PDF and option --WebPDFExporter.paginate=False #2193

lsignac opened this issue Nov 23, 2024 · 0 comments

Comments

@lsignac
Copy link

lsignac commented Nov 23, 2024

converting to pdf (Webpdf) and pagination works well :

> jupyter nbconvert --to WebPDF  --theme light --execute --allow-errors TP.ipynb

[NbConvertApp] Converting notebook TP.ipynb to WebPDF
[NbConvertApp] Building PDF
[NbConvertApp] PDF successfully created
[NbConvertApp] Writing 124332 bytes to TP.pdf

but it fails without pagination :

> jupyter nbconvert --to WebPDF  --WebPDFExporter.paginate=False --theme light --execute --allow-errors TP.ipynb 

[NbConvertApp] Converting notebook TP.ipynb to WebPDF
[NbConvertApp] Building PDF
Traceback (most recent call last):
  File "/usr/bin/jupyter-nbconvert", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/lib/python3.12/site-packages/jupyter_core/application.py", line 283, in launch_instance
    super().launch_instance(argv=argv, **kwargs)
  File "/usr/lib/python3.12/site-packages/traitlets/config/application.py", line 1075, in launch_instance
    app.start()
  File "/usr/lib/python3.12/site-packages/nbconvert/nbconvertapp.py", line 420, in start
    self.convert_notebooks()
  File "/usr/lib/python3.12/site-packages/nbconvert/nbconvertapp.py", line 597, in convert_notebooks
    self.convert_single_notebook(notebook_filename)
  File "/usr/lib/python3.12/site-packages/nbconvert/nbconvertapp.py", line 563, in convert_single_notebook
    output, resources = self.export_single_notebook(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/nbconvertapp.py", line 487, in export_single_notebook
    output, resources = self.exporter.from_filename(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/templateexporter.py", line 386, in from_filename
    return super().from_filename(filename, resources, **kw)  # type:ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/exporter.py", line 201, in from_filename
    return self.from_file(f, resources=resources, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/templateexporter.py", line 392, in from_file
    return super().from_file(file_stream, resources, **kw)  # type:ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/exporter.py", line 220, in from_file
    return self.from_notebook_node(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/webpdf.py", line 174, in from_notebook_node
    pdf_data = self.run_playwright(html)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/webpdf.py", line 163, in run_playwright
    pdf_data = pool.submit(run_coroutine, main(temp_file)).result()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 456, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/usr/lib/python3.12/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/webpdf.py", line 161, in run_coroutine
    return loop.run_until_complete(coro)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/nbconvert/exporters/webpdf.py", line 134, in main
    pdf_data = await page.pdf(**pdf_params)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/playwright/async_api/_generated.py", line 11359, in pdf
    await self._impl_obj.pdf(
  File "/usr/lib/python3.12/site-packages/playwright/_impl/_page.py", line 1084, in pdf
    encoded_binary = await self._channel.send("pdf", params)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 59, in send
    return await self._connection.wrap_api_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 514, in wrap_api_call
    raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
playwright._impl._errors.Error: Page.pdf: width: expected string, got number
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x75c3b5eb4ea0>
Traceback (most recent call last):
  File "/usr/lib/python3.12/asyncio/base_subprocess.py", line 126, in __del__
  File "/usr/lib/python3.12/asyncio/base_subprocess.py", line 104, in close
  File "/usr/lib/python3.12/asyncio/unix_events.py", line 767, in close
  File "/usr/lib/python3.12/asyncio/unix_events.py", line 753, in write_eof
  File "/usr/lib/python3.12/asyncio/base_events.py", line 795, in call_soon
  File "/usr/lib/python3.12/asyncio/base_events.py", line 541, in _check_closed
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending name='Task-121' coro=<Connection.run() running at /usr/lib/python3.12/site-packages/playwright/_impl/_connection.py:274> wait_for=<Future pending cb=[Task.task_wakeup()]>>

I had to modify /exporters/webpdf.py :

pdf_params.update(
                    {
                        "width": min(width, 200 * 72),
                        "height": min(height, 200 * 72),
                    }
                )

is modified to :

pdf_params.update(
                    {
                        "width":  str(min(width, 200 * 72)),
                        "height": str(min(height, 200 * 72)),
                    }
                )

Then, it works, without pagination.
(More precisely, there is no error, I get the PDF, with one long page... and a few lines on a second page. Whatever the size of the initial notebook, the result is always one long page plus a few lines. I can get a single page with "height": str(min(height + 2 * 72, 200 * 72)),.

I don't know if this error is from my particular installation (Arch, I installed nbconvert with the distro packet manager, not from github), so I did not submit a pull request. Let me know if its helps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant