作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年6月15日 10点49分57秒

<!--StartFragment-->// PrintDirect.cs
// 本文参考了Microsoft Support 文档号:Q298141
// 本代码假定你在file://192.168.1.101/hpl存在共享打印机
// 本代码示例了如何向打印机发送Hewlett Packard PCL5代码直接在页面中央打印出一个矩形。

using System;
using System.Text;
using System.Runtime.InteropServices;

[StructLayout( LayoutKind.Sequential)]
public struct DOCINFO
{
  [MarshalAs(UnmanagedType.LPWStr)]public string pDocName;
  [MarshalAs(UnmanagedType.LPWStr)]public string pOutputFile;
  [MarshalAs(UnmanagedType.LPWStr)]public string pDataType;
}

public class PrintDirect
{
  [ DllImport( "winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=false,
  CallingConvention=CallingConvention.StdCall )]
  public static extern long OpenPrinter(string pPrinterName,ref IntPtr phPrinter,
  int pDefault);
  [ DllImport( "winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=false,
  CallingConvention=CallingConvention.StdCall )]
  public static extern long StartDocPrinter(IntPtr hPrinter, int Level,
  ref DOCINFO pDocInfo);

[ DllImport("winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=true,
  CallingConvention=CallingConvention.StdCall)]
  public static extern long StartPagePrinter(IntPtr hPrinter);
  [ DllImport( "winspool.drv",CharSet=CharSet.Ansi,ExactSpelling=true,
  CallingConvention=CallingConvention.StdCall)]
  public static extern long WritePrinter(IntPtr hPrinter,string data,
  int buf,ref int pcWritten);

[ DllImport( "winspool.drv" ,CharSet=CharSet.Unicode,ExactSpelling=true,
  CallingConvention=CallingConvention.StdCall)]
  public static extern long EndPagePrinter(IntPtr hPrinter);

[ DllImport( "winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=true,
  CallingConvention=CallingConvention.StdCall)]
  public static extern long EndDocPrinter(IntPtr hPrinter);

[ DllImport("winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=true,
  CallingConvention=CallingConvention.StdCall )]
  public static extern long ClosePrinter(IntPtr hPrinter);
}

public class App
{
  public static void Main ()
  {
    System.IntPtr lhPrinter=new System.IntPtr();

DOCINFO di = new DOCINFO();
    int pcWritten=0;
    string st1;

// text to print with a form feed character
    st1="This is an example of printing directly to a printer/f";
    di.pDocName="my test document";
    di.pDataType="RAW";

// the /x1b means an ascii escape character
    st1="/x1b*c600a6b0P/f";
    //lhPrinter contains the handle for the printer opened
    //If lhPrinter is 0 then an error has occured
    PrintDirect.OpenPrinter("192.168.1.101//hpl",ref lhPrinter,0);
    PrintDirect.StartDocPrinter(lhPrinter,1,ref di);
    PrintDirect.StartPagePrinter(lhPrinter);
    try
    {
      // Moves the cursor 900 dots (3 inches at 300 dpi) in from the left margin, and
      // 600 dots (2 inches at 300 dpi) down from the top margin.
      st1="/x1b*p900x600Y";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);

// Using the print model commands for rectangle dimensions, "600a" specifies a rectangle
      // with a horizontal size or width of 600 dots, and "6b" specifies a vertical
      // size or height of 6 dots. The 0P selects the solid black rectangular area fill.
      st1="/x1b*c600a6b0P";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);

// Specifies a rectangle with width of 6 dots, height of 600 dots, and a
      // fill pattern of solid black.
      st1="/x1b*c6a600b0P";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);
      // Moves the current cursor position to 900 dots, from the left margin and
      // 1200 dots down from the top margin.
      st1="/x1b*p900x1200Y";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);
      // Specifies a rectangle with a width of 606 dots, a height of 6 dots and a

// fill pattern of solid black.
      st1="/x1b*c606a6b0P";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);

// Moves the current cursor position to 1500 dots from the left margin and
      // 600 dots down from the top margin.
      st1="/x1b*p1500x600Y";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);

// Specifies a rectangle with a width of 6 dots, a height of 600 dots and a
      // fill pattern of solid black.
      st1="/x1b*c6a600b0P";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);
      // Send a form feed character to the printer
      st1="/f";
      PrintDirect.WritePrinter(lhPrinter,st1,st1.Length,ref pcWritten);
    }
    catch (Exception e)
    {
      Console.WriteLine(e.Message);
    }

PrintDirect.EndPagePrinter(lhPrinter);
    PrintDirect.EndDocPrinter(lhPrinter);
    PrintDirect.ClosePrinter(lhPrinter);
  }
}

