<template> <div class="export-word"> <div class="button-word"> <button class="btn" @click="exportFileDocx" v-tooltip="tooltip"> <svg class="icon icon-docx-file"> <use xlink:href="#icon-docx-file"></use> </svg> </button> </div> </div> </template> <script> import { Document, Paragraph, Packer, TextRun, ImageRun, ExternalHyperlink, Footer, } from "docx"; import { saveAs } from "file-saver"; import QRCode from "qrcode"; export default { props: { texts: { type: Array, required: true, }, fileName: { type: String, default: "sample.docx", }, font: { type: String, default: "Tahoma", }, fontSize: { type: Number, default: 18, }, tooltip: { type: String, default: "دانلود فایل ورد", }, wordTitle: { type: String, default: "سامانه قانون یار", }, wordTitleLink: { type: String, default: location.origin, }, QRCodeLink: { type: String, default: location.origin, }, qrCodeWidth: { type: Number, default: 100, }, qrCodeHeight: { type: Number, default: 100, }, wordSubTitle: { type: String, default: "", }, }, methods: { async exportFileDocx() { const qrCodeDataUrl = await QRCode.toDataURL(this.QRCodeLink); const doc = new Document({ sections: [ { // footers: { // default: new Footer({ // children: [ // new Paragraph({ // alignment: AlignmentType.CENTER, // spacing: { // after: 200, // }, // children: [ // new TextRun({ // text: "قانون یار", // color: "CCCCCC", // bold: true, // size: 100, // allCaps: true, // font: this.font, // }), // ], // }), // ], // }), // }, children: [ new Paragraph({ alignment: "center", spacing: { after: 200, }, children: [ new ExternalHyperlink({ children: [ new TextRun({ text: this.wordTitle, font: this.font, size: 28, color: "#008000", bold: true, }), ], link: this.wordTitleLink, }), ], }), new Paragraph({ alignment: "left", children: [ new ImageRun({ data: qrCodeDataUrl, transformation: { width: this.qrCodeWidth, height: this.qrCodeHeight, }, }), ], }), new Paragraph({ alignment: "right", spacing: { before: 100, after: 300, }, children: [ new TextRun({ text: this.wordSubTitle, font: this.font, size: 24, bold: true, color: "#000000", }), ], }), new Paragraph({ alignment: "right", children: [ new ExternalHyperlink({ children: [ new TextRun({ text: this.QRCodeLink, font: this.font, size: 20, color: "#0000FF", underline: true, }), ], link: this.QRCodeLink, }), ], }), new Paragraph({ border: { bottom: { style: "single", size: 4, color: "000000", }, }, spacing: { before: 200, after: 200, }, }), ...this.texts.map((text) => { return new Paragraph({ alignment: "right", spacing: { after: 200, line: 480, }, children: [ new TextRun({ text: text, font: this.font, size: this.fontSize, }), ], }); }), ], }, ], }); Packer.toBlob(doc).then((blob) => { saveAs(blob, this.fileName); }); }, }, }; </script> <style lang="scss" scoped></style>