我在谷歌搜索了很多,没有找到我真正想要的。我得到了以下代码,它将打印变量 name
.我有一台爱普生点阵打印机和卷纸( headless 连续纸)。
我的问题是,打印后 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# 更好 等效 paste bin或 pastie.org (提供是因为它是一个方便的)。起初听起来不错,而且在停止表单喂养时效果很好。但最终我撞上了一些冰山。
在我的代码中,我必须将一些打印引号与 对齐。中心或对齐到 左 `.为此我只能选择使用 空间和 标签 .但是不能保证它的格式会很好,因为我们不能确定打印机内置的字体。( Refer:SO Question by @syncis )
其次,我必须将我的申请移至 unicode(本地语言支持)有能力的,至少用一个月左右。在那种情况下,原始打印无济于事,我将不得不再次查看这些面孔。所以,为了避免这种情况,我最好留在 图形拉绳 .为此,我将代码更改为。
//---------
//点击开始按钮
//---------
PrintDocument pdoc = new PrintDocument();
pdoc.DefaultPageSettings.PaperSize.Height = 300;
pdoc.Print();
//---------
//结束按钮点击
//---------
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 作为。如何用打印
TextRenderer.DrawText with unicode support
without form feeding
? 我认为将纸张高度设置为行高将解决我的问题。如果是这样,如何或建议我停止进纸的更好方法。它真的占用了我很多宝贵的时间......编辑 4:今天我发现了一个关于我的打印机的非常有趣的事情。我什至不能手动设置自定义纸张尺寸(不是通过编码..我的意思是控制面板->打印机和传真->爱普生LX-300+->属性->打印首选项->纸张/质量->高级->纸张尺寸-> BOOOOOM 没有显示我的自定义纸张尺寸)。我正在使用爱普生 LX-300+ 打印机。大家认为它不支持自定义纸张尺寸吗?这给我带来了问题吗?
最佳答案
我自己找到了解决方案(对不起我的英语)正如 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;
}
关于c# - 用卷纸打印收据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707804/