当前位置: 首页 > news >正文

使用docxtemplater-image-module-free时支持动态获取图片大小

使用docxtemplater-image-module-free时支持动态获取图片大小

1、问题背景

在使用docxtemplater-image-module-free生成模板图片时,写死了其中一个函数

getSize() {return [150, 150];
},

导致图片都是一个大小,且被拉扯的变形了

2、报错信息

在去掉这个函数时报错:

Error: You should pass getSize

因此该函数必须规定图片的大小

3、电脑环境

  • 操作系统: Windows 11
  • docxtemplater-image-module-free:1.1.1
  • docxtemplater:3.40.3
  • node.js:18.18.2

4、解决问题

4.1、问题思路

查找docxtemplater-image-module-free的官方文档:https://docxtemplater.com/modules/image/#usage-browser

image-20240318230901670

发现完全可以自定义图片的大小

4.2、解决方法

在浏览器环境中,使用Image对象动态获取图片的大小

getSize(img, url, tagName) {return new Promise(function (resolve, reject) {const image = new Image();image.src = url;image.onload = function () {resolve([image.width, image.height]);};image.onerror = function (e) {console.log("img, url, tagName : ",img,url,tagName);alert("An error occured while loading " +url);reject(e);};});
},

node.js环境中,使用image-size获取图片的大小

const sizeOf = require("image-size");getSize(img) {const sizeObj = sizeOf(img);return [sizeObj.width, sizeObj.height];
}

4.3、优化

一般原图都会比较大,甚至撑满整个docx文档,因此需要设置最大高度和宽度,来响应式计算宽高

getSize(img) {const sizeObj = sizeOf(img);const maxWidth = 300const maxHeight = 300let width = Number(sizeObj.width) || 0let height = Number(sizeObj.height) || 0// 根据需要进行尺寸调整if (width > maxWidth) {height *= maxWidth / width;width = maxWidth;}if (height > maxHeight) {width *= maxHeight / height;height = maxHeight;}return [width, height];
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot:将单体项目拆分成微服务项目
  • 【PGCCC】pg_bestmatch.rs:使用 BM25 提升您的 PostgreSQL 文本查询#PCA
  • Windows下添加开机启动项
  • Vue.js 中的指令(Vue自定义指令)
  • 在小程序添加公司官网访问
  • 使用 Vue 2 搭建后台管理系统
  • 学习计算机网络(五)——ICMP协议
  • 仕考网:考外省公务员可以调回本地吗?
  • 保研考研机试攻略:第三章——数学(2)
  • uView的u-notice-bar组件横向滚动不生效问题解决
  • 《AI视频类工具之八——​ 快剪辑》
  • Android 使用 PatternsCompat.EMAIL_ADDRESS 判断邮箱、IP地址、域名格式是否正确
  • 基于SpringBoot框架的能源管理系统源代码(100%开源无加密)
  • Linux系统之部署轻量级Markdown文本编辑器
  • 来了...腾讯内推的软件测试面试PDF 文档(共107页)
  • 收藏网友的 源程序下载网
  • angular学习第一篇-----环境搭建
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CentOS7简单部署NFS
  • CSS中外联样式表代表的含义
  • express.js的介绍及使用
  • k8s如何管理Pod
  • python大佬养成计划----difflib模块
  • 初识 webpack
  • 记一次和乔布斯合作最难忘的经历
  • 坑!为什么View.startAnimation不起作用?
  • 延迟脚本的方式
  • 移动端解决方案学习记录
  • 白色的风信子
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ‌JavaScript 数据类型转换
  • # C++之functional库用法整理
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #162 (Div. 2)
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #知识分享#笔记#学习方法
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (11)MSP430F5529 定时器B
  • (2)STM32单片机上位机
  • (2)空速传感器
  • (bean配置类的注解开发)学习Spring的第十三天
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (备忘)Java Map 遍历
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计大学生兼职系统
  • (算法)大数的进制转换
  • (图)IntelliTrace Tools 跟踪云端程序
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET程序员迈向卓越的必由之路