我在谷歌搜索了很多,但没找到我真正想要的东西。我得到了以下代码,它将打印变量name
。我买了一台Epson Dot Matrix打印机和卷纸(无尽的连续纸)。
我的问题是,在打印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);
}
。我不想要纸张。此应用程序旨在打印收据,其中包含无限数据,无需打印(不包括分页符)。
那么聪明的人可以用这些代码指出我正确的方向吗? 修改了此代码并更改了方案..请进一步向下移动
page Height
编辑1: - @Adriano Repetti建议这与Form feed in c# printing重复。我从上面的问题中学到的是,他想添加表单提要。但我想删除换页。
编辑2: - 我通过Google搜索获得了另一个提示设置line height
等于//---------
// start button click
//---------
PrintDocument pdoc = new PrintDocument();
pdoc.DefaultPageSettings.PaperSize.Height = 300;
pdoc.Print();
//---------
// end button click
//---------
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);
}
会停止投放,这听起来很有希望。我也试图解决这个问题。
编辑3: - @Adriano Repetti建议我使用KB link进行原始打印(直接打印二进制数据)。我搜索了它,发现它的c#更好等效paste bin或pastie.org(因为它是一个方便的提供)。起初它听起来不错,它很好地停止了喂食。但最终我敲了一些冰山。
TextRenderer.DrawText with unicode support
目前存在问题,我正在将问题扩展标记重新定义为 unicode 。
如何打印 without form feeding
{{1}} ?我认为将纸张高度设置为行高会解决我的问题。如果是这样或建议我更好的方法来停止喂纸。它真的占用了我很多宝贵的时间......
编辑4:嘿伙计们,今天我发现我的打印机非常有趣。我甚至无法手动设置自定义纸张尺寸(不是通过编码..我的意思是控制面板 - >打印机和传真 - > Epson LX-300 + - >属性 - >打印首选项 - >纸张/质量 - >高级 - >纸张尺寸 - > BOOOOOM未显示我的自定义纸张尺寸)。我正在使用Epson LX-300 +打印机。人们认为它不支持自定义纸张尺寸吗?这是给我带来麻烦吗?
答案 0 :(得分:0)
我自己找到了解决方案(对不起我的英语),正如汉斯·帕桑特(Hans Passant)所说的(PrintDocument基于页面。故事的结尾),您必须使用(e.HasMorePages = true;)
float cordenadaX;
float cordenadaY;
int totalPages;
int paginaAtual;
int indiceItem;
List<string> items;
public void ImprimeDanfeNFCe()
{
totalPages = 1;
paginaAtual = 1;
indiceItem = 0;
cordenadaX = 0;
cordenadaY = 0;
items = new List<string>();
items.Add("Item1");
items.Add("Item2");
items.Add("Item3");
(............)
PrintDocument recordDoc = new PrintDocument();
recordDoc.DocumentName = "xMarket danfe";
recordDoc.PrintPage += new PrintPageEventHandler(imprimeDanfeReceipt);
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "My printer";
recordDoc.PrinterSettings = ps;
recordDoc.Print();
recordDoc.Dispose();
}
void imprimeDanfeReceipt(PrintPageEventArgs e)
{
float pageHeight = e.MarginBounds.Height;
string text = "";
if (paginaAtual == 1)
{
text = "Cupom header";
e.Graphics.DrawString(text, drawFontDanfeTitulo, drawBrush, new
RectangleF(cordenadaX, cordenadaY, width, height),
drawFormatCenter);
cordenadaY += e.Graphics.MeasureString(text, drawFontDanfeTitulo).Height;
}
for (int i = indiceItem; i < items.Count; i++)
{
int indice = i + 1;
//items[i] Is very important to not print same items again while print next page
e.Graphics.DrawString(items[i], drawFontDanfeItems, drawBrush,
new RectangleF(cordenadaX, cordenadaY, width, height), drawFormatLeft);
cordenadaY += e.Graphics.MeasureString(text, drawFontDanfeTitulo).Height;
indiceItem++;
//cordenadaY+100 is for the size of the footer
if (cordenadaY+100 >= pageHeight)
{
paginaAtual++;
e.HasMorePages = true;
return;
}
}
e.Graphics.DrawString("page footer", drawFontDanfeItems, drawBrush,
new RectangleF(cordenadaX, cordenadaY, width, height), drawFormatLeft);
cordenadaY += e.Graphics.MeasureString(text, drawFontDanfeTitulo).Height;
}