1. 创建vue 项目

安装脚手架

  1. npm install -g @vue/cli

创建项目

  1. npm create project-demo

安装UI库 element-ui

  1. npm i element-ui -S
  2. main.js
  3. import ElementUI from 'element-ui'
  4. import 'element-ui/lib/theme-chalk/index.css'
  5. Vue.use(ElementUI, {
  6. size: 'small',
  7. menuType: 'text'
  8. })

实现功能一: 定义模板打印word

  1. npm i docxtemplater pizzip jszip-utils file-saver jszip docxtemplater-image-module-free -S

使用:

  1. import docxtemplater from "docxtemplater"
  2. import PizZip from "pizzip"
  3. import { saveAs } from "file-saver"
  4. import JSZipUtils from "jszip-utils"
  5. import JSZip from 'jszip'
  6. import ImageModule from "docxtemplater-image-module-free"
  7. export const dataURLToBase64 = (url) => {
  8. return new Promise((resolve, reject) => {
  9. // 判断下传入的地址是不是已经是base64
  10. const base64Regex = /^data:image\/(png|jpg|svg|svg\+xml);base64,/;
  11. if (base64Regex.test(url)) {
  12. return url;
  13. }
  14. const Img = new Image()
  15. let dataURL = ''
  16. Img.setAttribute('crossOrigin', 'Anonymous')
  17. Img.src = url + '?v=' + Math.random()
  18. Img.onload = function () {
  19. // 要先确保图片完整获取到,这是个异步事件
  20. const canvas = document.createElement('canvas') // 创建canvas元素
  21. const width = Img.width // 确保canvas的尺寸和图片一样
  22. const height = Img.height
  23. canvas.width = width
  24. canvas.height = height
  25. canvas.getContext('2d').drawImage(Img, 0, 0, width, height) // 将图片绘制到canvas中
  26. dataURL = canvas.toDataURL('image/jpeg') // 转换图片为dataURL
  27. resolve(dataURL)
  28. }
  29. })
  30. }
  31. export const exportWord = ({ file = "input.docx", data, filename = "下载文档", fileType = "docx", folder = "下载文档" } = {}) => {
  32. // 批量下载生成压缩包
  33. const Zip = new JSZip()
  34. if (Array.isArray(data)) {
  35. data.map((item, index) => {
  36. // 读取并获得模板文件的二进制内容
  37. JSZipUtils.getBinaryContent(file, (error, content) => {
  38. // input.docx是模板。我们在导出的时候,会根据此模板来导出对应的数据
  39. // 抛出异常
  40. if (error) {
  41. throw error
  42. }
  43. // 图片处理
  44. let opts = {}
  45. opts.centered = true; // 图片居中
  46. opts.getImage = (tagValue, tagName) => {
  47. return new Promise((resolve, reject) => {
  48. JSZipUtils.getBinaryContent(tagValue, (error, content) => {
  49. if (error) {
  50. return reject(error);
  51. }
  52. return resolve(content);
  53. });
  54. });
  55. }
  56. opts.getSize = () => {
  57. return [400, 200]
  58. }
  59. let imageModule = new ImageModule(opts);
  60. // 创建一个JSZip实例,内容为模板的内容
  61. const zip = new PizZip(content);
  62. // 创建并加载docxtemplater实例对象
  63. let doc = new docxtemplater().loadZip(zip).attachModule(imageModule).compile();
  64. let word = Zip.folder(folder)
  65. doc.resolveData(item).then(() => {
  66. doc.render();
  67. const out = doc.getZip().generate({
  68. type: "blob",
  69. mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  70. });
  71. word.file(`${item.filename ? item.filename : filename + index}.${fileType}`, out)
  72. })
  73. console.log(word, 'word')
  74. })
  75. })
  76. setTimeout(() => {
  77. Zip.generateAsync({ type: "blob" }) // zip下载
  78. .then((content) => {
  79. saveAs(content, `${folder}.zip`); // zip下载后的名字
  80. });
  81. }, 1000)
  82. } else {
  83. // 读取并获得模板文件的二进制内容
  84. JSZipUtils.getBinaryContent(file, (error, content) => {
  85. // 抛出异常
  86. if (error) {
  87. throw error
  88. }
  89. // 图片处理
  90. let opts = {}
  91. opts.centered = true; // 图片居中,在word模板中定义方式为{%image}
  92. opts.getImage = (tagValue, tagName) => {
  93. return new Promise((resolve, reject) => {
  94. JSZipUtils.getBinaryContent(tagValue, (error, content) => {
  95. if (error) {
  96. return reject(error);
  97. }
  98. return resolve(content);
  99. });
  100. });
  101. }
  102. opts.getSize = () => {
  103. return [600, 300]
  104. }
  105. let imageModule = new ImageModule(opts);
  106. const zip = new PizZip(content);
  107. // 创建并加载docxtemplater实例对象
  108. let doc = new docxtemplater().loadZip(zip).attachModule(imageModule).compile();
  109. // 如果包含异步数据,用resolveData,在回调之后再处理,如果都是同步数据,直接用setData就可以
  110. doc.resolveData(data).then(() => {
  111. try {
  112. // 用模板变量的值替换所有模板变量
  113. doc.render();
  114. // 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)
  115. const out = doc.getZip().generate({
  116. type: "blob",
  117. mimeType:
  118. "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
  119. });
  120. // 将目标文件对象保存为目标类型的文件,并命名
  121. saveAs(out, `${filename}.${fileType}`);
  122. } catch (error) {
  123. // 抛出异常
  124. const e = {
  125. message: error.message,
  126. name: error.name,
  127. stack: error.stack,
  128. properties: error.properties
  129. };
  130. console.log(JSON.stringify({ error: e }));
  131. throw error;
  132. }
  133. })
  134. });
  135. }
  136. }

