Skip to content

Commit d9b389f

Browse files
committed
add save-as-pdf functionality
1 parent 720ad9f commit d9b389f

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

client/src/components/Menu.jsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,34 @@
11
import MenuItem from "./MenuItem";
22
import Socials from "./Socials";
33
import SponsorBtn from "./SponsorBtn";
4+
import { useRecoilValue } from "recoil";
5+
import { canvasState, canvasColors } from "../atoms";
6+
import { jsPDF } from "jspdf";
47

58
function Menu(){
69

7-
function clickHandlerPdf(){
8-
10+
const canvas = useRecoilValue(canvasState);
11+
const canvasColor = useRecoilValue(canvasColors);
12+
13+
// function to save canvas as pdf
14+
function saveAsPdf() {
15+
const canvasDataURL = canvas.toDataURL("imgae/png");
16+
const pdf = new jsPDF({
17+
orientation: "landscape",
18+
unit: "px",
19+
format: [canvas.width, canvas.height],
20+
});
21+
pdf.setFillColor(canvasColor);
22+
pdf.rect(0, 0, canvas.width, canvas.height, "F");
23+
pdf.addImage(canvasDataURL, "PNG", 0, 0, canvas.width, canvas.height);
24+
pdf.save("drawing.pdf");
925
}
1026

1127
return (
1228
<div className="w-52 h-71 rounded-xl bg-gradient-to-r from-slate-900 to-slate-700 absolute left-52 top-8 rounded-lg shadow-xl">
1329
<MenuItem feat="Start Collaboration"></MenuItem>
1430
<MenuItem feat="Start Chat"></MenuItem>
15-
<MenuItem feat="Save as pdf" onClick={clickHandlerPdf}></MenuItem>
31+
<MenuItem feat="Save as pdf" clickHandler={saveAsPdf}></MenuItem>
1632
<MenuItem feat="Save as png"></MenuItem>
1733
<SponsorBtn></SponsorBtn>
1834
<Socials></Socials>

client/src/components/MenuItem.jsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
/* eslint-disable react/prop-types */
2-
function MenuItem(props){
3-
return (
4-
<div className="h-11 w-15 border-b border-dotted cursor-pointer content-center">
5-
<h1 className="font-sans text-white justify-center flex">
6-
{props.feat}
7-
</h1>
8-
</div>
9-
);
2+
function MenuItem(props) {
3+
return (
4+
<div className="h-11 w-15 border-b border-dotted cursor-pointer content-center">
5+
<h1
6+
className="font-sans text-white hover:text-emerald-300 justify-center flex"
7+
onClick={props.clickHandler}
8+
>
9+
{props.feat}
10+
</h1>
11+
</div>
12+
);
1013
}
1114

12-
export default MenuItem;
15+
export default MenuItem;

0 commit comments

Comments
 (0)