diff --git a/src/components/print/Print.tsx b/src/components/print/Print.tsx
new file mode 100644
index 000000000..ee7f1cb2b
--- /dev/null
+++ b/src/components/print/Print.tsx
@@ -0,0 +1,31 @@
+'use client';
+import { useEffect } from 'react';
+
+export function Print() {
+ // Some hack for strict mode
+ let opened = false;
+ useEffect(() => {
+ if (opened) return;
+
+ // Adjusting padding and margins for print
+ document.querySelectorAll('details').forEach((e) => (e.open = true));
+ document.querySelectorAll('header').forEach((e) => {
+ e.style.display = 'none';
+ });
+ document.querySelectorAll('main').forEach((e) => {
+ e.style.padding = '0px';
+ e.style.margin = '0px';
+ });
+ document.querySelectorAll('.notion-title').forEach((e: any) => {
+ e.style.marginBottom = '0px';
+ });
+
+ setTimeout(() => {
+ print();
+ opened = true;
+ window.close();
+ }, 2000);
+ }, []);
+
+ return null;
+}
diff --git a/src/components/print/PrintNotes.tsx b/src/components/print/PrintNotes.tsx
new file mode 100644
index 000000000..31134d06f
--- /dev/null
+++ b/src/components/print/PrintNotes.tsx
@@ -0,0 +1,46 @@
+'use client';
+
+import { NotionRenderer as NotionRendererLib } from 'react-notion-x';
+import 'react-notion-x/src/styles.css';
+import dynamic from 'next/dynamic';
+
+const Code = dynamic(() =>
+ import('react-notion-x/build/third-party/code').then((m) => m.Code),
+);
+const Equation = dynamic(() =>
+ import('react-notion-x/build/third-party/equation').then((m) => m.Equation),
+);
+
+// used for code syntax highlighting (optional)
+import 'prismjs/themes/prism-tomorrow.css';
+
+// used for rendering equations (optional)
+import 'katex/dist/katex.min.css';
+import { Print } from './Print';
+import useMountStatus from '@/hooks/useMountStatus';
+
+const PrintNotes = ({ recordMap }: { recordMap: any }) => {
+ const mounted = useMountStatus();
+
+ if (!mounted) {
+ return null;
+ }
+
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export default PrintNotes;
diff --git a/src/hooks/useMountStatus.ts b/src/hooks/useMountStatus.ts
new file mode 100644
index 000000000..72fcba8bc
--- /dev/null
+++ b/src/hooks/useMountStatus.ts
@@ -0,0 +1,13 @@
+import { useEffect, useState } from 'react';
+
+const useMountStatus = () => {
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ return mounted;
+};
+
+export default useMountStatus;