c# c/s 打印
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# c/s 打印相关的知识,希望对你有一定的参考价值。
我就是想点了一个按钮 就把当前的页面 打印出来 包括dataGridView 和一些 label 和 textbox 请问 如何实现
恩 haoluogaga 说的没错 是窗体 我要点击按钮 然后打印出当前的窗体的所有内容 这个窗体有包括dataGridView label textBox 等一些控件
一种是直接ctrl+p,这种方法会把所有页面内容打印出来。
一种是把要打印的内容传到另外一个页面上,很麻烦。
还有一种是用Panel控件,把要打印的内容拖到Panel控件中。然后在后台代码中添加如下内容:(这些代码是在网上找的)
public class PrintHelper
public PrintHelper()
public static void PrintWebControl(Control ctrl)
PrintWebControl(ctrl, string.Empty);
public static void PrintWebControl(Control ctrl, string Script)
StringWriter stringWrite = new StringWriter();
System.Web.UI.htmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
if (ctrl is WebControl)
Unit w = new Unit(100, UnitType.Percentage); ((WebControl)ctrl).Width = w;
Page pg = new Page();
pg.EnableEventValidation = false;
if (Script != string.Empty)
pg.ClientScript.RegisterStartupScript(pg.GetType(), "Printjavascript", Script);
HtmlForm frm = new HtmlForm();
pg.Controls.Add(frm);
frm.Attributes.Add("runat", "server");
frm.Controls.Add(ctrl);
pg.DesignerInitialize();
pg.RenderControl(htmlWrite);
string strHTML = stringWrite.ToString();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write(strHTML);
HttpContext.Current.Response.Write("<script>window.print();</script>");
HttpContext.Current.Response.End();
当点击按钮时,调用PrintHelper.PrintWebControl(Panel1);就行了。
参考资料:http://hi.baidu.com/linsir/blog/item/feb10c23a08b0e4dad34dea3.html
参考技术B C/S模式 哪来的页面呀?是窗体吧!!
首先你要丢上去一个按钮 一般使用Button按钮。
双击 进入 然后在里面写上相应的代码。
由于你的问题写的太抽象,所以没办法回答具体。
有疑问Hi我
你不是有个Button控件么?
双击进去,然后再写你的代码啊。
至于怎么写 就看你自己的需求了。
一般dataGridView使用的时候 都是绑定一个数据源。也就是从数据库查询数据出来 然后显示! 参考技术C 应该没有那个功能,要么截图打印,要么就做用水晶报表
C# 代码 128 不打印出来
【中文标题】C# 代码 128 不打印出来【英文标题】:C# Code 128 does not print out 【发布时间】:2017-01-08 20:18:17 【问题描述】:我最初提出的问题是 C# Saving a form to image without anti aliasing 我正在尝试将 Code128 打印到打印机。由于屏幕捕获会降低打印质量,因此我决定直接编写代码进行打印。 除 Code128 外,所有图片和文字均可正常打印
以下是我打印 Code128 的代码。内容已经正确生成。
SizeF sizeLoginID128 = e.Graphics.MeasureString(this.strUserID128, font1DText);
e.Graphics.DrawString(this.strUserID128, font1DText, Brushes.Black, fInfoStartX + TEXT_LEFT_MARGIN_OFFSET, fInfoStartY + TEXT_TOP_MARGIN_OFFSET);
字体可以在FONTS目录下找到,是真字体。在 GUI 设计阶段,字体也能正常显示。但是打印出来的时候,打印出来的code128不见了。
有没有人知道为什么或者我没有再次正确地做事
编辑
根据要求,这里是 FONT 文件夹中字体的屏幕截图
字体的声明为as
Font font1DText = new Font("Code 128", 12);
strUserID 的内容是 ÌMachine8Î
【问题讨论】:
Code128 是条形码字体的名称。如果这不是您所说的,请更正问题并标记!还告诉我们您正在使用哪种字体,并显示变量strUserID128
!的声明
您好 TaW 我已经更新了问题。请看一看。建议哪个标签也是错误的
啊,所以它是您要打印的条形码?在这种情况下,标签是正确的! I have seen the issue (or soemthing quite similar )before 然后更改字体是最好的解决方案。@ 987654329@ 字符可能是问题所在;条形码字体实际上只是用于数字、大写字母和一些特殊代码。
您好,我相信 ÌMachine8Î 是正确的,因为如果我通过记事本打印,我可以从手持扫描仪上读取数据。删除 Î 字符使其不可读
嗯,Î
是功能 4 (FNC4),据说“没有得到广泛支持”。你实际上想要一个Start Code B 信号,这意味着其余的可以是 32-127 和一些额外的。您可以尝试将Ñ
(0xCE ascii 206) 作为前缀,或者将停止代码Ó
(0xD3 ascii 211) 作为后缀吗?
【参考方案1】:
查看关于 Code 128 的相当详尽的 Wikipedia 文章,您可以看到其中确实有三组字符,分别称为 Code A、B 和 C。
128A(代码集 A)– ASCII 00-95(0–9、A–Z 和控制代码)、特殊字符和 FNC 1–4
128B(代码集 B)– ASCII 32-127(0–9、A–Z、a–z)、特殊字符和 FNC 1–4
128C(代码集 C)– 00–99(使用单个代码点编码两个数字)和 FNC1
您想对混合大小写的字符串进行编码,因此您想使用 Code B。
使用常规 Start Code B 信号:Î
(0xCC ascii 204) 作为前缀,常规 Stop Code Ó
(0xCE ascii 206) 作为后缀:
char StartCodeB = (char)204;
char StopCode = (char)206;
您可以将编码字符串构建为:
string stringToPrintAsBarCode = StartCodeB + "King Kong" + checkSum + StopCode;
顺便说一句:I found some bar code fonts to work better than others,例如说到打印空间。
另请注意,除了 Start&Stop 代码之外,code128 编码字符串还必须包含 校验和字符。如果您遗漏了这三个字符中的任何一个或全部打印的条形码无法扫描!
在您的示例中,“8”是校验和字符。
这是一个计算给定文本和给定起始码的校验和的例程:
static char checkSum128(string data, int startcode)
int sum = startcode;
for (int i = 0; i < data.Length; i++)
sum += (i + 1) * ((byte)(data[i]) - 32);
return (char)((sum % 103)+32);
这是一个工作例程,它将使用给定的起始码字符对给定的文本进行编码:
string EncodeToCode128(string text, char CodeABC)
char Stop = (char)206;
char StartCode = CodeABC == 'A' ? (char)203 :
CodeABC == 'C' ? (char)205 : (char)204;
char check = checkSum128(text, (byte)StartCode - 100);
return StartCode + text + (char)check + Stop;
像这样使用它:
label_barCodeFont.Text = EncodeToCode128("Hello 2017", 'B');
这是结果:
请注意,它相当简单,并且依赖于字符 all 位于相同的给定代码集中;如果不是这种情况,您将不得不扩展它以测试字符并在另一个代码集(可能是代码 A)中的字符之前插入一个合适的移位代码。..
【讨论】:
我已经更新并扩展了答案以包含一个简单的字符串编码函数。它针对一些简单的代码集 B 字符串进行了测试。我还删除了关于您使用错误起始码的评论。我一定是误读了您发布的字符,或者您已更正它们?-)以上是关于c# c/s 打印的主要内容,如果未能解决你的问题,请参考以下文章