简体   繁体   English

无法在 jSignature 中导入现有数据

[英]Unable import existing data in jSignature

This is the code I'm saving my jSignature value in my database:这是我在数据库中保存 jSignature 值的代码:

var datapair = $('.sign-wrapper').jSignature();
datapair.bind('change', function(e){
        var data = datapair.jSignature("getData", "svgbase64");
        var i = new Image()
        i.src = "data:" + data[0] + "," + data[1];

        $(this).prev('input').val(i.src);
});

So I'm having following value in my DB:所以我在我的数据库中有以下价值:

data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iODkiIGhlaWdodD0iMTEyIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNIDEgMTExIGMgMC4wNCAtMC4xNCAxLjAyIC01LjQ1IDIgLTggYyAyLjM0IC02LjA4IDUuOSAtMTEuODcgOCAtMTggYyAxLjg2IC01LjQ0IDMuMDkgLTExLjIyIDQgLTE3IGMgMS4xIC02Ljk4IDAuODggLTEzLjk4IDIgLTIxIGMgMS4yNSAtNy44MyAzLjA0IC0xNS4zOSA1IC0yMyBjIDAuNzEgLTIuNzYgMS43NiAtNS41MiAzIC04IGMgMS4wNSAtMi4wOSAyLjUyIC00LjA4IDQgLTYgYyAxLjg5IC0yLjQ2IDMuOTIgLTQuOTIgNiAtNyBjIDAuODEgLTAuODEgMi4yNiAtMi4yMiAzIC0yIGMgMS43NyAwLjUzIDUuMzcgMyA3IDUgYyAyLjM3IDIuOTEgNC40NiA3LjEzIDYgMTEgYyA1LjQ2IDEzLjc5IDkuMzIgMjguNTIgMTUgNDIgYyAyLjIzIDUuMjkgNi4zOCA5Ljc2IDkgMTUgYyAzLjQyIDYuODQgNS43NiAxNC43NiA5IDIxIGwgNCA0Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTSAyMCA2NCBjIDAuMTEgLTAuMTIgMy43MyAtNS40IDYgLTcgYyAyLjk4IC0yLjEgNy4yMSAtMy44NSAxMSAtNSBjIDcuMDcgLTIuMTQgMTQuNzggLTMuNzEgMjIgLTUgYyAxLjkyIC0wLjM0IDYgMCA2IDAiLz48L3N2Zz4=

So while reloading the page I'm having the above base64 image data url in a hidden variable.因此,在重新加载页面时,我将上述 base64 图像数据 url 放在一个隐藏变量中。

I tried to load the data to the existing signature canvas using below code:我尝试使用以下代码将数据加载到现有的签名画布:

// If value exist load existing
      var src = $(this).prev('input').val();
      if(src != '') {
        datapair.jSignature("importData", src);
      }

But it is not working and I am getting following error in console:但它不起作用,我在控制台中收到以下错误:

Uncaught Error: jSignature is unable to find import plugin with for format 'image/svg+xml;base64'未捕获的错误:jSignature 无法找到格式为“image/svg+xml;base64”的导入插件

The problem occurs when your data is not recognized by the plugin. 插件无法识别您的数据时,会发生问题。

The reason why it throws an error is, the format 'image/svg+xml;base64' is not supported by the importer, there is only an exporter support for it. 引发错误的原因是,导入器不支持格式'image / svg + xml; base64',只有导出器支持。

Reference: https://github.com/brinley/jSignature#data-import--export-and-plugins 参考: https : //github.com/brinley/jSignature#data-import--export-and-plugins

I suggest you store the data using base30 because there is support for both export and import. 我建议您使用base30存储数据,因为同时支持导出和导入。

var data = datapair.jSignature("getData", "base30 ");

setData takes two arguments - data object, data format name. setData 有两个参数 - 数据对象,数据格式名称。 When data object is a string formatted in data-url pattern you don't need to specify the data dormat name.当数据对象是一个以 data-url 模式格式化的字符串时,您不需要指定数据宿舍名称。 The data format name (mime) will be implied from the data-url prefix.数据格式名称 (mime) 将从 data-url 前缀中隐含。 See example below for that.请参阅下面的示例。 Returns (in a traditional jQuery chainable way) jQuery object ref to the element onto which the plugin was applied.返回(以传统的 jQuery 链接方式)jQuery 对象 ref 到应用了插件的元素。

You can store the value in base64 and load it.您可以将值存储在 base64 中并加载它。 I load the value in base64 in an input and through Jquery I load it in the object.我在输入中加载 base64 中的值,并通过 Jquery 将它加载到对象中。

// Creo el objeto de firma.
$("#jq_sig").jSignature
({
    // width/height of signature pad
    width: 497,
    height: 200,
    // Format bootstrap 4
    cssclass: "bg-light border",
    lineWidth: 2,
    color: "black",
});

// I take the value of the form field that I previously loaded with PHP.
var firma = $('#form input[name=firma]').val();

if (firma.length > 0) 
{
    $("#jq_sig").jSignature("setData", 'data:image/png;base64,' + firma);                       
    console.log('Signature loaded.');
}
else
{
    console.log('Signature not loaded.');
}

You can save to your database in any format.您可以以任何格式保存到您的数据库。 Then you tell 'setdata' what kind of format it is.然后你告诉'setdata'它是什么格式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM