小程序内部要安装wxml2canvas
github地址:https://github.com/liudongyun1215/wxml2canvas
npm init
yarn init
yarn add wxml2canvas
npm i wxml2canvas

import Wxml2Canvas from 'wxml2canvas';
drawCanvas: function () {
wx.showLoading({
title: '加载中'
})
const that = this
const query = wx.createSelectorQuery().in(this);
query.select('#answer-canvas').fields({ //answer-canvas要绘制的canvas的id
size: true,
scrollOffset: true
}, data => {
let width = data.width;
let height = data.height;
console.log(width, height);
that.setData({
width: width,
height: height
})
setTimeout(() => {
that.draw()
}, 1500);
}).exec()
},
draw(){
let that = this
//创建wxml2canvas对象
let drawImage = new Wxml2Canvas({
element: 'answerCanvas', // canvas节点的id,
obj: that, // 在组件中使用时,需要传入当前组件的this
width: 696, // 宽 自定义
height: 522, // 高 自定义
background: 'transparent', // 默认背景色 设置背景色
progress(percent) { // 绘制进度
// console.log(percent);
},
finish(url) {
console.log("创建的图片", url);
wx.hideLoading()
that.setData({
imgUrl: url
})
},
error(res) {
console.log(res);
// uni.hideLoading()
// 画失败的原因
}
}, this);
let data = {
//直接获取wxml数据
list: [{
type: 'wxml',
class: '.answer_canvas .answer_draw_canvas', // answer_canvas这边为要绘制的wxml元素跟元素类名, answer_draw_canvas要绘制的元素的类名(所有要绘制的元素都要添加该类名)
limit: '.answer_canvas', // 这边为要绘制的wxml元素跟元素类名,最外面的元素
x: 0,
y: 0
} ]
}
//传入数据,画制canvas图片
drawImage.draw(data, this);
}
canvas元素添加
<canvas canvas-id="answerCanvas" class="answerCanvas"></canvas>
生成后的图片展示
<image class="canvas_img" src="{{imgUrl}}" wx:if="{{imgUrl}}" show-menu-by-longpress="{{true}}"></image>
要生成图片的html元素
<view class="canvasImg answer_canvas " id="answer-canvas" wx:if="{{!imgUrl}}">
<view class="inner answer_draw_canvas" data-type="background-image">
<image class="left_icon answer_draw_canvas" src="/images/htsi/left_icon.png" data-type="image" data-url="/images/htsi/left_icon.png"></image>
<view class="name answer_draw_canvas" data-type="text" data-text="姓名:XXX">姓名:XXX</view>
<view class="desc answer_draw_canvas" data-type="text" data-text="这边是要绘制的文字">这边是要绘制的文字</view>
<view class="desc answer_draw_canvas" data-type="text" data-text="要绘制的文字描述">要绘制的文字描述</view>
<view class="bottom answer_draw_canvas">
<image src="https://img0.baidu.com/it/u=753216696,2669208484&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1657299600&t=c358bbe8685325dfa573277881d24cea" alt="" class="mini answer_draw_canvas" data-type="image" data-url='https://img0.baidu.com/it/u=753216696,2669208484&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1657299600&t=c358bbe8685325dfa573277881d24cea'/>
<view class="left answer_draw_canvas">
<text class="company answer_draw_canvas" data-type="text" data-text="要绘制的文字">要绘制的文字</text>
<text class="time answer_draw_canvas" data-type="text" data-text="2022年03月05日">2022年03月05日</text>
</view>
</view>
</view>
</view>
元素要添加背景图片的时候需要添加data-type=“background-image”
<view class="inner answer_draw_canvas" data-type="background-image"></view>
元素要是image的时候要添加data-type=“image” data-url=‘图片地址’, 这边图片地址要在小程序配置白名单,背景图片同下

文字绘制需要添加data-type=“text” data-text=“要绘制的文字”
<text class="time answer_draw_canvas" data-type="text" data-text="要绘制的文字">要绘制的文字</text>
要看一下是否设置了box-sizing: border-box;如果css设置了该属性会导致边框不出现
图片本地的正常引用,如果是链接的一定要保证配置白名单,详情见3.2,否则生成会一直加载中
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否