直接把结果输出到打印机相关推荐

  1. 高品质摄影作图台式计算机推荐,浅谈高质量摄影照片后期输出的打印机选择

    真的只能是浅谈了,道行尚浅,认识有限,在此仅仅谈下自己的真实体会.当然,要是手机拍的或者就是打印个3吋的,就不在此讨论范畴了. 首先说照片为何要打印? 可以这么说,再好的照片,不打印出来就不算作品.现 ...

  2. ireport+jasperreport 直接输出到打印机 普通报表 交叉报表

    项目中要用到针式打印机票据打印,本来是使用java printable 通过 Graphic2D输出到图形化方式打印的,运行了一段时间客户对版面个性需要比较多,用输出图形的方式调整太麻烦,而且Grap ...

  3. 如何自动截获输出到打印机的文本数据(转载)

    原 作 者:吴军丽 李继名 原 出 处:计算机世界 在所有的应用软件当中,几乎都会提供打印结果的功能,但大部分的软件并不提供输出结果到文本文件功能(如速达,用友和金碟应用软件等能够打印,但不能将结果直 ...

  4. 2.1.2监测当前打印机状态

    2.1.2监测当前打印机状态   Windows标准的打印机监测程序.通过该程序,我们可以了解当前打印机的状态,包括打印机任务队列,   各项任务状态.所有者.进度和开始时间,并且可以及时暂停.清除打 ...

  5. mysql输出美式报表_Navicat for MySQL 如何预览报表

    Navicat for MySQL 使用用户友好 GUI 报表创建工具创建各种不同类型的报表,设计发票.统计.邮寄标签及更多其他报表.输出报表到多种格式,如 text.PDF.Lotus.Excel. ...

  6. LODOP不同打印机出现偏移问题

    方法简单描述: 1.精确套打,设置以纸张边缘为基点,可避免不同可打区域不同带了的影响. 2.不同客户端打印机位置差异,可通过打印维护调整,结果在客户端本地. 或调整打印机初始位置 (本人使用的金税盘的 ...

  7. 第21章、系统设定工具(网络与打印机)与硬件侦测

    21.1. CentOS 系统设定工具: setup 系统设定除了使用手动的方式编辑配置文件之外 (例如 /etc/inittab, /etc/fstab 等),其实在 Red Hat 系统的 RHE ...

  8. 鸟哥的Linux私房菜(基础篇)- 第二十一章、系统配置工具(网络与打印机)与硬件侦测

    第二十一章.系统配置工具(网络与打印机)与硬件侦测 最近升级日期:2009/09/15 除了手动配置之外,其实系统提供了一个名为 setup 的命令给系统管理员使用喔!这个命令还能够配置网络呢.此外, ...

  9. C#调用斑马打印机打印条码标签(支持COM/LPT/USB/ZPL/EPL/Bitmap)

    利用标签设计软件做好模板,打印至本地文件,把其中的ZPL.EPL指令拷贝出来,替换其中动态变化的内容为变量名,做成一个模板文本,在代码中动态替换变量,再把指令输出至打印机. ZebraPrintHel ...

最新文章

  1. 阿里员工吐槽:杭州22k拿到头条35k和shopee33k的offer,怎么选?
  2. centos6.4下LVS+keepalived的高可用(LVS/DR模式)
  3. Dataset:fetch_20newsgroups(20类新闻文本)数据集的简介、安装、使用方法之详细攻略
  4. 性能测试工具_磁盘性能测试工具fio
  5. win7下不能替换系统文件的解决办法
  6. 《MySQL——count()逻辑》
  7. To install 64-bit ODBC drivers
  8. php cgi漏洞,Nginx + PHP CGI的一个可能的安全漏洞
  9. 计算机应用基础选择题占多少分,计算机应用基础练习题(选择题部分)..doc
  10. 什么是CSS网页切图
  11. 【VRP问题】基于节约算法CW求解带容量的车辆路径规划问题(CVRP)
  12. 超实用超全 || ZBrush笔刷大合集
  13. LED显示行业之知识大全3
  14. java使用nmap工具进行端口扫描,简单学习
  15. saas、paas、laas 的概念与区别
  16. Python的堆与优先队列
  17. 我在windows10下,使用CMake gui 编译krita源码,CMake gui报错:LibMyPaint_DIR-NOTFOUND
  18. 【NOIP2018提高组D2T2】填数游戏
  19. 艺赛旗(RPA)相对路径、绝对路径、执行空间、代码空间,傻傻分不清?
  20. Flex布局常用的一些属性及解释

热门文章

  1. 微信支付 商户号该产品权限未开通,请前往商户平台
  2. Adobe Flash Player已不再受支持怎么解决?
  3. 网络游戏——强联网游戏
  4. sgg-hbase-01
  5. 例题9-27 方块消除 UVa10559
  6. 文心一言 VS ChatGpt
  7. 为什么内网地址普遍是192.168.1.1
  8. nova-compute
  9. 【数据架构系列-02】从《数据中台能力成熟度模型》的发布,聊聊火了的中台
  10. 135编辑器嵌入html,135编辑器教程|三步教你搞定表格样式