上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[JS库]invoice-ofd2json 解析电子发票ofd为json

[复制链接]
  • TA的每日心情
    慵懒
    前天 23:59
  • 签到天数: 634 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-9-4 10:17:38 | 显示全部楼层 | 阅读模式

    如何使用? 库问题反馈 给库评分 查看代码

    额外说明

    库已做兼容处理,一份代码同时兼容HTML(现代浏览器)、JS(脚本猫油猴)、Node.js
    不只局限于脚本管理器(脚本猫油猴)

    开源仓库

    GitHub: https://github.com/DreamNya/invoice-ofd2json
    NPM: https://www.npmjs.com/package/invoice-ofd2json

    说明

    功能

    轻量化JavaScript库,可解析输入的ofd发票文件内容,并将其提取转为json格式输出

    特点

    • 可解析电子发票
    • 可解析全电发票
    • 轻量化JavaScript库
    • 即开即用 易于使用
    • 兼容前端浏览器
    • 兼容后端Node.js

    TODO(欢迎PR)

    • 兼容特殊类型发票(例如:成品油、建筑服务类特殊发票,缺少特殊发票样本)
    • 可解析多页发票、销货清单(目前暂时只支持解析发票第一页,缺少多页发票样本)

    原理

    通过JSZip解压ofd发票,提取CustomTag.xml以及Pages/*/Content.xml文件并对其进行解析

    (所有解析内容来源均为ofd发票文件,仅支持正规格式。受ofd格式限制,文件内部分信息缺失,暂时无法做到100%准确,仅能依靠预定义解决)

    使用方法

    Node.js

    安装(NPM)

    npm install invoice-ofd2json

    使用

    const ofd2json = require("invoice-ofd2json");
    /**
     * 解析输入的ofd文件内容并将其转换为json输出
     * @param ofd 任意符合JSZip输入格式的ofd文件格式
     * @param logMessage 用于调试输出时附带的信息
     * @Return json格式的解析后的ofd内容
     */
    await ofd2json(ofd, ?logMessage)

    Browser

    安装(CDN)

    <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/invoice-ofd2json/src/parser.js" crossorigin="anonymous"></script>

    使用

    /**
     * 解析输入的ofd文件内容并将其转换为json输出
     * @param ofd 任意符合JSZip输入格式的ofd文件格式
     * @param logMessage 用于调试输出时附带的信息
     * @return json格式的解析后的ofd内容
     */
    await ofd2json(ofd, ?logMessage)

    UserScript

    安装(CDN)

    @require https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js
    @require https://cdn.jsdelivr.net/npm/invoice-ofd2json/src/parser.js

    安装(ScriptCat)

    // @require https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js
    // @require https://scriptcat.org/lib/1265/1.0.1/invoice-ofd2json.js

    使用

    /**
     * 解析输入的ofd文件内容并将其转换为json输出
     * @param ofd 任意符合JSZip输入格式的ofd文件格式
     * @param logMessage 用于调试输出时附带的信息
     * @return json格式的解析后的ofd内容
     */
    await ofd2json(ofd, ?logMessage)

    应用场景

    详见Demo
    (UserScript Demo待补充)

    License

    MIT

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3907

    回帖

    3828

    积分

    管理员

    积分
    3828

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-9-4 10:32:36 | 显示全部楼层
    太强了!
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    59

    回帖

    88

    积分

    初级工程师

    积分
    88
    发表于 2023-9-4 14:28:16 | 显示全部楼层
    好奇问问,为什么不提供 esm 格式
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 23:59
  • 签到天数: 634 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-9-4 14:30:15 | 显示全部楼层
    shabby 发表于 2023-9-4 14:28
    好奇问问,为什么不提供 esm 格式

    因为懒得转……实际没多少行代码,就一个单js文件
    cjs反正也能import
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    59

    回帖

    88

    积分

    初级工程师

    积分
    88
    发表于 2023-9-4 16:02:20 | 显示全部楼层
    steven026 发表于 2023-9-4 14:30
    因为懒得转……实际没多少行代码,就一个单js文件
    cjs反正也能import

    哈哈也对
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表