Mix & Match
Je personnalise mon carnet

Prix à partir de : 22.99€

Quand j’ai créé Women Warriors, mon objectif principal était de vous offrir des carnets uniques, à votre image, que vous serez fières d’utiliser chaque jour !

Bienvenue dans ce nouveau module qui vous offre une multitude d'options de personnalisation. Choix du design, de la couleur de l’élastique, personnalisation totale de votre titre (typographie, couleur, taille, forme de fond…), choix de l’intérieur qui correspond le mieux à vos besoins… tout est réuni pour créer le carnet de vos rêves.

Soyez uniques, planifiez votre succès avec style et commencez votre personnalisation dès maintenant !

With Love.
Laure.

Préc.

étape 1 :Je choisis mon format
Ajouter au panier

Suiv.

Je choisis mon format

Format A5
(15x21cm)
Sélectionner
Format A6

Pocket
(10x15cm)
Sélectionner

Je choisis mon design

Designs de couverture

Filtres couleurs

Filter

Je personnalise mes accessoires

Élastique

J’ajoute mon texte

Mon texte
Je ne souhaite pas ajouter de texte

Ligne 1

14

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

Police d’écriture

Affectionately Yours
Amatic
Angelface
Typewriter
Futura
Aromatic
Signature
Majors
Rude
Autography
Optima
Rylan
Poppins
Briella
Yanone
Cervanttis
Gotham
Collina
Champagne
Juana
Butterfly
Carlasans
Montserrat
Lamore
Grotters
James
Gabelisa
John Mayer
Love
Holland
Cochin
Gotham Medium

Mon texte

Taille

+
-

Attention : si vous écrivez un symbole ou un accent dans votre titre et que ceux-ci n'apparaissent pas dans votre prévisualisation à droite, cela signifie que vous devez changer de police d'écriture.

Couleur du texte

Ligne 2

14

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

Police d’écriture

Affectionately Yours
Amatic
Angelface
Typewriter
Futura
Aromatic
Signature
Majors
Rude
Autography
Optima
Rylan
Poppins
Briella
Yanone
Cervanttis
Gotham
Collina
Champagne
Juana
Butterfly
Carlasans
Montserrat
Lamore
Grotters
James
Gabelisa
John Mayer
Love
Holland
Cochin
Gotham Medium

Mon texte

Taille

+
-

Attention : si vous écrivez un symbole ou un accent dans votre titre et que ceux-ci n'apparaissent pas dans votre prévisualisation à droite, cela signifie que vous devez changer de police d'écriture.

Couleur du texte

Ligne 3

14

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

Police d’écriture

Affectionately Yours
Amatic
Angelface
Typewriter
Futura
Aromatic
Signature
Majors
Rude
Autography
Optima
Rylan
Poppins
Briella
Yanone
Cervanttis
Gotham
Collina
Champagne
Juana
Butterfly
Carlasans
Montserrat
Lamore
Grotters
James
Gabelisa
John Mayer
Love
Holland
Cochin
Gotham Medium

Mon texte

Taille

+
-

Attention : si vous écrivez un symbole ou un accent dans votre titre et que ceux-ci n'apparaissent pas dans votre prévisualisation à droite, cela signifie que vous devez changer de police d'écriture.

Couleur du texte

Formes

Couleur de la forme

Taille de la forme

Je sélectionne mon intérieur

Agenda Family

En savoir plus

Je choisis ma version
2023 - 2024
Non Daté

Agenda Journalier

En savoir plus

Je choisis ma version
2023 - 2024
2024
Non Daté

Agenda Semainier

En savoir plus

Je choisis ma version
2023 - 2024
2024
Non Daté

Pocket Agenda Semainier

En savoir plus

Je choisis ma version
2023 - 2024
2024
Non Daté

Agenda Mensuel

En savoir plus

Je choisis ma version
2023 - 2024
2024
Non Daté

Budget Kakebo

En savoir plus

To Do List

En savoir plus

Notes

En savoir plus

To Do List + Notes

En savoir plus

Pocket To Do List + Notes

En savoir plus

Cuisine - Cooks

En savoir plus

Couture

En savoir plus

Sport Lifts

En savoir plus

Yoga - Woman

En savoir plus

Voyage - Wanderlust

En savoir plus

Je choisis ma version
10 jours
20 jours
30 jours

Mariage - Wedding Book

En savoir plus

Gratitude - Grateful

En savoir plus

Pocket Notes

En savoir plus

Pocket To Do List

En savoir plus

Agenda Perso Pro

En savoir plus

Pocket Agenda Perso Pro

En savoir plus

Récapitulatif

Couverture
Intérieur

Taille du carnet

Accessoires

Spirales:

Élastique :

Couverture & intérieur

Design:

Couleur forme:

Hey Warrior !

Votre carnet personnalisé créé spécialement pour vous ne sera ni repris ni échangé. Il sera imprimé de façon identique à votre création. N'oubliez pas de vérifier votre création finale avant de valider votre commande.

