ข้ามไปเนื้อหาหลัก

✓ เสร็จแล้ว

Markdown Notes Exporter

Script สำหรับ export note จาก Obsidian vault เป็น formats ต่างๆ — PDF, HTML, และ clean Markdown ที่ไม่มี wiki links

· อ่านประมาณ 1 นาที

สารบัญ

ปัญหาที่แก้

Obsidian ใช้ [[wiki links]] และ ![[embedded files]] ซึ่ง Markdown parsers อื่นๆ ไม่รู้จัก เมื่อต้องการส่ง note ให้คนอื่น หรือ publish บางส่วนเป็น HTML/PDF ต้องแปลงก่อนเสมอ


สิ่งที่ทำได้

# Export note เดียวเป็น HTML
notes-export convert daily/2026-06-14.md --format html

# Export ทั้ง folder เป็น PDF
notes-export convert projects/ --format pdf --output ./output/

# แปลง wiki links เป็น standard Markdown links
notes-export clean "My Note.md" --resolve-links

# สร้าง index ของ notes ทั้งหมด
notes-export index --output notes-index.md

ขั้นตอนการแปลง

  1. Parse Frontmatter — แยก YAML frontmatter ออกจาก Markdown body
  2. Resolve wiki links — แปลง [[Note Name]][Note Name](./Note Name.md) หรือ remove ถ้าไม่พบไฟล์
  3. Handle embeds![[file.png]]![file](./assets/file.png) หรือ inline base64
  4. Process callouts — Obsidian callouts > [!NOTE] → styled HTML blockquote
  5. Render — ใช้ unified + remark + rehype pipeline สำหรับ HTML, html-to-pdfmake สำหรับ PDF

Stack

  • Node.js + TypeScript — รัน scripts
  • unified / remark / rehype — parse และ transform Markdown
  • gray-matter — parse YAML frontmatter
  • Puppeteer — สำหรับ PDF generation ที่ถูกต้อง (print to PDF)
  • commander.js — CLI interface

สิ่งที่เรียนรู้

  • Unified plugin system — เขียน remark plugin custom สำหรับ wiki link syntax
  • Regex ที่ handle edge cases ของ Obsidian link format ([[Note|Alias]], [[Folder/Note#Heading]])
  • Puppeteer เพื่อ render HTML ก่อน print เป็น PDF ให้ CSS ทำงานได้ถูกต้อง
  • Path resolution ในระบบที่มีหลาย vault folders

ตัวอย่าง Output

Input:

---
tags: [project, done]
date: 2026-06-14
---

ดู [[Research Notes]] สำหรับ context

![[diagram.png]]

Output (clean Markdown):

---
tags: [project, done]
date: 2026-06-14
---

ดู [Research Notes](./Research Notes.md) สำหรับ context

![diagram](./assets/diagram.png)