- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 Windows CE 设备将文档打印到网络激光打印机。因为我正在尝试打印示例文本,所以没有问题,而且我可以通过套接字进行打印,我的问题是我需要在文本下方打印一些文本和一个小图像,例如:
not formatted text
------------------
| IMAGE |
------------------
other not formatted text
我的第一个想法是构建一个 Rtf 文档并将其发送到打印机 trought sokets,但它显然打印文档文本内容而不是文本格式......我尝试了许多其他方法来编码要发送的数据但没有结果...有办法做到这一点,还是我只是在浪费时间?如果没有,有没有办法实现发送 PCL/PostScript 数据? (通常驱动程序是新激光打印机上基本命令的“标准”)。这是我用来在网络打印机上打印的功能:
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 由:
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();
谢谢你的帮助,
军团
P.S.:外部库是不允许的,所以我不能使用 printCE 或类似的“帮助”。
最佳答案
对不起,我试着更好地解释我是如何达到目标的,这是一个在@josef link 之后制作的示例函数。 ,我在选择的位置写了一些文本,并在屏幕中央画了一个红色框(注释解释了 pcl 命令的工作原理)。按照 PCL 手册,您可以根据需要轻松自定义文本和绘图 (HERE_AN_HP_MANUAL)。
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();
}
现在对于图像,您有 2 种方法可以遵循:
1) 使用 PCL 命令“手动”绘制图像,see from page 41 of that manual查看一些示例(如果是像我这样的简单示例,那就是简单的条形码是最好的遵循方式)。
2) 用 PCL 宏绘制图像……我只能这么说,因为请阅读 that documentation让我很头疼,迫使我选择方法 1 :D
希望对你有帮助军团
关于c# - 紧凑的框架套接字文档打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50060831/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!