gpt4 book ai didi

c# - 用卷纸打印收据

转载 作者:行者123 更新时间:2023-12-03 21:38:35 24 4
gpt4 key购买 nike

我在谷歌搜索了很多,没有找到我真正想要的。我得到了以下代码,它将打印变量 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 binpastie.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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com