subhamX / notion-easy-export

šŸ“˜ Notion easy export converts your notion documents & databases into an ebook.
https://www.npmjs.com/package/notion-easy-export
Apache License 2.0
63 stars 4 forks source link

Notion Easy Export

Apache-2.0 NPM Package Link

Notion easy export is a lightweight library written in Typescript to convert any notion document consisting of multiple nested documents or databases into an ebook format like PDFs, with the table of contents, page cover, headers etc.

Use Cases

  1. Say you have a notion database containing many documents, and you wish to export them into a single PDF. Notion doesn't allow non-enterprise uses to include all the subpages into a single PDF recursively (Have a look at image below). But this library lets you generate it without any hassle, and even on a free plan. :) PDF Export Dialog
  2. Say you have an e-reader like Kindle would like to send all the articles you have written on Notion workspace every 24 hours automatically. Notion easy export can help you in it. You can use it to get the Ebook version, then can send it to your e-reader device. :). You may consider using GitHub actions or any similar service to automate the workflow.

Features

This application requires Zero Configuration. The current implementation does most things like arranging all the files as chapters and generating the Table of Contents, cover page, footer, etc.

There are two modes to use this application:

  1. Standalone mode: It allows users to generate a separate PDF for each of the HTML pages. For example, if your notion exports have a total of 12 pages (including all nested docs, tables etc.), then there will be precisely 12 PDFs generated for each one of them. You can find the exported merged file inside session_files/output/standalone.

  2. Merge mode: It allows users to generate a single PDF for the entire export. It concatenates each of the notion pages smartly to generate a single document. Table of contents of the whole document is also included at the beginning to ease browsing across the different sections of the merged PDF. You can find the exported standalone files inside session_files/output/merged.

šŸ’” Document Arranging Logic: In merge mode all documents not linking to any other document at the current level are placed before the documents linking to other ones in alphabetical order.

Installation

npm install notion-easy-export

[Required] Installing wkhtmltopdf

The following application uses wkhtmltopdf to generate PDFs. Kindly follow these steps to get wkhtmltopdf installed and added to PATH.

āš ļø Packages provided by your distribution might be easier to install but they may not be using a patched Qt and have missing features. So use it at your own discretion.

  1. First of all, install the wkhtmltopdf by downloading the installer from here.
  2. Now we need to add wkhtmltopdf to PATH. You might or might not need to perform this step, as the installer automatically performs this step for some distributions. (FYI, macOS installer automatically adds to PATH. Another advantage of using a mac? šŸ¤”).
  3. Confirm that wkhtmltopdf is successfully added to PATH by opening terminal/command prompt/powershell and executing the following command:
wkhtmltopdf --version

Note: On macOS, while trying to install wkhtmltopdf you will be prompted with macOS cannot verify that this app is free from malware. Kindly follow the steps mentioned here to fix it.

API

The usage is pretty straightforward.

  1. If you want to use in the standalone mode and generate separate PDF document for each one Notion Page.
import { buildStandaloneDocs } from "notion-easy-export";

const token_v2 = "YOUR_NOTION_TOKEN_V2";
const pageId = "NOTION_PAGE_ID";

buildStandaloneDocs(token_v2, pageId);
  1. If you want to use in the merged mode and generate a single PDF document for each the complete export.
import { buildMergedDoc } from "notion-easy-export";

const token_v2 = "YOUR_NOTION_TOKEN_V2";
const pageId = "NOTION_PAGE_ID";

buildMergedDoc(token_v2, pageId);

āš ļø Caution: Whenever you call any of the instances of buildStandaloneDocs or buildMergedDoc. It removes all files inside the session_files. So please be cautious before starting the script.

Details on Notion TOKEN_V2

Please note that TOKEN_V2 used in the application is different from Notion's official API Internal Integration Token.

Follow these steps to get the token_v2.

  1. Open the browser inspector tools and go to Application Tab.
  2. Then look for the cookies section, and use the value corresponding to the key token_v2 to authenticate to Notion Server.

Example

We will export this Notion document, which is a full-page database and has four documents inside it.

Please note that Notion doesn't allow us to export all of these documents as PDFs in one go without the enterprise plan.

Links to the output files generated using this library:

  1. Standalone files: Link
  2. Merged file: Link

It's Great, isn't it? šŸŽ‰

Future Changes in API

  1. Currently, the only export format this library supports is PDF. We plan to add additional formats like LaTex, mobi, epub etc. very soon.
  2. More support to tweak the configuration.

Contributing

This project welcomes contributions and suggestions. Feel free to report bugs and suggest features. It will help us improve this project. āš”āš”