PowerBuilder 的大文本数据打印在线教程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:38:59

---- 1991 年6 月, 美 国著 名 的 数 据 库 应 用 开 发 工 具 生 产 厂 家PowerSoft 公 司 推 出了 功 能 强 大 的 开 发 工 具PowerBuilder, 这 是 一 套 客 户/ 服 务器 体 系 结 构、 面 向 对 象 的 数 据 库 应 用 开 发 工 具, 这 确实 是 一 件 令 人 振 奋 的 事 情。 但 在PowerBuilder 4.0 及 最 新 推 出的powerBuilder 6.0 版 中, 均 未 解 决 大 文 本 数 据 的 打 印 问 题。在 企 业 管 理 中, 经 常 打 印 几 页 甚 至 几 十 页 长 的 材 料,这 个 材 料 可 能 长, 也 可 能 短,( 在PB 中 存 放 大 文 本 的 单机 库 数 据 类 型 是Long Varchar), 利 用 程 序 设 计 批 量 打 印,设 计 此 类 数 据 高 度 时, 不 知 道 设 计 多 高,( 若 设 计 不合 适, 短 数 据 量 会 造 成 打 印 空 行 或 空 页, 而 长 数 据 量又 可 能 造 成 只 打 印 了 部 分 数 据 的 情 况), 虽 然 程 序 设计 时 有AutoHeight 属 性, 但 在 实 际 运 行 时 效 果 并 不 理 想,因 此, 此 问 题 的 解 决 具 有 重 要 意 义。 下 面, 我 介 绍 一种 利 用Powersoft Script 函 数 来 解 决 此 问 题 的 方 法:


---- 例 如, 对 于 表text, 其 字 段 如 下:


1、姓名name char(8);2、性别sex char(2);3、出生日期birthday date;4、个人简历resume long;
Name(姓名) Sex(性别) BirthDay(生日) resume(个人简历)张三 男 1950.09.1255.9.1北京市光明 小学60.9.1北京市南安中学70. 8.1.清华大学毕业,在原子能研究所工作。71年获国家项目设计一等奖,同年,被评为先进个人。72年………(等等)李四 男 1985.02.12 90. 9.1在南京市上福利小学95.9.1毕业,正选择中学就读

---- 里 面 有 张 三,李 四 两 条 记 录。 张 三 经 历 丰 富, 可 能 在resume 栏 中 内 容很 多, 从 小 学 到 大 学, 及 至 工 作20 年 来 的 所 有 经 历, 能写 成 一 篇 文 章 了; 而 李 四 刚 小 学 毕 业, 那 么resume 栏 中内 容 就 很 少。


---- 由 于 大 文 本 字段 其 数 据 量 大, 数 据 长 度 不 一 定, 在 设 计 打 印 数 据 窗口 时, 这 种 字 段 的 高 度 不 好 定 位, 如 果 按 最 大 可 能 高度 定 位( 这 个 高 度 也 不 好 掌 握), 对 于 小 数 据 就 会 出现 打 印 空 行, 甚 至 空 页 的 情 况。


---- 为 了 解 决 这 个问 题, 我 们 用 程 序 来 控 制 这 种 字 段 高 度。( 以text 表 为 例):


---- 1、 以 自 由 格 式定 义 一 个 数 据 窗 口, 保 存 这 种 缺 省 状 态(resume 字 段 高 度为 缺 省 高 度); 生 成 一 个 窗 口, 窗 口 中 包 含 上 述 数 据 窗口( 被 定 义 成dw_1); 窗 口 中 还 有 上 翻(cb_1), 下 翻(cb_2) 两个 按 钮。


---- ( 下 面 的 程 序行, 根 据 实 际 情 况 写 到cb_1 或cb_2 按 钮 中。)


---- 2、 获 得 要 打 印的 记 录 的resume 字 段 中 数 据, 放 到 变 量field 中


dw_1.scrollnextrow():string fieldfield=dw_1.getitemstring(1,”resume”)//假设,这是第一行张三的数据

---- 3、 我 们 用B5 纸打 印, 字 体 为PowerBuilder 缺 省 字 体(T Arial), 可 计 算 出 每 行59 个 字 符, 字 体 高 度 为80 个 点。 那 么 用 如 下 程 序 可 计 算出field 变 量 的 内 容 占 用 的 打 印 高 度:


int ilong tttt=len(field) //获得这个变量的长度i=(int(tt)/59)*80+1 //计算出高度点,

---- 4、 改 变resume 字段 高 度。


---- dw_1.Describe(“resume.Height”)


---- dw_1.Modify(“resume.Height=string(i)”)


---- 程 序 每 打 印 一条 记 录, 就 调 用 上 诉2,3,4 步 骤 的 程 序 行, 将resume 字 段 高度, 随resume 内 容 的 长 度 改 变 而 改 变, 就 可 动 态 改 变 字段 高 度, 从 而 保 证 纸 张 资 源 的 充 分 利 用, 不 打 印 空 行或 空 页。


Tags:

作者:佚名
分享到: 微信 更多