const { PDFDocument } = PDFLib; const { rgb } = PDFLib; const { PDFName } = PDFLib; const { PDFString } = PDFLib; async function getCoors(field, customFont, text){ let x = 0; for (var widget of field.acroField.getWidgets()) { } let fieldHeight = widget.Rect().asRectangle()['height'] let fieldWidth = widget.Rect().asRectangle()['width']; console.log("appearance", field.acroField.getDefaultAppearance()) // Calculating Font Size let defaultAppearance = field.acroField.getDefaultAppearance(); let match = defaultAppearance.match(/\d+(\.\d+)?/g); // matches all the numbers in the string let fontSize = match ? Math.max(...match.filter(val => parseFloat(val) > 3)) : null; // Calculating Height and Y Coordinate let height = customFont.heightAtSize(fontSize) let y = widget.Rect().asRectangle()['y'] - ((fieldHeight - height)/2); console.log("fieldHeight", fieldHeight); console.log("height", height); // Calculating Width and X Coordinate let width = customFont.widthOfTextAtSize(text, fontSize); if (field.getAlignment() == 1){ x = widget.Rect().asRectangle()['x'] + ((fieldWidth - width)/2) }else if (field.getAlignment() == 0){ x = widget.Rect().asRectangle()['x']; }else{ x = widget.Rect().asRectangle()['x'] + width; } return [x, y, fontSize]; } async function embedImages(page) { const pngUrl = $(".testingDiv .bgImage").attr("src") const pngImageBytes = await fetch(pngUrl).then((res) => res.arrayBuffer()) const pngImage = await pdfDoc.embedPng(pngImageBytes) const pngDims = pngImage.scale(0.5) let xCoor = page.getWidth() - ((page.getWidth()*$(".bgImage").width()/$(".bgImage").parent().width())/2); let yCoor = page.getHeight() * $(".bgImage").css("bottom").replace("px","")/$(".bgImage").parent().height(); let wCoor = (page.getWidth()*$(".bgImage").width()/$(".bgImage").parent().width()); let hCoor = (page.getHeight()*$(".bgImage").height()/$(".bgImage").parent().height()); page.drawImage(pngImage, { x: xCoor, y: yCoor, width: wCoor, height: hCoor, }) return page; } function renderPreview(page, field, customFont, text){ let x = 0; for (var widget of field.acroField.getWidgets()) { } let fieldHeight = widget.Rect().asRectangle()['height'] let fieldWidth = widget.Rect().asRectangle()['width']; let fieldX = widget.Rect().asRectangle()['x'] let fieldY = widget.Rect().asRectangle()['y'] $('.text1Div').css("left",fieldX/page.getSize()['width']*100+'%'); $('.text1Div').css("bottom",fieldY/page.getSize()['height']*100+'%'); $('.text1Div').css("width",fieldWidth/page.getSize()['width']*100+'%'); $('.text1Div').css("height",fieldHeight/page.getSize()['height']*100+'%'); let defaultAppearance = field.acroField.getDefaultAppearance(); let match = defaultAppearance.match(/\d+(\.\d+)?/g); // matches all the numbers in the string let fontSize = match ? Math.max(...match.filter(val => parseFloat(val) > 3)) : null; const match2 = defaultAppearance.match(/\/(\S+)/); let fontFamily = match2 ? match2[1] : null; $('.text1Div').css("font-size",(fontSize/fieldHeight*$('.text1Div').height())+'px'); $('.text1Div').css("font-family",fontFamily); if (field.getAlignment() == 1){ $('.text1Div').css("text-align","center"); }else if (field.getAlignment() == 0){ $('.text1Div').css("text-align","left"); }else{ $('.text1Div').css("text-align","right"); } /* console.log("appearance", field.acroField.getDefaultAppearance()) // Calculating Font Size let defaultAppearance = field.acroField.getDefaultAppearance(); let match = defaultAppearance.match(/\d+(\.\d+)?/g); // matches all the numbers in the string let fontSize = match ? Math.max(...match.filter(val => parseFloat(val) > 3)) : null; // Calculating Height and Y Coordinate let height = customFont.heightAtSize(fontSize) let y = widget.Rect().asRectangle()['y'] - ((fieldHeight - height)/2); console.log("fieldHeight", fieldHeight); console.log("height", height); // Calculating Width and X Coordinate let width = customFont.widthOfTextAtSize(text, fontSize); if (field.getAlignment() == 1){ x = widget.Rect().asRectangle()['x'] + ((fieldWidth - width)/2) }else if (field.getAlignment() == 0){ x = widget.Rect().asRectangle()['x']; }else{ x = widget.Rect().asRectangle()['x'] + width; } return [x, y, fontSize]; */ } async function loadPDF(){ const formUrl = "https://cdn.shopify.com/s/files/1/0309/7444/3653/files/MODIFIED_PDF.pdf?v=1690225668" const formPdfBytes = await fetch(formUrl).then(res => res.arrayBuffer()) // Load a PDF with form fields const pdfDocFirst = await PDFDocument.load(formPdfBytes) const url = 'https://cdn.shopify.com/s/files/1/0309/7444/3653/files/Gotham-Bold.otf?v=1690226442' const fontBytes = await fetch(url).then(res => res.arrayBuffer()) pdfDocFirst.registerFontkit(fontkit) const customFont = await pdfDocFirst.embedFont(fontBytes) // Get the form containing all the fields const form = pdfDocFirst.getForm() const text = 'Never' const textSize = 45.2 const textWidth = customFont.widthOfTextAtSize(text, textSize) const textHeight = customFont.heightAtSize(textSize) console.log(textWidth, "width") console.log(textHeight, "height") // Get all fields in the PDF by their names const text1 = form.getTextField('Text1') const text2 = form.getTextField('Text2') const text3 = form.getTextField('Text3') const background = form.getTextField('Background') for (var widgetl of text1.acroField.getWidgets()) { console.log(widgetl.Rect().asRectangle()); } for (var widget of text2.acroField.getWidgets()) { console.log(widget.Rect().asRectangle()); } for (var widget2 of text3.acroField.getWidgets()) { console.log(widget2.Rect().asRectangle()); } for (var widget3 of background.acroField.getWidgets()) { console.log(widget3.Rect().asRectangle()); } //text1.setAlignment(0) const pages = pdfDocFirst.getPages() let firstPage = pages[0] console.log(textWidth) renderPreview(firstPage, text1, customFont, text); let [coorX, coorY, fontSize] = await getCoors(text1, customFont, text); //text1.setText(text); //text1.updateAppearances(customFont); const pngUrl = "https://cdn.shopify.com/s/files/1/0309/7444/3653/files/321353356351_1.png?v=1690403909" const pngImageBytes = await fetch(pngUrl).then((res) => res.arrayBuffer()) const pngImage = await pdfDocFirst.embedPng(pngImageBytes) const pngDims = pngImage.scale(0.5) let xCoor = (firstPage.getWidth() - (firstPage.getWidth()*$(".bgImage").width()/$(".bgImage").parent().width())) / 2; let yCoor = firstPage.getHeight() * $(".bgImage").css("bottom").replace("px","")/$(".bgImage").parent().height(); let wCoor = (firstPage.getWidth()*$(".bgImage").width()/$(".bgImage").parent().width()); let hCoor = (firstPage.getHeight()*$(".bgImage").height()/$(".bgImage").parent().height()); console.log(xCoor, yCoor, wCoor, hCoor, pngImage) firstPage.drawImage(pngImage, { x: xCoor, y: yCoor, width: wCoor, height: hCoor, }) console.log("Coor X", coorX) console.log("Coor Y", coorY) console.log("Coor Y", fontSize) firstPage.drawText(text, { x: coorX, y: coorY, size: fontSize, font: customFont, color: rgb(0, 0.53, 0.71), }) pdfBytes = await pdfDocFirst.save() // Trigger the browser to download the PDF document //download(pdfBytes, "MM.pdf", "application/pdf"); } $('.input1Div').keyup(function() { let divToEdit = $(this).attr('edits'); $(`.${divToEdit} span`).text($(this).val()); if ($(`.${divToEdit} span`).width() > $(`.${divToEdit}`).width()){ while ($(`.${divToEdit} span`).width() > $(`.${divToEdit}`).width()){ $(`.${divToEdit}`).css("font-size", Number($(`.${divToEdit}`).css("font-size").replace("px","")) - 1) } } }); $(".placeBackground").click(function(){ let width1 = $(".text1Div span").width(); let height1 = $(".text1Div span").height(); let heightCombined = 0; if (width1 > 0){ $(".testingDiv .bgImage").css("width", (width1+200)+"px") if ($(".testingDiv .bgImage").height() < height1 + 200){ $(".testingDiv .bgImage").css("width", "auto") $(".testingDiv .bgImage").css("height", (height1+200)+"px") } heightCombined = ($(".testingDiv .bgImage").height()/2) - (height1/2) $(".testingDiv .bgImage").css("bottom", (Number($(".textDiv").last().css("bottom").replace("px","")) - heightCombined) + "px"); }else{ alert("Please fill in your text fields first.") } generatePDF() }); loadPDF();

Customer Reviews

Based on 629 reviews
88%
(555)
10%
(63)
1%
(9)
0%
(2)
0%
(0)
M
Marie-Annick Mongelard-Mignot
Mon Must Have de la rentrée…

Une rentrée au TOP avec mon agenda Mix and Match, personnalisé selon mes goûts du moment ! Chaque année, il égaie ma rentrée et fait partie de mes « Must Have ». Je vous le recommande.

P
Priscillia Gallo

Mix And Match - Custom Your Book

M
Maria Dos Reis
L’agenda est trop souple pour moi

Un peu déçue, je n’avais pas compris que la couverture de l’agenda était souple, pas très pratique dans un sac, il m’a l’air assez fragile.
Mais sinon l’intérieur et les illustrations sont très belles.

N
Nathalie Machecler
Tel que je l avais imaginé

Deuxième année avec cette agenda il est top

G
Gaëlle PATABES

Mix And Match - Custom Your Book