使用:

  1. import { exportWord } from './exportword'
  2. const config = {
  3. file: "input.docx", // 模板地址
  4. imgFiled: [],// 需要处理图片地址的字段
  5. data: this.form// 数据
  6. }
  7. exportWord(config)

word 模板文件及语法

  1. 直接赋值: {name}
  2. 条件赋值:条件标签以#开始,/结束,如下
  3. {#if sex=1}男{/if}
  4. 循环赋值:循环同样以#开始,/结束,如下
  5. {#table}
  6. 姓名: {name}
  7. {/table}

git 删除远程分支:

  1. git push origin --delete new_a

2.创建flutter web 项目

添加用户环境变量

  1. export PUB_HOSTED_URL=https://pub.flutter-io.cn
  2. export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

设置用户变量path(设置flutter sdk)

  1. 1. 下载sdk 不要放到c盘,文件名称不要是中文
  2. 2. sdk的目录加入到用户变量path

检查配置

  1. flutter doctor

创建web 项目

  1. flutter create webflutter

运行项目

  1. flutter run

3.JAVA 环境搭建

下载依赖

  1. 下载jdk 链接
  2. 下载maven 链接

环境配置

一. JDK 配置

  • (1)、复制JDK的安装目录:
  • (2)、点击Path,在弹出的框后面添加上下载的jdk安装目录的bin目录,和jre的bin目录
  • (3)、运行 cmd 输入java -version验证是否配置成功

image.png

二. Maven 配置

  • (1)、复制Maven的安装目录
  • (2)、新增MAVEN_HOME 用户变量
  • (3)、环境变量path 添加 %MAVEN_HOME%\bin (maven安装的bin目录)
  • (4)、cmd 运行 mvn —version 验证是否配置成功

image.png
image.png

配置maven 本地仓库

image.png

  1. 找到节点localRepository,在注释外添加
D:\Program Files (x86)\Java\mavenRepository
  1. 配置阿里云镜像
  1. 在settings.xml配置文件中找到mirrors节点
  2. 添加如下配置(注意要添加在两个标签之间,其它配置同理)
  1. <mirror>
  2. <id>alimaven</id>
  3. <mirrorOf>aliyun maven</mirrorOf>
  4. <name>http://maven.aliyun.com/nexus/content/groups/public/</name>
  5. <url>central</url>
  6. </mirror>

配置jdk

  1. 在settings.xml配置文件中找到profiles节点
  1. <!-- java版本 -->
  2. <profile>
  3. <id>jdk-1.8</id>
  4. <activation>
  5. <activeByDefault>true</activeByDefault>
  6. <jdk>1.8</jdk>
  7. </activation>
  8. <properties>
  9. <maven.compiler.source>1.8</maven.compiler.source>
  10. <maven.compiler.target>1.8</maven.compiler.target>
  11. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  12. </properties>
  13. </profile>

三. 开发工具

IDEA下载:链接

有开源项目的可以去申请开源许可证 链接

四. Nacos 安装

Nacos 链接

附件内容:

https://www.aliyundrive.com/s/sFdxbw79LtP

启动nacos service: startup.cmd -m standalone

字体文件引入压缩: font-spider

4.IDEA 破解

版本:2021.3.3

  1. 安装包下载 (下载专业版Ultimate)
  2. 安装(安装前一定要卸载旧的版本)

学习总结 - 图5
安装完成后运行出现这个界面后直接点退出(Exit)

  1. 运行破解脚本程序

image.png

  1. 再次启动idea 输入激活码
    1. 4W9NP3KV9E-eyJsaWNlbnNlSWQiOiI0VzlOUDNLVjlFIiwibGljZW5zZWVOYW1lIjoic2NyaXAgd2FuZSIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMS0yNCIsInBhaWRVcFRvIjoiMjAyMy0wMS0yNCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUERCIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMS0yNCIsInBhaWRVcFRvIjoiMjAyMy0wMS0yNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQV1MiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAxLTI0IiwicGFpZFVwVG8iOiIyMDIzLTAxLTI0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDEtMjQiLCJwYWlkVXBUbyI6IjIwMjMtMDEtMjQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFBTIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMS0yNCIsInBhaWRVcFRvIjoiMjAyMy0wMS0yNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUEMiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAxLTI0IiwicGFpZFVwVG8iOiIyMDIzLTAxLTI0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBSQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDEtMjQiLCJwYWlkVXBUbyI6IjIwMjMtMDEtMjQiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNXIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMS0yNCIsInBhaWRVcFRvIjoiMjAyMy0wMS0yNCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAxLTI0IiwicGFpZFVwVG8iOiIyMDIzLTAxLTI0IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBDV01QIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMS0yNCIsInBhaWRVcFRvIjoiMjAyMy0wMS0yNCIsImV4dGVuZGVkIjp0cnVlfV0sIm1ldGFkYXRhIjoiMDEyMDIyMDEyMVBTQU4wMDAwMDUiLCJoYXNoIjoiVFJJQUw6LTYyNTA2MDI4NyIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-WlwI3NBiapY7em4MmP7qdZcTK2wvAt5f7FNwaH65H6SBvWnFGpe8M2VrSWCEBIGFQpv+VFJLghJKLjaRUcVOY6ttC6G4uKTpuPzELgcckez+/9DPrYj+alvLYFpS6UWy4uqzsjC/sHgcbNiCQjZQMVhj8Wflv9ts8SfWUqTwtciG8eBrzbyipXOVrRn5Wpk3l6ifL71HZsMy3bDLU8Lkt3UQBNVFZhXWBcNyY/WB9CQGX+6aXtbFA9p/hjbTZL050UoeM30rz0UkzPmfiIupbb3KNPKPArQkU8gw6pF7AcRSLuU3HNqq8RDbrXDYSXY9vtoD3Oi18ijlagVANrhjpQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUlaUFc1wf+CfY9wzFWEL2euKQ5nswqb57V8QZG7d7RoR6rwYUIXseTOAFq210oMEe++LCjzKDuqwDfsyhgDNTgZBPAaC4vUU2oy+XR+Fq8nBixWIsH668HeOnRK6RRhsr0rJzRB95aZ3EAPzBuQ2qPaNGm17pAX0Rd6MPRgjp75IWwI9eA6aMEdPQEVN7uyOtM5zSsjoj79Lbu1fjShOnQZuJcsV8tqnayeFkNzv2LTOlofU/Tbx502Ro073gGjoeRzNvrynAP03pL486P3KCAyiNPhDs2z8/COMrxRlZW5mfzo0xsK0dQGNH3UoG/9RVwHG4eS8LFpMTR9oetHZBAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/we9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD
    或者:激活码获取地址:

破解文件下载