首页 > 解决方案 > 是否可以将 SVG 转换为字符串 p:signature 使用?

问题描述

我正在从另一个应用程序获取 SVG 签名,并希望将其保存为字符串值,以便我们可以在当前应用程序上使用 PrimeFaces 签名。

这可能吗?

当前的 SVG

<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny" viewBox="0, 0, 1320, 800" height="800" width="1320">
  <g stroke-linejoin="round" stroke-linecap="round" fill="none" stroke="black">
    <path stroke-width="24" d="M1068,420c0,0 0,0 0,0 "/>
    <path stroke-width="27" d="M1068,420c-1,-1 -1,-1 -1,-1 "/>
    <path stroke-width="25" d="M1067,419c1,-1 1,0 3,-1 1,0 1,0 1,0 "/>
  </g>
</svg>

Primefaces 签名使用字符串
示例

{"lines":[[211.91,90.72],[209.91,90.72]]}

从 svg 中提取的路径。

 M154,223c0,0 0,0 0,0
 M154,223c0,1 0,1 0,3
 M154,226c1,1 1,2 3,3
 M157,229c14,4 14,5 28,8
 M185,237c52,11 52,12 104,20
 M289,257c62,9 62,9 124,13 62,3 62,-1 123,0 65,1 65,2 130,3 43,0 43,0 87,-2 25,-1 26,-2 51,-6
 M804,265c10,-2 10,-3 19,-6

更新
在评论中尝试了建议的转换

但结果不够准确,无法使用。

原始转换

标签: svgprimefacesdigital-signature

解决方案


你不会(轻易)成功。我尝试了许多(几乎两打)基于 svg 的“签名”,我在互联网上搜索并得出以下结论:

  • 大多数签名不是具有(可变)粗细/宽度的线条,而是轮廓
  • 其中许多由 SVG 中以不同方式构造的多条线组成
  • 前写,有时返回

使用引用的代码将这些路径转换为多边形在某些情况下会(非常)接近,但在大多数情况下不会。您可能会尝试改进代码,但很可能您甚至无法达到 25% 的准确度,我的意思是 75% 的转换不会足够接近。

这让我想到了真正的问题。这可能是http://xyproblem.info,我个人只是展示 SVG,如果是因为一些遗留问题,我会选择性地通过 PrimeFaces 签名组件展示新签名,通过 SVG 展示旧签名或显示全部通过 SVG 轻松将 PrimeFaces 签名转换为 SVG


推荐阅读