{"id":23,"date":"2022-02-05T22:25:53","date_gmt":"2022-02-05T22:25:53","guid":{"rendered":"https:\/\/kourentzes.com\/konstantinos\/?p=23"},"modified":"2022-02-05T22:25:53","modified_gmt":"2022-02-05T22:25:53","slug":"capture-signature","status":"publish","type":"post","link":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/","title":{"rendered":"Capture Signature"},"content":{"rendered":"<blockquote>\n<pre class=\"prettyprint lang-js prettyprinted\"><span class=\"kwd\">function<\/span><span class=\"pln\"> signatureCapture<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> canvas <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getElementById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"newSignature\"<\/span><span class=\"pun\">);<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> context <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getContext<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"2d\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n  canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">width <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">276<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">height <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">180<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">fillStyle <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"#fff\"<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">strokeStyle <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"#444\"<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">lineWidth <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">1.5<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">lineCap <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"round\"<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">fillRect<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">width<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">height<\/span><span class=\"pun\">);<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> disableSave <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> pixels <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">[];<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> cpixels <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">[];<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> xyLast <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">{};<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> xyAddLast <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">{};<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> calculate <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span>\n  <span class=\"pun\">{<\/span>   <span class=\"com\">\/\/functions<\/span>\n    <span class=\"kwd\">function<\/span><span class=\"pln\"> remove_event_listeners<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mousemove'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousemove<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mouseup'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchmove'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousemove<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchend'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n\n      document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">body<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mouseup'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">body<\/span><span class=\"pun\">.<\/span><span class=\"pln\">removeEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchend'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span>\n    <span class=\"pun\">}<\/span>\n\n    <span class=\"kwd\">function<\/span><span class=\"pln\"> get_coords<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> y<\/span><span class=\"pun\">;<\/span>\n\n      <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">changedTouches <\/span><span class=\"pun\">&amp;&amp;<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">changedTouches<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">])<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">var<\/span><span class=\"pln\"> offsety <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetTop <\/span><span class=\"pun\">||<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span>\n        <span class=\"kwd\">var<\/span><span class=\"pln\"> offsetx <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetLeft <\/span><span class=\"pun\">||<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n\n        x <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">changedTouches<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">].<\/span><span class=\"pln\">pageX <\/span><span class=\"pun\">-<\/span><span class=\"pln\"> offsetx<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n        y <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">changedTouches<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">].<\/span><span class=\"pln\">pageY <\/span><span class=\"pun\">-<\/span><span class=\"pln\"> offsety<\/span><span class=\"pun\">;<\/span>\n      <span class=\"pun\">}<\/span> <span class=\"kwd\">else<\/span> <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">layerX <\/span><span class=\"pun\">||<\/span> <span class=\"lit\">0<\/span> <span class=\"pun\">==<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">layerX<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        x <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">layerX<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n        y <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">layerY<\/span><span class=\"pun\">;<\/span>\n      <span class=\"pun\">}<\/span> <span class=\"kwd\">else<\/span> <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetX <\/span><span class=\"pun\">||<\/span> <span class=\"lit\">0<\/span> <span class=\"pun\">==<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetX<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        x <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetX<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n        y <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">offsetY<\/span><span class=\"pun\">;<\/span>\n      <span class=\"pun\">}<\/span>\n\n      <span class=\"kwd\">return<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        x <\/span><span class=\"pun\">:<\/span><span class=\"pln\"> x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> y <\/span><span class=\"pun\">:<\/span><span class=\"pln\"> y\n      <\/span><span class=\"pun\">};<\/span>\n    <span class=\"pun\">};<\/span>\n\n    <span class=\"kwd\">function<\/span><span class=\"pln\"> on_mousedown<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n      e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">preventDefault<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">stopPropagation<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mouseup'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mousemove'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousemove<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchend'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchmove'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousemove<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">body<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mouseup'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">body<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchend'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n\n      empty <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span>\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> xy <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> get_coords<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">beginPath<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      pixels<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"str\">'moveStart'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">moveTo<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      pixels<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      xyLast <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">;<\/span>\n    <span class=\"pun\">};<\/span>\n\n    <span class=\"kwd\">function<\/span><span class=\"pln\"> on_mousemove<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> finish<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n      e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">preventDefault<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      e<\/span><span class=\"pun\">.<\/span><span class=\"pln\">stopPropagation<\/span><span class=\"pun\">();<\/span>\n\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> xy <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> get_coords<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">);<\/span>\n      <span class=\"kwd\">var<\/span><span class=\"pln\"> xyAdd <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        x <\/span><span class=\"pun\">:<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">\/<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\n        y <\/span><span class=\"pun\">:<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">\/<\/span> <span class=\"lit\">2<\/span>\n      <span class=\"pun\">};<\/span>\n\n      <span class=\"kwd\">if<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">calculate<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span>\n        <span class=\"kwd\">var<\/span><span class=\"pln\"> xLast <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">xyAddLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">\/<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">;<\/span>\n        <span class=\"kwd\">var<\/span><span class=\"pln\"> yLast <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">xyAddLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y <\/span><span class=\"pun\">+<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">\/<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n        pixels<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xLast<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> yLast<\/span><span class=\"pun\">);<\/span>\n      <span class=\"pun\">}<\/span> <span class=\"kwd\">else<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n        calculate <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\n      <span class=\"pun\">}<\/span><span class=\"pln\">\n\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">quadraticCurveTo<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xyLast<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      pixels<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">stroke<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">beginPath<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">moveTo<\/span><span class=\"pun\">(<\/span><span class=\"pln\">xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">x<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">.<\/span><span class=\"pln\">y<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      xyAddLast <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> xyAdd<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n      xyLast <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> xy<\/span><span class=\"pun\">;<\/span>\n\n    <span class=\"pun\">};<\/span>\n\n    <span class=\"kwd\">function<\/span><span class=\"pln\"> on_mouseup<\/span><span class=\"pun\">(<\/span><span class=\"pln\">e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\n      remove_event_listeners<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      disableSave <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\n      context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">stroke<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\n      pixels<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"str\">'e'<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n      calculate <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span>\n    <span class=\"pun\">};<\/span>\n  <span class=\"pun\">}<\/span><span class=\"pln\">\n  canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'touchstart'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousedown<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n  canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addEventListener<\/span><span class=\"pun\">(<\/span><span class=\"str\">'mousedown'<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> on_mousedown<\/span><span class=\"pun\">,<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span>\n<span class=\"pun\">}<\/span>\n\n<span class=\"kwd\">function<\/span><span class=\"pln\"> signatureSave<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> canvas <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getElementById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"newSignature\"<\/span><span class=\"pun\">);<\/span><span class=\"com\">\/\/ save canvas image as data url (png format by default)<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> dataURL <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">toDataURL<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"image\/png\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n  document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getElementById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"saveSignature\"<\/span><span class=\"pun\">).<\/span><span class=\"pln\">src <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dataURL<\/span><span class=\"pun\">;<\/span>\n<span class=\"pun\">};<\/span>\n\n<span class=\"kwd\">function<\/span><span class=\"pln\"> signatureClear<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> canvas <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> document<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getElementById<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"newSignature\"<\/span><span class=\"pun\">);<\/span>\n  <span class=\"kwd\">var<\/span><span class=\"pln\"> context <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getContext<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"2d\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\n  context<\/span><span class=\"pun\">.<\/span><span class=\"pln\">clearRect<\/span><span class=\"pun\">(<\/span><span class=\"lit\">0<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">width<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> canvas<\/span><span class=\"pun\">.<\/span><span class=\"pln\">height<\/span><span class=\"pun\">);<\/span>\n<span class=\"pun\">}<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<pre class=\"prettyprint lang-html prettyprinted\"><span class=\"dec\">&lt;!DOCTYPE html&gt;<\/span>\n<span class=\"tag\">&lt;html&gt;<\/span>\n  <span class=\"tag\">&lt;head&gt;<\/span>\n    <span class=\"tag\">&lt;meta<\/span> <span class=\"atn\">http-equiv<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"Content-Type\"<\/span> <span class=\"atn\">content<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"text\/html; charset=UTF-8\"<\/span><span class=\"tag\">&gt;<\/span>\n    <span class=\"tag\">&lt;script<\/span> <span class=\"atn\">src<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"todataurl.js\"<\/span><span class=\"tag\">&gt;&lt;\/script&gt;<\/span>\n    <span class=\"tag\">&lt;script<\/span> <span class=\"atn\">src<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"signature.js\"<\/span><span class=\"tag\">&gt;&lt;\/script&gt;<\/span>\n  <span class=\"tag\">&lt;\/head&gt;<\/span>\n  <span class=\"tag\">&lt;body&gt;<\/span>\n    <span class=\"tag\">&lt;div<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"canvas\"<\/span><span class=\"tag\">&gt;<\/span>\n      <span class=\"tag\">&lt;canvas<\/span> <span class=\"atn\">class<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"roundCorners\"<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"newSignature\"<\/span>\n      <span class=\"atn\">style<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">position<\/span><span class=\"pun\">:<\/span><span class=\"pln\"> relative<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> margin<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> padding<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> border<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">1px<\/span><span class=\"pln\"> solid <\/span><span class=\"com\">#c4caac;<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;&lt;\/canvas&gt;<\/span>\n    <span class=\"tag\">&lt;\/div&gt;<\/span>\n    <span class=\"tag\">&lt;script&gt;<\/span><span class=\"pln\">signatureCapture<\/span><span class=\"pun\">();<\/span><span class=\"tag\">&lt;\/script&gt;<\/span>\n    <span class=\"tag\">&lt;button<\/span> <span class=\"atn\">type<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"button\"<\/span> <span class=\"atn\">onclick<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">signatureSave<\/span><span class=\"pun\">()<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">Save signature<\/span><span class=\"tag\">&lt;\/button&gt;<\/span>\n    <span class=\"tag\">&lt;button<\/span> <span class=\"atn\">type<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"button\"<\/span> <span class=\"atn\">onclick<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"<\/span><span class=\"pln\">signatureClear<\/span><span class=\"pun\">()<\/span><span class=\"atv\">\"<\/span><span class=\"tag\">&gt;<\/span><span class=\"pln\">Clear signature<\/span><span class=\"tag\">&lt;\/button&gt;<\/span>\n    <span class=\"tag\">&lt;\/br&gt;<\/span><span class=\"pln\">\n    Saved Image\n    <\/span><span class=\"tag\">&lt;\/br&gt;<\/span>\n    <span class=\"tag\">&lt;img<\/span> <span class=\"atn\">id<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"saveSignature\"<\/span> <span class=\"atn\">alt<\/span><span class=\"pun\">=<\/span><span class=\"atv\">\"Saved image png\"<\/span><span class=\"tag\">\/&gt;<\/span>\n  <span class=\"tag\">&lt;\/body&gt;<\/span>\n<span class=\"tag\">&lt;\/html&gt;<\/span><\/pre>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>function signatureCapture() { var canvas = document.getElementById(&#8220;newSignature&#8221;); var context = canvas.getContext(&#8220;2d&#8221;); canvas.width = 276; canvas.height = 180; context.fillStyle = &#8220;#fff&#8221;; context.strokeStyle = &#8220;#444&#8221;; context.lineWidth = 1.5; context.lineCap = &#8220;round&#8221;; context.fillRect(0, 0, canvas.width, canvas.height); var disableSave = true; var pixels = []; var cpixels = []; var xyLast = {}; var xyAddLast = {}; var calculate&#8230;<\/p>\n<p class=\"more-link-wrap\"><a href=\"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &ldquo;Capture Signature&rdquo;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10],"tags":[17,21,20,19],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-code-snipperts","tag-capture-signature","tag-html","tag-javascript","tag-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Capture Signature - konstantinos.kourentzes.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Capture Signature - konstantinos.kourentzes.com\" \/>\n<meta property=\"og:description\" content=\"function signatureCapture() { var canvas = document.getElementById(&quot;newSignature&quot;); var context = canvas.getContext(&quot;2d&quot;); canvas.width = 276; canvas.height = 180; context.fillStyle = &quot;#fff&quot;; context.strokeStyle = &quot;#444&quot;; context.lineWidth = 1.5; context.lineCap = &quot;round&quot;; context.fillRect(0, 0, canvas.width, canvas.height); var disableSave = true; var pixels = []; var cpixels = []; var xyLast = {}; var xyAddLast = {}; var calculate...Read More &ldquo;Capture Signature&rdquo; &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/\" \/>\n<meta property=\"og:site_name\" content=\"konstantinos.kourentzes.com\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-05T22:25:53+00:00\" \/>\n<meta name=\"author\" content=\"Konstantinos Kourentzes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@kkourentzes\" \/>\n<meta name=\"twitter:site\" content=\"@kkourentzes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Konstantinos Kourentzes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/\"},\"author\":{\"name\":\"Konstantinos Kourentzes\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#\\\/schema\\\/person\\\/2693fb0ad7f7638a020431ffe372c822\"},\"headline\":\"Capture Signature\",\"datePublished\":\"2022-02-05T22:25:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/\"},\"wordCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#\\\/schema\\\/person\\\/2693fb0ad7f7638a020431ffe372c822\"},\"keywords\":[\"capture signature\",\"HTML\",\"javascript\",\"JS\"],\"articleSection\":[\"Code Snippets\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/\",\"url\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/\",\"name\":\"Capture Signature - konstantinos.kourentzes.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#website\"},\"datePublished\":\"2022-02-05T22:25:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/2022\\\/02\\\/05\\\/capture-signature\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Capture Signature\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#website\",\"url\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/\",\"name\":\"kourentzes.com\\\/konstantinos\",\"description\":\"Konstantinos Kourentzes\",\"publisher\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#\\\/schema\\\/person\\\/2693fb0ad7f7638a020431ffe372c822\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/#\\\/schema\\\/person\\\/2693fb0ad7f7638a020431ffe372c822\",\"name\":\"Konstantinos Kourentzes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/kko.png\",\"url\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/kko.png\",\"contentUrl\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/kko.png\",\"width\":2835,\"height\":2268,\"caption\":\"Konstantinos Kourentzes\"},\"logo\":{\"@id\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/kko.png\"},\"description\":\"Konstantinos Kourentzes is a distinguished technologist and Enterprise Resource Planning (ERP) consultant renowned for his expertise in delivering cutting-edge technology solutions. Based in Marousi, Greece, he has a knack for seamlessly integrating data-driven systems, empowering businesses to streamline their operations and achieve peak efficiency. A fervent proponent of innovation, Konstantinos is committed to instigating revolutionary shifts within organizations. His approach revolves around delivering custom-tailored ERP solutions that seamlessly align with each business's distinctive requirements. This catalyzes enduring collaborations rooted in unwavering trust and tangible outcomes. With a background rooted in technology and a passion for optimizing business processes, Konstantinos is your go-to partner for harnessing the power of ERP systems to unlock operational excellence. Connect with Konstantinos on LinkedIn to explore how his technological insights can drive your business to new heights.\",\"sameAs\":[\"https:\\\/\\\/kourentzes.com\\\/konstantinos\",\"https:\\\/\\\/x.com\\\/kkourentzes\"],\"url\":\"https:\\\/\\\/kourentzes.com\\\/konstantinos\\\/index.php\\\/author\\\/administrator\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Capture Signature - konstantinos.kourentzes.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/","og_locale":"en_US","og_type":"article","og_title":"Capture Signature - konstantinos.kourentzes.com","og_description":"function signatureCapture() { var canvas = document.getElementById(\"newSignature\"); var context = canvas.getContext(\"2d\"); canvas.width = 276; canvas.height = 180; context.fillStyle = \"#fff\"; context.strokeStyle = \"#444\"; context.lineWidth = 1.5; context.lineCap = \"round\"; context.fillRect(0, 0, canvas.width, canvas.height); var disableSave = true; var pixels = []; var cpixels = []; var xyLast = {}; var xyAddLast = {}; var calculate...Read More &ldquo;Capture Signature&rdquo; &raquo;","og_url":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/","og_site_name":"konstantinos.kourentzes.com","article_published_time":"2022-02-05T22:25:53+00:00","author":"Konstantinos Kourentzes","twitter_card":"summary_large_image","twitter_creator":"@kkourentzes","twitter_site":"@kkourentzes","twitter_misc":{"Written by":"Konstantinos Kourentzes","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/#article","isPartOf":{"@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/"},"author":{"name":"Konstantinos Kourentzes","@id":"https:\/\/kourentzes.com\/konstantinos\/#\/schema\/person\/2693fb0ad7f7638a020431ffe372c822"},"headline":"Capture Signature","datePublished":"2022-02-05T22:25:53+00:00","mainEntityOfPage":{"@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/"},"wordCount":2,"publisher":{"@id":"https:\/\/kourentzes.com\/konstantinos\/#\/schema\/person\/2693fb0ad7f7638a020431ffe372c822"},"keywords":["capture signature","HTML","javascript","JS"],"articleSection":["Code Snippets"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/","url":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/","name":"Capture Signature - konstantinos.kourentzes.com","isPartOf":{"@id":"https:\/\/kourentzes.com\/konstantinos\/#website"},"datePublished":"2022-02-05T22:25:53+00:00","breadcrumb":{"@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kourentzes.com\/konstantinos\/index.php\/2022\/02\/05\/capture-signature\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kourentzes.com\/konstantinos\/"},{"@type":"ListItem","position":2,"name":"Capture Signature"}]},{"@type":"WebSite","@id":"https:\/\/kourentzes.com\/konstantinos\/#website","url":"https:\/\/kourentzes.com\/konstantinos\/","name":"kourentzes.com\/konstantinos","description":"Konstantinos Kourentzes","publisher":{"@id":"https:\/\/kourentzes.com\/konstantinos\/#\/schema\/person\/2693fb0ad7f7638a020431ffe372c822"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kourentzes.com\/konstantinos\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/kourentzes.com\/konstantinos\/#\/schema\/person\/2693fb0ad7f7638a020431ffe372c822","name":"Konstantinos Kourentzes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kourentzes.com\/konstantinos\/wp-content\/uploads\/2022\/02\/kko.png","url":"https:\/\/kourentzes.com\/konstantinos\/wp-content\/uploads\/2022\/02\/kko.png","contentUrl":"https:\/\/kourentzes.com\/konstantinos\/wp-content\/uploads\/2022\/02\/kko.png","width":2835,"height":2268,"caption":"Konstantinos Kourentzes"},"logo":{"@id":"https:\/\/kourentzes.com\/konstantinos\/wp-content\/uploads\/2022\/02\/kko.png"},"description":"Konstantinos Kourentzes is a distinguished technologist and Enterprise Resource Planning (ERP) consultant renowned for his expertise in delivering cutting-edge technology solutions. Based in Marousi, Greece, he has a knack for seamlessly integrating data-driven systems, empowering businesses to streamline their operations and achieve peak efficiency. A fervent proponent of innovation, Konstantinos is committed to instigating revolutionary shifts within organizations. His approach revolves around delivering custom-tailored ERP solutions that seamlessly align with each business's distinctive requirements. This catalyzes enduring collaborations rooted in unwavering trust and tangible outcomes. With a background rooted in technology and a passion for optimizing business processes, Konstantinos is your go-to partner for harnessing the power of ERP systems to unlock operational excellence. Connect with Konstantinos on LinkedIn to explore how his technological insights can drive your business to new heights.","sameAs":["https:\/\/kourentzes.com\/konstantinos","https:\/\/x.com\/kkourentzes"],"url":"https:\/\/kourentzes.com\/konstantinos\/index.php\/author\/administrator\/"}]}},"_links":{"self":[{"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":1,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"predecessor-version":[{"id":24,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/posts\/23\/revisions\/24"}],"wp:attachment":[{"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kourentzes.com\/konstantinos\/index.php\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}