You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JsBarcode生成的条码导出为SVG或PNG而非PDF?

解决JsBarcode条码导出为SVG/PNG的问题

问题说明

当前使用JsBarcode生成条码后,点击原有打印按钮会以PDF形式输出,需改为直接导出SVG或PNG格式文件。

解决方案

导出SVG

JsBarcode生成的条码本身就是SVG元素,直接提取其XML内容即可生成可下载文件:

  • 获取SVG元素的完整XML代码
  • 将内容转为Blob对象
  • 创建下载链接并触发浏览器下载

导出PNG

需要先将SVG转换为Canvas,再导出为PNG图片:

  • 创建与SVG尺寸匹配的Canvas元素
  • 将SVG内容转为Data URL并加载为图片
  • 将图片绘制到Canvas上,再导出为PNG格式

修改后的完整代码

HTML代码

<input class="form-control" type="text" placeholder="输入条码内容">
<svg class="hidden" id="barcode" width="100" height="100"></svg>
<button class="btn btn-outline-danger">生成条码</button>
<button class="btn btn-outline-success" onclick="exportAsSVG()">导出SVG</button>
<button class="btn btn-outline-success" onclick="exportAsPNG()">导出PNG</button>

<script src="jsBarcode.code128.min.js"></script>
<script src="index.js"></script>

JavaScript代码

document.querySelector("button").addEventListener("click", function() {
    var text = document.querySelector("input").value;
    JsBarcode("#barcode", text);
    document.getElementById("barcode").classList.remove("hidden");
});

// 导出SVG函数
function exportAsSVG() {
    const svgElement = document.getElementById("barcode");
    const svgData = new XMLSerializer().serializeToString(svgElement);
    const blob = new Blob([svgData], {type: "image/svg+xml;charset=utf-8"});
    const url = URL.createObjectURL(blob);
    
    const downloadLink = document.createElement("a");
    downloadLink.href = url;
    downloadLink.download = "barcode.svg";
    document.body.appendChild(downloadLink);
    downloadLink.click();
    document.body.removeChild(downloadLink);
    URL.revokeObjectURL(url);
}

// 导出PNG函数
function exportAsPNG() {
    const svgElement = document.getElementById("barcode");
    const svgData = new XMLSerializer().serializeToString(svgElement);
    const canvas = document.createElement("canvas");
    const ctx = canvas.getContext("2d");
    
    // 同步Canvas与SVG的尺寸
    canvas.width = svgElement.getAttribute("width");
    canvas.height = svgElement.getAttribute("height");
    
    const img = new Image();
    img.onload = function() {
        ctx.drawImage(img, 0, 0);
        const pngUrl = canvas.toDataURL("image/png");
        
        const downloadLink = document.createElement("a");
        downloadLink.href = pngUrl;
        downloadLink.download = "barcode.png";
        document.body.appendChild(downloadLink);
        downloadLink.click();
        document.body.removeChild(downloadLink);
    };
    // 将SVG转为Data URL供图片加载
    img.src = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData)));
}

注意事项

  • 若SVG引用了外部资源(如自定义字体),转换PNG时可能出现样式丢失,需确保资源可本地访问
  • 如需更高清晰度的PNG,可按比例放大Canvas的宽高尺寸

内容的提问来源于stack exchange,提问作者Mohamed elsamadony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:41:13