Skip to content

Commit

Permalink
Merge pull request #4 from bollwyvl/add-pypdf2
Browse files Browse the repository at this point in the history
  • Loading branch information
betatim committed May 13, 2020
2 parents 6268074 + b0d8b71 commit 118dece
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 26 deletions.
Binary file modified example.pdf
Binary file not shown.
33 changes: 8 additions & 25 deletions notebook_as_pdf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
Export a notebook to a one page PDF
"""
import asyncio
import json
import os
import tempfile

import concurrent.futures

import nbformat
import nbconvert

from pyppeteer import launch

from traitlets import default

import pikepdf
import PyPDF2

from nbconvert.exporters import Exporter

Expand Down Expand Up @@ -84,29 +84,12 @@ async def html_to_pdf(html_file, pdf_file):


def attach_notebook(pdf_in, pdf_out, notebook):
N = pikepdf.Name
pdf = PyPDF2.PdfFileWriter()
pdf.appendPagesFromReader(PyPDF2.PdfFileReader(pdf_in, "rb"))
pdf.addAttachment(notebook["file_name"], notebook["contents"])

main_pdf = pikepdf.open(pdf_in)

the_file = pikepdf.Stream(main_pdf, notebook["contents"])
the_file[N("/Type")] = N("/EmbeddedFile")

file_wrapper = pikepdf.Dictionary(F=the_file)

fname = notebook["file_name"]
embedded_file = pikepdf.Dictionary(
Type=N("/Filespec"), UF=fname, F=fname, EF=file_wrapper
)

name_tree = pikepdf.Array([pikepdf.String(fname), embedded_file])

embedded_files = pikepdf.Dictionary(Names=name_tree)

names = pikepdf.Dictionary(EmbeddedFiles=embedded_files)

main_pdf.Root[N("/Names")] = names

main_pdf.save(pdf_out)
with open(pdf_out, "wb") as fp:
pdf.write(fp)


async def notebook_to_pdf(notebook, pdf_path, config=None, resources=None, **kwargs):
Expand Down Expand Up @@ -179,7 +162,7 @@ def from_notebook_node(self, notebook, resources=None, **kwargs):
pdf_fname2,
{
"file_name": f"{resources['metadata']['name']}.ipynb",
"contents": json.dumps(notebook, indent=None).encode(),
"contents": nbformat.writes(notebook).encode("utf-8"),
},
)

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
author_email="betatim@gmail.com",
version="0.1.0",
description="Jupyter extension to export notebooks as PDFs",
install_requires=["nbconvert", "pyppeteer", "pikepdf"],
install_requires=["nbconvert", "pyppeteer", "PyPDF2"],
keywords="jupyter pdf export bundler",
license="BSD3",
long_description=readme,
Expand Down

0 comments on commit 118dece

Please sign in to comment.