最快的办法是直接输出打印数据到打印机,随便安装一个打印机驱动程序,只要LPT口正确。
然后使用openprinter,startdocprinter,writeprinter就可以了,用完了要记得用enddocprinter,closeprinter关闭

解决方案 »

  1.   

    第二章 打印相关的API函数Api函数名
                                  函数说明 适用范围 W16 W95 WNT
    AddPrinterConnection 为当前用户建立与打印机的联系 否 是 是
    StartPagePrinter 开始打印机 否 是 是
    StartDoc 开始打印作业 是 是 是
    StartDocPrinter 开始打印作业 否 是 是
    AddPrintProvidor 加入一个打印机支持器 否 是 是
    AddForm 加入一个打印机窗体 否 是 是
    AddPort 加入一个打印机端口 否 是 是
    AddMonitor 加入一个打印机管理器 否 是 是
    ShellExecute 打开或打印指定文件 否 是 是
    ClosePrinter 关闭打开的打印机 否 是 是
    WritePrinter 向打印机输出数据 否 是 是
    AddPrinter 在打印机服务器上建立一个打印机 否 是 是
    SetAbortProc 设备打印作业的放弃函数 否 是 是
    SetPrinter 设置打印机信息 否 是 是
    SetPrinterData 设置打印机配置 否 是 是
    SetJob 设置打印作业信息 否 是 是
    ResetPrinter 设置打印数据类型和设备模式值 否 是 是
    DeletePrinterConnection 删除与打印机的连接 否 是 是
    DeletePrintProcessor 删除打印机处理器 否 是 是
    DeletePrinterDriver 删除打印机驱动程序 否 是 是
    DeletePrinter 删除打印机服务器上的打印机 否 是 是
    DeleteMonitor 删除打印机监视器 否 是 是
    DeletePrintProvidor 删除打印机提供者 否 是 是
    DeleteForm 删除打印机窗体层差 否 是 是
    AbortPrinter 删除打印机缓冲文件 否 是 是
    DeletePort 删除打印机端口 否 是 是
    AddJob 启动一个打印作业 否 是 是
    AdvancedDocumentProperties 进行打印机高级设置 否 是 是
    PrintDlg 建立打印文本对话框 否 是 是
    EnumPrintProcessors 枚举已安装的打印机处理器 否 是 是
    EnumPrinterDrivers 枚举已安装的打印机驱动程序 否 是 是
    EnumPorts 枚举可用打印机端口 否 是 是
    EnumPrintProcessorDatatypes 枚举打印机所支持的数据类型 否 是 是
    EnumForms 枚举所支持的打印机窗体 否 是 是
    AbortDoc 终止一项打印作业 是 是 是
    PrinterProperties 修改打印机属性 否 是 是
    AddPrintProcessor 将打印处理器复制到打印机服务器中 否 是 是
    AddPrinterDriver 将打印机驱动程序复制到打印机服务器中 否 是 是
    PrinterMessageBox 显示打印作业出错信息 否 是 是
    ConnectToPrinterDlg 显示浏览对话并连接网络打印机 否 是 是
    EndPagePrinter 结束打印页 否 是 是
    EndDoc 结束打印作业 是 是 是
    EndDocPrinter 结束打印作业 否 是 是
    StartPage 准备打印机接收数据 是 是 是
    WaitForPrinterChange 监测打印机或打印机服务器变化 否 是 是
    GetPrintProcessorDirectory 获取打印机驱动处理器路径 否 是 是
    GetPrinterDriver 获取打印机驱动程序信息 否 是 是
    GetPrinterDriverDirectory 获取打印机驱动程序路径 否 是 是
    GetPrinter 获取打印机信息 否 是 是
    GetPrinterData 获取打印机配置信息 否 是 是
    GetForm 获取打印机窗口信息 否 是 是
    EnumJobs 获取打印作业信息 否 是 是
    GetJob 获取打印作业信息 否 是 是
    OpenPrinter 获取指定打印机的句柄 否 是 是
    ReadPrinter 读打印机数据 否 是 是
    DocumentProperties 配置打印机设置 否 是 是
    ConfigurePort 配置打印机端口 否 是 是
      

  2.   

    to airhorse(编程至尊宝) :有相关例程吗,请传一份给我,我可以再给您加分。
      

  3.   

    我也特别想知道,还有
    怎么在打印时间给打印机发ctr+c等命令
      

  4.   

    api没作过,你为什么一定要用api。
      

  5.   

    方法1、 比较复杂的输出用Printer全局实例
    方法2、 对于纯字符行输出用AssignPrn的方法最简单(可结合Printer.Canvas来操作)
    不推荐使用API,繁琐、难控制、易出错
      

  6.   

    其实也不必用,apidelphi的printers 已经封装的很好了?
    对 于 每 一 个WINDOWS 应 用 程 序开 发 者 来 说, 打 印 功 能 的 实 现 都 是 极 为 棘 手 的, 因 为 要 涉及到 相 当 多 的 代 码 而 且 常 常 是 相 当 的 复 杂, 但 是 在DELPHI 中 实 现 文 本 和 图 象 的 打 印 功 能 却 是 非 常 容 易 的。        1、 文 本 的 打 印 功 能。DELPHI 中 文 本 的 打 印 功 能 就 如 同 在DOS 中 实 现 文 本 的 打 印 功 能 一样
    容 易, 需 要 做 的 一 切 只 是 取 得 打 印 参 数, 打 开 打 印 机,然 后 发 送 文 本 的 每 一 行 内 容。 在DELPHI 中 提
    供 了 一 个PRINTERS 程 序 单 元, 它 说 明 了 一 个TPRINTER 对 象, 封 装 了WINDOWS 打 印 工作 和 输 出 打 印
    机 之 间 的 接 口, 并 提 供 常 用 的 属 性 和 方 法,其 中 画 布CANVAS 是 一 个 非 常 有 用 的 属 性, 它 代 表 了 当
    前 打印 文 件 的 表 面, 是 以 图 形 方 式 来 工 作 的, 整 个 的 打 印 输 出工 作 仅 仅 是 将 你 打 印 的 内 容 输 出
    到TPRINTER 的 属 性CANVAS 上,当 全 部 的 输 出 工 作 完 成 以 后, 打 印 对 象(TPRINTER) 把CANVAS 的 属 性
    值 送 到 打 印 机 上 去。
           下 面 举 例 来 说 明 如 何 通 过DELPHI 实 现 文 本 内 容 的 打 印。 在DELPHI 中 提 供
    了PRINTDIALOG、PRINTERSETUPDIALOG 两 个 控 件 允 许 我 们 进 行 打 印 机 以 及 其 他 影 响 打 印 输 出 的选
    择, 此 外 最 重 要 的 一 点 是 要 想 实 现 打 印 功 能 必 须 在 编译 程 序 以 前 将PRINTERS 加 入 到INTERFACE 或
    者IMPLEMENTATION 的UESE 语 句 当 中, 因 为PRINTER 单 元 包 括ASSIGNPRN 和 其 他 控 制 打 印 机的 过 程。
           首 先 在FORM 当 中 加 入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG 和 两 个BUTTON 控 件, 两 个
    BUTTON 的CAPTION 分 别 为“ 打 印 设 置” 和“ 打 印”。 然 后 编 写BUTTON 的 事 件 驱 动 程 序( 代 码 在 下
    面),这 个 简 单 的 例 子 中 只 要 单 击“ 打 印” 按 钮 时 便 可 以 在 打 印机 上 输 出 文 件0S2.TXT, 打 印 事 件 的
    清 单 如 下:
    implementation
    uses printers;
    {$R *.DFM}
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    printersetupdialog1.execute;  //选择输出的打印机以及其他打印控制选项
    end;
    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
    lines:integer;
    prntext:system.text;
    //将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件
    begin
       if printdialog1.execute then
       assignprn(prntext); //将PRNTEST分配给打印机
       rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
       printer.canvas.font:=memo1.font;
       //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
       for lines:=0 to memo1.lines.count-1 do
       writeln(prntext,memo1.lines[lines]);
       //把MEMO的内容写到打印机对象
       system.close(prntext); //关闭打印文件
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    memo1.lines.loadfromfile('c:\dos\os2.txt');
    //在FORM建立时读入C:\DOS\OS2.TXT文件
    end;
    end.
           2、 图 形 的 打 印 功 能, 简 单 的图 形 打 印 功 能 也 如 打 印 文 本 一 样 的 容 易, 只 是 告 诉 打 印机 对
    象(TPRINTER) 开 始 打 印, 把 图 形 简 单 的 复 制 到 打 印 机上 去, 最 后 告 诉 打 印 机 结 束 打 印 工 作。
           举 例 说 明: 将 上 面 的 例 子的MEMO 控 件 换 成IMAGE 控 件, 再 经 过 一 些 简 单 的 修 改, 图 形 打印 的
    代 码 如 下:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    if printdialog1.execute then begin
    printer.begindoc;
    printer.canvas.draw(0,0,image1.picture.graphic);
    printer.enddoc;
    end;
    end;
           在 这 种 情 况 下, 使 用 的 是 打印 机 的 分 辨 率, 图 形 在 页 面 的 左 上 角 开 始 打 印 输 出, 打 出的 图
    形 很 小, 在 很 多 的 情 况 下 不 能 符 合 要 求, 但 是 打 印 机画 布CANVAS 的STRETHDRAW 的 方 法, 可 以 让 我
    们 对 图 形 进 行 灵 活的 处 理, 画 布(CANVAS) 的STRETCHDRAW 方 法 声 名 为:
    procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
    其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为:
    TRect = record
      case Integer of
        0: (Left, Top, Right, Bottom: Integer);
        1: (TopLeft, BottomRight: TPoint);
    end;
           因 此 我 们 只 要 调 整RECT 的 大小 及 其 在 打 印 页 面 上 的 位 置, 进 而 达 到 自 己 满 意 的 效 果,下 面
    的 代 码 是 不 断 的 放 大 图 形, 充 满 我 们 定 义 的 矩 形 区域, 并 将 其 定 位 在 打 印 机 画 布(CANVAS) 的 中 央
    进 行 输 出。代 码 如 下:
    procedure TForm1.Button1Click(Sender: TObject);
    VAR
    strect:Trect;    //定义打印输出矩形框的大小
    temhi,temwd:integer;
    begin
    if printdialog1.execute then
       begin
       temhi:=image1.picture.height;
       temwd:=image1.picture.width;
          while (temhi printer.pageheight div 2)and
    //将图形放大到打印页面的1/2大小
             (temwd printer.pagewidth div 2)   do
      begin
      temhi:=temhi+temhi;
      temwd:=temwd+temwd;
      end;
             with strect do    //定义图形在页面上的中心位置输出
      begin
      left:=(printer.pagewidth -temwd) div 2;
      top:=(printer.pageheight-temhi) div 2;
      right:=left+temwd;
      bottom:=top+temhi;
      end;
       with printer do
       begin
       begindoc;
       canvas.stretchdraw(strect,image1.picture.graphic);
       //将放大的图形向打印机输出
       enddoc;
       end;
    end;
    end;
           以 上 代 码 在DELPHI2.0 上 编 译 通过, 通 过 这 些 小 小 的 例 子, 相 信 大 家 对 于 在DELPHI 中 打 印
    图形 和 文 本 有 一 定 的 了 解, 同 样 通 过 打 印 机 的 画 布(CANVAS)属 性 也 可 以 实 现 数 据 库 表 单 的 打 印,
    在 这 里 不 一 一 赘 述,如 果 大 家 有 兴 趣 不 妨 一 试。
           作 者 地 址: 北 方 工 业 大 学801 信 箱 李 晓 东 邮 编100041