feat: Add Markdown to PDF conversion functionality (#59)

* feat: Add Markdown to PDF conversion functionality

- Implement dual-panel interface with live preview
- Support 3 Markdown flavors: GitHub, CommonMark, Pandoc
- Add file upload support for .md files
- Implement image quality settings (High/Medium/Low)
- Add professional user messaging and error handling
- Support all common Markdown elements (headers, lists, tables, code blocks, etc.)
- Add automatic navigation back to tool after completion

Resolves #37

* fix: improve markdown to PDF conversion with math support and better rendering

- Add KaTeX support for mathematical expressions (inline and block math)
- Fix horizontal separator rendering with improved CSS
- Enhance table rendering with proper borders and cell styling
- Replace CDN dependencies with local KaTeX installation
- Add comprehensive math preprocessing for $...$ and 20112...20112 syntax
- Improve markdown preview with real-time math rendering
- Update UI placeholder text with math examples
- Add fallback rendering for math expressions when KaTeX fails

Resolves issues with:
- Horizontal separators not rendering properly
- Tables missing borders and proper structure
- Mathematical expressions not displaying correctly

---------

Co-authored-by: syazkun <mohamadsyazwan193@gmail.com>
This commit is contained in:
TENSAIandsyazkun authored and GitHub committed 2025-10-23 11:52:04 +05:30
1 parent a8c3f9ffdd
commit 5db93f9fa0
8 files changed
+662 -154

No files matched your search

+40 -1
View File
@@ -18,7 +18,9 @@
"javascript-obfuscator": "^4.1.1",
"jspdf": "^3.0.3",
"jszip": "^3.10.1",
"lucide": "^0.546.0",
"katex": "^0.16.25",
"lucide": "^0.545.0",
"marked": "^16.4.1",
"pdf-lib": "^1.17.1",
"pdfjs-dist": "^5.4.296",
"pdfkit": "^0.17.2",
@@ -8269,6 +8271,31 @@
"setimmediate": "^1.0.5"
}
},
"node_modules/katex": {
"version": "0.16.25",
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.25.tgz",
"integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==",
"funding": [
"https://opencollective.com/katex",
"https://github.com/sponsors/katex"
],
"license": "MIT",
"dependencies": {
"commander": "^8.3.0"
},
"bin": {
"katex": "cli.js"
}
},
"node_modules/katex/node_modules/commander": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -8746,6 +8773,18 @@
"node": ">=0.10.0"
}
},
"node_modules/marked": {
"version": "16.4.1",
"resolved": "https://registry.npmjs.org/marked/-/marked-16.4.1.tgz",
"integrity": "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 20"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",