【发布时间】:2015-06-08 11:20:41
【问题描述】:
我在谷歌上搜索了很多,但没有找到我真正想要的。我得到以下代码,它将打印变量name。我有一台 Epson 点阵打印机和卷纸(无尽的连续纸)。
我的问题是,在打印 name 后,进纸的尺寸为 A4。我不想要进纸。此应用程序旨在打印收据,其中包含无限数据,需要完美打印(无分页符)。
各位聪明人能用这些代码为我指明正确的方向吗? 编辑此代码并更改场景..请进一步向下移动
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
Font Heading2 = new Font("Times New Roman", 13);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Near;
sf.Alignment = StringAlignment.Center;
//e.HasMorePages = false;
PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);
pd.DefaultPageSettings.PaperSize = pkCustomSize1;
e.Graphics.DrawString(name.ToString(), Heading1, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width / 2), e.MarginBounds.Top, sf);
}
编辑 1:- @Adriano Repetti 建议这是与 Form feed in c# printing 的副本。我从上述问题中学到的是他想要添加表单提要。但我想删除表单提要。
编辑 2:- 我通过谷歌搜索得到另一个提示,将page Height 设置为等于line height 将停止喂食,这听起来很有希望。我也在努力解决这个问题。
编辑 3:- @Adriano Repetti 建议我使用 KB link 进行原始打印(直接打印二进制数据)。我搜索了一下,发现它的 c# better 等效 paste bin 或 pastie.org(提供是因为它很方便)。起初它听起来不错,它很好地停止了表格馈送。但最终我碰到了一些冰山。
- 在我的代码中,我必须将一些打印引号对齐到 center 或对齐到 left`。为此,我只能选择使用 space 和 tabs。但是不能保证它的格式会很好,因为我们不能确定带有打印机的内置字体。(Refer:SO Question by @syncis)
- 其次,我将不得不将我的应用程序迁移到支持 unicode(本地语言支持) 的应用程序,至少在一个月左右的时间内。在那种情况下,原始打印将无济于事,我将不得不再次检查这些面孔。所以,为了避免这种情况,我最好留在 Graphics DrawString。为此,我将代码更改为。
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
Font Heading2 = new Font("Times New Roman", 13);
// changed following statement to met with new **unicode** criteria
//e.Graphics.DrawString(name.ToString(), Heading1, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width / 2), e.MarginBounds.Top, sf);
TextRenderer.DrawText(e.Graphics, "My name in local language is വിനീത്", Heading2, new Point(0, 0), Color.Black);
}
针对当前的问题,我将问题扩展标签重新定义为 unicode 为。
How can print with TextRenderer.DrawText with unicode support without form feeding ? 我认为将纸张高度设置为行高可以解决我的问题。如果是这样,如何或建议我更好的方法来停止进纸。真是占用了我很多宝贵的时间……
编辑 4: 今天我发现了一件关于我的打印机的非常有趣的事情。我什至无法手动设置自定义纸张尺寸(不是通过编码..我的意思是控制面板->打印机和传真机->Epson LX-300+->属性->打印首选项->纸张/质量->高级->纸张尺寸- > BOOOOOM 未显示我的自定义纸张尺寸)。我正在使用爱普生 LX-300+ 打印机。大家认为它不支持自定义纸张尺寸吗?这会给我带来麻烦吗?
【问题讨论】:
-
请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”!
-
我不认为它是重复的。因为在Form feed in c# printing 尝试插入表单提要,而在这里我试图删除表单字段。
-
对不起,我粘贴了错误的链接。 AFAIK 问题是 PrintDocument 将为每个页面添加一个换页符,并且所有逻辑都假设您每次都在打印一个页面。是的,您可以保留数据直到页面完成,或者以本文所述的正确(硬)方式进行(对于 VB.NET,但代码很容易翻译):support.microsoft.com/en-us/kb/322090
-
感谢 @Adriano Repetti 提供 [KB 链接](support.microsoft.com/en-us/kb/322090)。我在单独的 VB 项目中运行代码,它就像是为我制作的一样执行。我将很快转换代码并发布更新。
-
使用 PrintDocument 类是错误的做法。在 Windows 中打印是基于页面的,只要您使用打印机驱动程序,您总会得到换页。它也是出了名的慢,对于销售点应用程序来说太慢了。您需要绕过驱动程序并将命令直接发送到打印机,this KB article 显示如何。将“吃饭时间”问题至少乘以 pi 平方。
标签: c# unicode printing drawstring