卷纸中的收据打印

时间:2015-06-08 11:20:42

标签: c# unicode printing drawstring

我在谷歌搜索了很多,但没找到我真正想要的东西。我得到了以下代码,它将打印变量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 binpastie.org(因为它是一个方便的提供)。起初它听起来不错,它很好地停止了喂食。但最终我敲了一些冰山。

  • 在我的代码中,我必须将一些打印引号与 center 对齐或与 left 对齐。我只能选择空格标签。但是不能保证格式化得很好,因为我们无法确定打印机内置的字体。(Refer:SO Question by @syncis
  • 其次,我必须将我的应用程序移动到 unicode(本地语言支持)能力,至少在一个月左右。在那种情况下,原始印刷不会有帮助,我将不得不再次通过这些面孔。所以,为了避免让我更好地使用 Graphics DrawString 。为此我改变了我的代码。
TextRenderer.DrawText with unicode support

目前存在问题,我正在将问题扩展标记重新定义为 unicode

如何打印 without form feeding {{1}} 我认为将纸张高度设置为行高会解决我的问题。如果是这样或建议我更好的方法来停止喂纸。它真的占用了我很多宝贵的时间......

编辑4:嘿伙计们,今天我发现我的打印机非常有趣。我甚至无法手动设置自定义纸张尺寸(不是通过编码..我的意思是控制面板 - >打印机和传真 - > Epson LX-300 + - >属性 - >打印首选项 - >纸张/质量 - >高级 - >纸张尺寸 - > BOOOOOM未显示我的自定义纸张尺寸)。我正在使用Epson LX-300 +打印机。人们认为它不支持自定义纸张尺寸吗?这是给我带来麻烦吗?

1 个答案:

答案 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;

}