FA
Criar um componente para colher assinatura
Olá amigos,
Tenho a necessidade de colher assinaturas de solicitantes em dispositivos móveis como tablet ou celular, até achei um bom exemplo que responde bem, mas não consigo integra-lo com o Adianti. Será que alguém sabe como fazer ?
Abaixo deixo o HTML que é exemplo.
Tenho a necessidade de colher assinaturas de solicitantes em dispositivos móveis como tablet ou celular, até achei um bom exemplo que responde bem, mas não consigo integra-lo com o Adianti. Será que alguém sabe como fazer ?
Abaixo deixo o HTML que é exemplo.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8"/>
<title></title>
<style>
.wrapper {
position: relative;
width: 250px;
height: 367px;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
img {
position: absolute;
left: 0;
top: 0;
}
.signature-pad {
position: absolute;
left: 0;
top: 0;
width:250px;
height:367px;
}
</style>
</head>
<body>
<div class="wrapper">
<img src="Hatch.jpg" width=250 height=367 />
<canvas id="signature-pad" class="signature-pad" width=250 height=367></canvas>
</div>
<div>
<button id="save">Save</button>
<button id="clear">Clear</button>
</div>
<form action="">
<textarea name="" id="imageCheck" cols="30" rows="10"></textarea>
</form>
</body>
<script src="https://cdn.jsdelivr.net/npm/signature_pad@3.0.0-beta.3/dist/signature_pad.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha256-pasqAKBDmFT4eHoN2ndd6lN370kFiGUFyTiUHWhU7k8=" crossorigin="anonymous"></script>
<script>
function download(dataURL, filename) {
if (navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") === -1) {
window.open(dataURL);
} else {
var blob = dataURLToBlob(dataURL);
var url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
a.style = "display: none";
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
}
function dataURLToBlob(dataURL) {
// Code taken from https://github.com/ebidel/filer.js
var parts = dataURL.split(';base64,');
var contentType = parts[0].split(":")[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
var signaturePad = new SignaturePad(document.getElementById('signature-pad'), {
backgroundColor: 'rgba(255, 255, 255, 0)',
penColor: 'rgb(0, 0, 0)'
});
var saveButton = document.getElementById('save');
var cancelButton = document.getElementById('clear');
saveButton.addEventListener("click", function(event) {
if (signaturePad.isEmpty()) {
alert("Faça sua assinatura.");
} else {
var dataURL = signaturePad.toDataURL();
//download(dataURL, "signature.png");
//alert(dataURL);
$("#imageCheck").val(dataURL);
}
});
cancelButton.addEventListener('click', function(event) {
signaturePad.clear();
});
</script>
</html>
Bom dia, você precisa criar um componente, não irei criar completo pela a falta de tempo, mas dentro de libwidgets da app tem exemplo pra você criar seus próprios componentes.
De maneira grosseira de organização de codigos você pode criar algo asssim
Coloquei a biblioteca https://cdn.jsdelivr.net/npm/signature_pad@3.0.0-beta.3/dist/signature_pad.umd.min.js nas libs do projeto e obtive o resultado.
Resultado aqui: https://ibb.co/QD5DmhZ</canvas>
Boa Noite Marcelo,
Cara, era bem isso que estava precisando, tinha me esquecido completamente da capacidade do Adianti criar novos componentes. Bem, todavia eu preciso salvar a imagem, assim tive de fazer alguns ajustes para tanto.
Acrescentei algumas boxes para poder dispor dos botões de salvar e limpar o campo, além disto criei um método que retorna onde a imagem foi salva sendo o $componente->getImage().
Mas nem tudo está perfeito pois não estou conseguindo redimensionar de forma satisfatória usando o comando $componente->setSize(X,Y), se puder me ajudar fico muito grato.
Baixo o arquivo que salva no servidor os dados oriundos do componente.
Ainda penso que seria interessante fazer a carga da assinatura anterior dentro do próprio canvas, mas da forma que já está ficou muito bom.
Estou tentando fazer funcionar este código e não consigo há alguma possibilidade de me ajduar?
Podemos conversar sim...
pode me mandar um whatss (41)991019337
eu escrevi o Código conforme acima mais não salvou a imagem na pasta tmp
estou parado com e erro na linha 12
]
Me chama no zap 62 992447470
Olá Fernando
Estou criando uma aplicação de Checklist e para finalizar preciso pegar as assinaturas, vi esse post no Fórum e tentei utilizá-lo, até cheguei a fazer com que ele mostrasse na tela, os botões de salvar e limpar, porém não escreve, na vez que consegui fazer com que escrevesse ficou perdido a assinatura pela página.
Com não tenho muito experiência na programação web, estou tentando desmamar do Delphi, e escolhi o Adianti para isso. Tenho evoluído em cima de exemplos, teria algum exemplo da chamada do componente, tentei colocar numa TWindow aparece bonitinho mas não funciona, na TPage até chegou a funcionar , porém ficou da forma que comentei acima.
Ficarei agradecido se puder me auxiliar nesse probleminha.
Tentei chamar assim para testar o componente, não sei se é o correto, colocando TWindow visualiza melhor, com TPage os botões ficam escondidos.