degun-osint194 downloadsExport notes as styled PDF with configurable themes, logos, headers/footers, and legal notices.
Export Markdown notes to beautifully styled PDFs with configurable themes: colors, logo, header/footer, watermark, PDF bookmarks, legal notice.
(https://…) or as a real footnote{page} / {pages})See the full changelog for earlier releases (PDF metadata, classification banner, page breaks, cover info block…).
.obsidian/rhino-pdf-themes.json, outside the plugin folder (survives plugin updates)rhino-pdf key{title}, {filename}, {author}, {date}, {time} and {fm.key} (any frontmatter field), resolved at export time<!-- pagebreak --> in a note to force a new page{page} / {pages}, via paged.js CSS counters)Settings → Community plugins → Browse → search "Rhino PDF Export" → Install → Enable.
Download main.js, manifest.json and styles.css from the latest release, then copy them into your vault at .obsidian/plugins/rhino-pdf-export/.
git clone https://github.com/degun-osint/obsidian-rhino-pdf-export.git
cd obsidian-rhino-pdf-export
npm install && npm run build
cp main.js manifest.json styles.css /path/to/vault/.obsidian/plugins/rhino-pdf-export/
Export note as PDF.md file → Export note as PDFExport folder as PDFThe export modal shows a live PDF preview and lets you pick the theme, override the subtitle, jump to the theme editor, and choose the output location.
For folder export, a toggle lets you merge all notes into a single PDF with a global table of contents.
Add a rhino-pdf block in a note's frontmatter to override theme settings:
---
rhino-pdf:
primaryColor: "#e63946"
showCover: false
subtitle: "My subtitle"
watermarkText: "DRAFT"
headerText: "{title} — {date}"
classificationText: "RESTRICTED"
pageBreakBeforeH2: true
margins:
top: 30mm
bottom: 30mm
---
All PdfTheme fields are supported.
Header, footer and classification text resolve these placeholders at export time:
| Variable | Value |
|---|---|
{title} |
Note title (first # H1, or filename) |
{filename} |
Note file name (without extension) |
{author} |
Frontmatter author field |
{date} |
Export date (locale format) |
{time} |
Export time (locale format) |
{fm.KEY} |
Any frontmatter field, e.g. {fm.case_id} |
Put this on its own line anywhere in a note to force a new page:
<!-- pagebreak -->
In the theme editor (Page layout → "Page break before headings"), toggle Before heading 1/2/3 to start a new page before every heading of that level. Cover and table-of-contents headings are never affected.
Set Classification text in the theme editor (or classificationText in frontmatter) to print a centered banner on every page, cover included. It supports the text variables above, so DIFFUSION RESTREINTE — {fm.case_id} works. Color is configurable.
Enable PDF metadata in the theme editor to fill the generated PDF's document properties from the note frontmatter (off by default):
| PDF property | Frontmatter field |
|---|---|
| Title | note title |
| Author | author |
| Subject | subject |
| Keywords | keywords or tags |
In the export modal, each frontmatter field of the note appears as a checkbox under Cover info block. Tick the ones you want and they are listed as a label/value table on the cover page (requires a theme with a cover). Example frontmatter:
---
author: Degun
subject: OSINT report
case_id: AFFAIRE-2026-0042
tags: [osint, report]
---
The External links theme option controls how external (http/https) link
addresses are rendered:
(https://…) after the link textThe footer page number uses a template with {page} and {pages}, so you can set
e.g. {page} / {pages}, Page {page} of {pages} or - {page} -.
Enable Number headings in the theme editor to automatically prefix H2/H3 with
1, 1.1, … The numbering is computed at print time and stays in sync with the
table of contents.
Table-of-contents entries link to their heading and are clickable in the exported PDF (in addition to the PDF bookmarks/outline shown in a reader's sidebar).
All standard Obsidian callout types are supported with their colors and icons:
note, abstract/summary/tldr, info, tip/hint/important, success/check/done, question/help/faq, warning/caution/attention, failure/fail/missing, danger/error, bug, example, quote/cite
Nested callouts are supported. Custom callouts from the Callout Manager plugin are also supported (colors via CSS custom properties) — custom icons are not carried over, but styling (color, background) is preserved.
Settings → Rhino PDF Export:
npm install
npm run dev # watch mode
npm run build # production
src/
├── main.ts # Entry point, commands and context menus
├── types.ts # PdfTheme, PluginSettings interfaces
├── themes.ts # Built-in themes + factory
├── settings.ts # Settings tab (theme editor, JSON import/export)
├── modal.ts # Export modal with live preview
├── batch.ts # Batch export (full folder)
├── frontmatter.ts # YAML frontmatter parsing → theme overrides
├── render.ts # HTML + CSS Paged Media generation
├── pdf.ts # Electron BrowserWindow + printToPDF
└── vendor/
└── paged.polyfill.txt # paged.js v0.4.3 bundled
Inspired by Better Export PDF.
This plugin bundles and redistributes the following MIT-licensed libraries:
Their full license texts are reproduced in THIRD_PARTY_NOTICES.md.
GPLv3