---- 条 形 码 技 术 简 介
---- 条 形 码 作 为 一 种 识 别 输 入 技 术, 由 于 其 显 而 易 见 的 快 速、 准 确、 低 廉 等 优 点, 被 广 泛 应 用 于 商 品 流 通、 图 书 馆 管 理 等 众 多 的 自 动 化 管 理 系 统 中。
---- 条 形 码 是 利 用 条( 着 色 部 份)、 空( 非 着 色 部 份) 及 其 宽、 窄 的 交 替 变 换 来 表 达 信 息。 每 一 种 编 码, 都 制 定 有 字 符 与 条 空、 宽 窄 表 达 的 对 应 关 系, 只 要 遵 循 这 一 标 准 打 印 出 来 的 条、 空 交 替 排 列 的“ 图 形 符 号”, 这 一“ 图 形 符 号” 中 就 包 含 了 字 符 信 息; 当 识 读 器 划 过 这 一“ 图 形 符 号” 时, 这 一 条、 空 交 替 排 列 的 信 息 通 过 光 线 反 射, 在 识 读 器 内, 这 种 光 信 号 被 转 换 成 数 字 信 号, 再 经 过 相 应 的 解 码 软 件, 就 能 将“ 图 形 符 号” 还 原 成 字 符 信 息。
---- 三 九 码 是 一 种 应 用 比 较 普 遍 的 条 形 码, 它 长 度 可 变、 可 校 验, 容 纳 的 字 符 多 达43 个( 包 括 数 字0~9、 字 母A~Z 及 其 它 七 个 特 殊 字 符)。 由 于 在 表 示 每 一 字 符 时, 使 用9 个 元 素, 其 中3 个 宽 元 素、6 个 窄 元 素, 故 名39 码, 这3 个 宽 元 素 中 必 须 有 两 个 是 条( 有 四 个 特 殊 用 途 的 字 符 除 外)。 如 字 母“J” 的 编 码 规 则 为:“N N N N W W W N N”, 其 中N 表 示 窄 元 素,W 表 示 宽 元 素, 奇 数 位 为 条 元 素, 偶 数 位 为 空 元 素, 宽 窄 元 素 的 宽 度 尺 寸 比 为2~3, 且 在 同 一 个 条 码 中 必 须 是 固 定 的。 在 打 印 制 作 条 形 码 时, 条 是 需 要 打 印( 着 色) 的, 而 空 元 素 内 不 必 打 印 的, 不 过 要 将 其 宽 度 计 算 在 内。 对 于 某 一 要 打 印 的 字 符 串, 按 其 先 后 顺 序 打 印, 串 前 串 后 各 加 一 个“*” 符 号 做 为 起 始 符 与 终 止 符, 相 邻 的 字 符 间 在 打 印 时 由“ 位 空” 分 隔,“ 位 空” 类 似 空 元 素, 即 不 着 色 部 分, 其 宽 度 应 小 于1.35mm, 为 编 程 方 便, 通 常 取 为 一 个 窄 元 素 的 宽 度。
---- 条 形 码 的 制 作 有 制 版 印 刷、 轻 印 刷 两 种 方 式, 轻 印 刷 是 指 使 用 普 通 打 印 机, 在 计 算 机 控 制 下 制 作 条 形 码。 这 种 制 作 方 法 灵 活, 成 本 较 低, 即 适 宜 于 同 一 号 码 的 单 条 制 作, 也 可 用 于 同 一 号 码 的 大 量 制 作, 这 一 特 点 是 制 版 印 刷 无 可 替 代 的。 使 用 计 算 机 软 件 打 印 条 形 码, 其 原 理 是 将 条 形 码 作 为 图 形 来 看 待, 用 编 程 语 言 中 的 绘 图 语 句- 画 矩 形 框, 在 相 应 的 坐 标 上 画 出 各 种 宽 度 不 同 的 条 元 素, 这 样 即 可 实 现 条 形 码 的 计 算 机 软 件 打 印。
---- VB 中 几 种 打 印 功 能 在 条 码 打 印 时 的 比 较
---- Visual Basic 是 近 年 来 比 较 流 行 的 编 程 语 言, 功 能 强 大, 易 学 易 用。Visual Basic 对 打 印 功 能 提 供 了 两 种 输 出 方 式: 一 是 首 先 将 条 码 输 出 到 某 一 对 象, 再 使 用 该 对 象 中Print 方 法, 将 其 输 出 到 打 印 机; 二 是 使 用 打 印 机 对 像Printer 绘 图。 下 面 对 这 种 方 法 做 个 比 较:
---- 一、 将 条 形 码 图 在 窗 体 上 绘 出, 再 使 用PrintForm 方 法 打 印 窗 体。
窄 条 打 印:Line (x,y)-step(i,h),,bf
宽 条 打 印:Line (x,y)-step(3*i,h),,bf 或
Line (x,y)-step(2*i,h),,bf
---- 再 使 用formname.PrintForm 将 条 形 码 输 出 到 打 印 机。
---- 在 这 种 方 式 下, 窗 体 的 量 度 单 位 可 以 有:twip, point, picel 三 种 其 中 以twip 为 单 位 为 最 小。
---- 以twip 为 单 位, 对 条 形 码 来 说, 打 印 精 度 可 达30, 即 当 窄 元 素 宽 度 必 须 等 于 或 大 于30 时, 打 印 出 来 的 条 形 码 可 以 阅 读, 若 窄 元 素 的 宽 度 小 于30, 条 形 码 中 相 邻 的 条 会 粘 连 在 一 起, 无 法 识 读。 当 窄 元 素 宽 度 为30 时,“J10059” 六 位 字 符 条 码 尺 寸 为:67mm。
---- 以Picel 为 单 位, 打 印 精 度 可 达2, 当 窄 元 素 宽 度 为2 时,“J10059” 六 位 字 符 条 形 码 尺 寸 为80 mm 以 上。
---- 以Point 为 单 位, 打 印 精 度 可 达2, 当 窄 元 素 宽 度 为2 时,J10059 六 位 字 符 条 形 码 尺 寸 为110MM。
---- 二、 直 接 使 用Printer.Line , 在 打 印 机 上 绘 画- 画 矩 形 框
窄 条 打 印:Printer.Line (x,y)-Step(i,h),,bf
宽 条 打 印:Printer.Line (x,y)-Step(3*i,h),,bf 或
Printer.Line (x,y)-Step(2*i,h),,bf
---- 用Printer.Line 打 印, 量 度 单 位 为 点, 最 小 精 度 为 达10, 当 窄 元 素 宽 为10 时,J10059 六 位 字 符 之 条 码 尺 寸 为:21MM。
---- 根 据 以 上 的 比 较, 使 用 第 二 种 方 法 打 印 输 入 的 条 形 码 精 度 最 高( 同 样 的 字 符 数, 尺 寸 最 短)。 很 显 然, 不 同 的 打 印 方 式, 分 别 有 不 同 的 适 用 范 围, 对 尺 寸 宽 度 要 求 不 高 的 情 况 下, 可 以 使 用 第 一 种 打 印 方 式, 若 对 条 形 码 尺 寸 要 求 较 严 格, 则 使 用 第 二 种 打 印 方 式 更 合 适。
---- 软 件 设 计
---- 一、 菜 单 设 计: 由 于 条 形 码 轻 印 刷 软 件 相 对 说 来 是 一 个 很 小 的 系 统, 需 要 选 择 的 项 目 不 多, 可 以 不 设 置 菜 单, 而 将 全 部 的 操 作 由 窗 体 控 件 来 完 成。 如 果 使 用 上 述 的 第 一 种 打 印 方 式, 则 必 须 建 立 另 一 窗 体, 用 于 第 一 步 的 输 出 条 形 码 图 形。
---- 二、 设 计 窗 体 控 件: 窗 体 中 的 控 件 包 括 两 大 类, 即: 参 数 设 置 框、 打 印 操 作 按 钮。 本 列 设 计 的 窗 体 见 图 示。 本 列 给 出 的 是 一 个 对 参 数 没 有 设 置 功 能 的 窗 体, 有 兴 趣 的 读 者 可 以 在 此 基 础 上 自 行 补 充 它。
---- 对 于 打 印 参 数, 对 条 形 码 的 打 印 来 说, 需 要 指 定 的 参 数 大 致 有: 条 码 宽 窄 比: 3:1~2:1; 条 码 高; 窄 元 素 宽 度; 打 印 机 类 型 及 端 口; 打 印 份 数; 打 印 纸 尺 寸 规 格; 每 行 条 形 码 数; 每 个 条 码 的 字 符 数; 是 否 自 动 增 值 打 印; 增 值 步 长; 每 一 页 行 计 数 起 止 数; 终 止 码 等。
---- 本 列 设 计 了 八 个 按 钮, 其 作 用 分 别 是:
---- Begin- 单 号 条 形 码 打 印 开 始
---- Auto- 自 动 增 值 打 印 开 始
---- Page- 将 打 印 机 内 存 中 的 条 码( 不 足 一 页) 打 印 出 来
---- Cancel- 中 止 自 动 增 值 打 印
---- Delete- 清 除 打 印 机 内 存 中 的 未 打 印 条 码
---- Help- 帮 助 信 息
---- About- 版 本 及 设 计 信 息
---- Exit- 关 闭 系 统
---- 三、 程 序 流 程:
---- 在 本 例 中, 条 形 码 的 打 印 分 为 单 号 打 印; 自 动 增 值 打 印 两 种。 单 号 打 印, 是 用 户 输 入 一 个 或 几 个 需 要 打 印 的 号 码 的 打 印 方 式; 而 自 动 增 值 打 印 是 用 户 指 定 起 始 号、 终 止 号 及 增 加 步 长, 由 机 器 自 动 生 成 被 打 印 号 码 来 打 印。 其 实 这 两 种 方 式 在 打 印 时 的 操 作 是 完 全 一 样 的, 不 同 之 处 在 于 被 打 号 码 的 获 取, 需 要 注 意 的 是 由 于39 码 字 符 集 中 包 括 字 符, 在 自 动 增 值 时 要 与 纯 数 字 码 区 别。
---- 下 面 以 单 号 打 印 为 例, 介 绍 条 形 码 打 印 的 程 序 流 程。
---- 1 . 检 查 各 项 参 数 设 置 是 否 完 全 正 确, 若 正 确, 则 继 续, 否 则 退 出;
---- 2 . 获 取 各 项 参 数 设 置;
---- 3 . 为X 坐 标 取 初 值( 纸 的 左 边 打 印 边 界);
---- 4 .( 循 环A) 是 否 打 印 完 一 行(I 条 条 码) ? 是 则 转14;
---- 5 . 本 条 条 码 是 否 为 空 ? 是 则 将 横 坐 标 加 上 一 条 条 码 之 宽 度;
---- 6 . 打 印 起 始 符;
---- 7 .( 循 环B) 是 否 打 印 完 本 条 条 码(J 个 字 符) ? 是 则 转10;
---- 8 . 打 印 一 个 字 符 的 条 码;
---- 9 .( 循 环B) 下 一 个 字 符;
---- 10 . 打 印 终 止 符;
---- 11 . 修 改X 坐 标;
---- 12 .( 循 环A) 下 一 条 条 码
---- 13 . 修 改Y 坐 标;
---- 14 . 打 印 本 行 每 一 条 码 的 人 工 识 别 字 符;
---- 15 . 本 页 是 否 已 打 满 ? 是 则 打 印, 并 对 新 页 坐 标 初 始 化;
---- 16. 退 出
---- 四、 程 序 代 码:
---- 用 于 检 查 参 数 设 置 正 确 性 的 程 序 主 要 从 各 项 参 数 间 的 关 系 去 检 查。 如 根 据 使 用 的 宽 度、 高 度、 每 行 条 码 数, 判 断 是 否 超 出 了 纸 的 打 印 范 围; 输 入 的 号 码 是 否 合 法 等。
---- 可 以 为 每 字 符 设 计 一 段 各 自 的 打 印 程 序, 这 种 方 式 编 程 简 单。 也 可 以 将 打 印 程 序 与 条 形 码 的 编 码 规 则 分 离, 通 过 参 数 传 递 某 一 字 符 的 编 码 规 则, 不 同 的 字 符 共 享 同 一 打 印 程 序。 本 列 采 用 前 一 种 方 式。 如 字 母“J” 的 编 码 规 则 为:“N N N N W W W N N”, 打 印 程 序 代 码 如 下:
Private Sub prn_J()
Printer.Line (x, y)-Step(widt, high), , BF 注释:打印窄条
x = x + widt 注释:改变X坐标
x = x + widt 注释:打印窄空
Printer.Line (x, y)-Step(widt, high), , BF
x = x + widt
x = x + widt
Printer.Line (x, y)-Step(w_n * widt, high), , BF 注释:打印宽条
x = x + w_n * widt 注释:改变X坐标
x = x + w_n * widt 注释:打印宽空
Printer.Line (x, y)-Step(w_n * widt, high), , BF
x = x + w_n * widt
x = x + widt
Printer.Line (x, y)-Step(widt, high), , BF
x = x + widt
x = x + widt 注释:打印位空
End Sub
---- 其 中x,y 分 别 为 坐 标 值,w_n 为 宽 窄 元 素 宽 度 比, widt 为 窄 元 素 的 宽 度 值( 点), high 为 条 形 码 高 度, 每 打 印 一 个 条 元 素, 应 立 即 改 变X 坐 标, 以 便 打 印 下 一 个 元 素; 打 印 空 元 素 时, 由 于 是 不 着 色, 只 需 改 变X 坐 标 即 可; 每 一 个 字 符 打 印 结 束 时, 应 打 印 一 个 位 空( 本 列 中 位 空 宽 度 等 于 窄 空)。 其 它 的42 个 字 符 的 编 码 规 则, 读 者 可 以 在 有 关 条 形 码 技 术 的 文 献 中 查 到。
……