首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >紧凑框架套接字文档打印

紧凑框架套接字文档打印
EN

Stack Overflow用户
提问于 2018-04-27 10:50:58
回答 1查看 772关注 0票数 2

我正试图从windows ce设备将文档打印到网络激光打印机上。由于我试图打印示例文本,没有问题,而且我可以这样做,我的问题是,我需要打印一些文本和文本下面的一个小图像,例如:

代码语言:javascript
运行
复制
not formatted text
------------------
|    IMAGE       |
------------------
other not formatted text

我的第一个想法是构建一个Rtf文档,并将其发送给打印机,但它显然是打印文档文本内容,而不是格式化的文本.我尝试了很多其他方法来编码要发送的数据,但是没有结果.有办法做到这点,还是我只是在浪费时间?如果不是,有一种方法可以存档发送PCL/PostScript数据吗?(通常驱动程序是新激光打印机上基本命令的“标准”)。这是我用来在网络打印机上打印的功能:

代码语言:javascript
运行
复制
public static string print_data_to_IP(string printerIP, int printerPort, byte[] myEncoded_bytes)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //Not supported
            //socket.NoDelay = true;

            IPAddress ip = IPAddress.Parse(printerIP);
            IPEndPoint ipEndPoint = new IPEndPoint(ip, printerPort);
            socket.Connect(ipEndPoint);
            socket.Send(myEncoded_bytes);
            socket.Close();
            return null;
        }

myEncoded_bytes是通过以下方式制作的:

代码语言:javascript
运行
复制
MemoryStream ms = new MemoryStream();
            using (FileStream stream = File.Open("\\test.rtf", FileMode.Open))
            {
                byte[] stream_to_byte_array = new byte[stream.Length];
                stream.Read(stream_to_byte_array, 0, (int)stream.Length);
                ms = new MemoryStream(stream_to_byte_array);
                stream.Close();
            }
byte[] data = ms.ToArray();

谢谢你的帮助,

军团

不允许使用外部库,因此我不能使用printCE或类似的“帮助”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-29 14:31:34

我试图更好地解释我如何达到目标,这是一个在@josef 链接之后创建的示例函数,我在选择的位置上写了一些文本,并在屏幕中心画了一个红色的框(注释解释了pcl命令是如何工作的)。按照PCL手册,您可以轻松地自定义您喜欢的文本和绘图(手册)。

代码语言:javascript
运行
复制
        private void btn_pcl_printing_Click(object sender, EventArgs e)
        {
            string printer_ip = "192.168.1.6";

            char command_start_character = '\u001B';
            char carriage_return = '\u000D';
            char line_feed = '\u000A';
            string lane_escape_character = string.Concat(carriage_return, line_feed); //"\r\n";
#if PJL
            string printer_process_name = "prova.TXT";
            string raw_end_of_file = command_start_character + "%–12345X" + " @PJL EOF" + lane_escape_character;
            raw_end_of_file += command_start_character + "%–12345X";
            string raw_to_print = command_start_character + "%–12345X";
            raw_to_print += " @PJL JOB NAME = \"" + printer_process_name  + "\"" + lane_escape_character;
            raw_to_print += " @PJL ENTER LANGUAGE = PCL" + lane_escape_character;
#else
            //Reset the printer and start a new PAGE
            string raw_to_print = command_start_character + "E";
#endif
            //Set Printer resolution to 150 DPI
            string raw_pcl_commands = command_start_character + "&u150D" + command_start_character + "*t150R";
            //Write "Hello Wold!!" at the position 150x and 150y (the command is case sensitive).
            raw_pcl_commands += command_start_character + "*p150x150Y" + "Hello World!!!";
            //Another way to to what i've just done before
            //raw_pcl_commands += command_start_character + "*p150X" + command_start_character + "*p150Y" + "Hello World!!!";
            raw_pcl_commands += command_start_character + "*p150X" + command_start_character + "*p150Y" + "Hello World!!!";
            //I choose to use RGB colors (v6), select an rgb color (a0,b0,c0) and save it an a palette (i0) that i select (i0S). My selected color is RED (255,0,0)
            raw_pcl_commands += command_start_character + "*v6w255a0b0c0i0S";
            //Another way to to what i've just done before
            //raw_pcl_commands += command_start_character + "*v6W";
            //raw_pcl_commands += command_start_character + "*v255a0b0C" + command_start_character + "*v0i0S";
            //Draw a rectangle 300*150
            raw_pcl_commands += command_start_character + "*c300a150b5P";


            //COMANDI PCL
            raw_pcl_commands += command_start_character + "E";
            raw_to_print += raw_pcl_commands;
#if PJL
            raw_to_print += raw_end_of_file;
#endif

            byte[] myEncoded_bytes = Encoding.UTF8.GetBytes(raw_to_print);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //Not supported on CE
            //socket.NoDelay = true;
            int printerPort = 9100;
            IPAddress ip = IPAddress.Parse(printer_ip);
            IPEndPoint ipEndPoint = new IPEndPoint(ip, printerPort);
            socket.Connect(ipEndPoint);
            socket.Send(myEncoded_bytes);
            socket.Close();
        }

现在,对于这些图像,您可以使用以下两种方法:

1)用PCL命令“手动”绘制图像,见手册第41页。以查看一些示例(如果像我的示例中的简单条形码是最好的遵循方式)。

2)用PCL宏绘制图像.这就是我所能说的,因为读那个文件让我头疼,强迫我选择方法1 :D

希望这是帮助,军团

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50060831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档