@@ -6,13 +6,12 @@ import { canvasState, canvasColors } from "../atoms";
6
6
import { jsPDF } from "jspdf" ;
7
7
8
8
function Menu ( ) {
9
-
10
9
const canvas = useRecoilValue ( canvasState ) ;
11
10
const canvasColor = useRecoilValue ( canvasColors ) ;
12
11
13
12
// function to save canvas as pdf
14
13
function saveAsPdf ( ) {
15
- const canvasDataURL = canvas . toDataURL ( "imgae /png" ) ;
14
+ const canvasDataURL = canvas . toDataURL ( "image /png" ) ;
16
15
const pdf = new jsPDF ( {
17
16
orientation : "landscape" ,
18
17
unit : "px" ,
@@ -24,16 +23,40 @@ function Menu(){
24
23
pdf . save ( "drawing.pdf" ) ;
25
24
}
26
25
27
- return (
28
- < 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" >
29
- < MenuItem feat = "Start Collaboration" > </ MenuItem >
30
- < MenuItem feat = "Start Chat" > </ MenuItem >
31
- < MenuItem feat = "Save as pdf" clickHandler = { saveAsPdf } > </ MenuItem >
32
- < MenuItem feat = "Save as png" > </ MenuItem >
33
- < SponsorBtn > </ SponsorBtn >
34
- < Socials > </ Socials >
35
- </ div >
36
- ) ;
26
+ // function to save canvas as pdf
27
+ function saveAsPng ( ) {
28
+
29
+ // create a temporary canvas to make a png
30
+ const tempCanvas = document . createElement ( 'canvas' ) ;
31
+ const tempCanvasCtx = tempCanvas . getContext ( '2d' ) ;
32
+
33
+ tempCanvas . width = canvas . width ;
34
+ tempCanvas . height = canvas . height ;
35
+
36
+ tempCanvasCtx . fillStyle = canvasColor ;
37
+ tempCanvasCtx . fillRect ( 0 , 0 , tempCanvas . width , tempCanvas . height ) ;
38
+ tempCanvasCtx . drawImage ( canvas , 0 , 0 ) ;
39
+
40
+
41
+ const canvasDataURL = tempCanvas . toDataURL ( "image/png" ) ;
42
+ const link = document . createElement ( "a" ) ;
43
+ link . href = canvasDataURL ;
44
+ link . download = "drawing.png" ;
45
+ document . body . appendChild ( link ) ;
46
+ link . click ( ) ;
47
+ document . body . removeChild ( link ) ;
48
+ }
49
+
50
+ return (
51
+ < 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" >
52
+ < MenuItem feat = "Start Collaboration" > </ MenuItem >
53
+ < MenuItem feat = "Start Chat" > </ MenuItem >
54
+ < MenuItem feat = "Save as pdf" clickHandler = { saveAsPdf } > </ MenuItem >
55
+ < MenuItem feat = "Save as png" clickHandler = { saveAsPng } > </ MenuItem >
56
+ < SponsorBtn > </ SponsorBtn >
57
+ < Socials > </ Socials >
58
+ </ div >
59
+ ) ;
37
60
}
38
61
39
62
export default Menu ;
0 commit comments