我有一台爱普生热敏打印机,现在我要打印一些足够长的收据,我使用爱普生提供的代码样本。代码如下所示,现在的问题是,当收据超过一定长度(约30cm)时,打印机会停止并剪切收据,如下图所示。我如何打印长收据没有自动剪切。
// Constant variable holding the printer name.
private const string PRINTER_NAME = "PosPrinter";
// Variables/Objects.
private StatusAPI m_objAPI;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
// The executed function when the Print button is clicked.
private void cmdPrint_Click(object sender, System.EventArgs e)
{
Boolean isFinish;
PrintDocument pdPrint = new PrintDocument();
pdPrint.PrintPage += new PrintPageEventHandler(pdPrint_PrintPage);
// Change the printer to the indicated printer.
pdPrint.PrinterSettings.PrinterName = PRINTER_NAME;
try
{
// Open a printer status monitor for the selected printer.
if (m_objAPI.OpenMonPrinter(OpenType.TYPE_PRINTER, pdPrint.PrinterSettings.PrinterName) == ErrorCode.SUCCESS)
{
if (pdPrint.PrinterSettings.IsValid)
{
pdPrint.DocumentName = "Testing";
// Start printing.
pdPrint.Print();
// Check printing status.
isFinish = false;
// Perform the status check as long as the status is not ASB_PRINT_SUCCESS.
do
{
if (m_objAPI.Status.ToString().Contains(ASB.ASB_PRINT_SUCCESS.ToString()))
isFinish = true;
} while (!isFinish);
// Notify printing completion.
MessageBox.Show("Printing complete.", "Program06", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
MessageBox.Show("Printer is not available.", "Program06", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// Always close the Status Monitor after using the Status API.
if(m_objAPI.CloseMonPrinter() != ErrorCode.SUCCESS)
MessageBox.Show("Failed to close printer status monitor.", "Program06", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
MessageBox.Show("Failed to open printer status monitor.", "Program06", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
catch
{
MessageBox.Show("Failed to open StatusAPI.", "Program06", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
// The event handler function when pdPrint.Print is called.
// This is where the actual printing of sample data to the printer.
private void pdPrint_PrintPage(object sender, PrintPageEventArgs e)
{
float x, y, lineOffset;
// Instantiate font objects used in printing.
Font printFont = new Font("Microsoft Sans Serif", (float)10, FontStyle.Regular, GraphicsUnit.Point); // Substituted to FontA Font
e.Graphics.PageUnit = GraphicsUnit.Point;
// Draw the bitmap
x = 79;
y = 0;
e.Graphics.DrawImage(pbImage.Image, x, y, pbImage.Image.Width - 13, pbImage.Image.Height - 10);
// Print the receipt text
lineOffset = printFont.GetHeight(e.Graphics) - (float)3.5;
x = 10;
y = 24 + lineOffset;
for (int i = 0; i < 500; i++)
{
e.Graphics.DrawString("123xxstreet,xxxcity,xxxxstate", printFont, Brushes.Black, x, y);
y += lineOffset;
}
e.Graphics.DrawString(" TEL 9999-99-9999 C#2", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString(" November.23, 2007 PM 4:24", printFont, Brushes.Black, x, y);
y = y + (lineOffset * (float)2.5) ;
e.Graphics.DrawString("apples $20.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("grapes $30.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("bananas $40.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("lemons $50.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("oranges $60.00", printFont, Brushes.Black, x, y);
y += (lineOffset * (float)2.3);
e.Graphics.DrawString("Tax excluded. $200.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("Tax 5.0% $10.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("___________________________________", printFont, Brushes.Black, x, y);
printFont = new Font("Microsoft Sans Serif", 20, FontStyle.Regular, GraphicsUnit.Point);
lineOffset = printFont.GetHeight(e.Graphics) - 3;
y += lineOffset;
e.Graphics.DrawString("Total $210.00", printFont, Brushes.Black, x - 1, y);
printFont = new Font("Microsoft Sans Serif", (float)10, FontStyle.Regular, GraphicsUnit.Point);
lineOffset = printFont.GetHeight(e.Graphics);
y = y + lineOffset + 1;
e.Graphics.DrawString("Customer's payment $250.00", printFont, Brushes.Black, x, y);
y += lineOffset;
e.Graphics.DrawString("Change $40.00", printFont, Brushes.Black, x, y - 2);
// Indicate that no more data to print, and the Print Document can now send the print data to the spooler.
e.HasMorePages = false;
}
// The executed function when the Close button is clicked.
private void cmdClose_Click(object sender, System.EventArgs e)
{
Close();
}
大多数热敏打印机都有一个指示是否剪切收据的设置。
在这种情况下,如果绘制的内容在默认边距(E.MarginBounds)之外,至少可以尝试将e.hasmorePages设置为true。这取决于打印机驱动程序是在所有页面的末尾剪切,还是只在最后一页剪切。当然,您将需要做自己的分页,例如,在第一页上只绘制应该在第一页上的项目,等等。
我必须使用Java通过热敏打印机打印收据。我已经完成了所有工作。我的程序从数据库中获取数据,并使用特殊字符、制表符和\n转换为一个字符串。然后将字符串传递给另一个将其转换为图形的方法。 问题是当我点击打印按钮时,白纸就出来了。我注意到我的字符串的前4-5个字符被打印在纸币最末端右上角的最后一行。我的打印机是爱普生TM-T81。 打印账单的方法是: 问题是什么?我该如何解决?我认为我没有在drawS
我必须用热敏打印机打印发票收据。我用Zjiang热敏打印机打印收据。他们还提供了手册和演示项目。在演示项目中,他们使用一个库“btsdk.jar”来实现连接和打印。 我已经成功地建立了打印机和android设备之间的连接。但是没有关于文本对齐(中心、左、右)&单元格宽度、高度的指导原则。 我试过了。它只通过改变format2变量来改变文本高度。 打印信息- 发票收据
问题内容: 我正在为具有内置行式打印机的Android设备开发应用程序。我必须与此打印机进行交互,并使用它来打印收据上的详细信息,然后使用裁纸器自动剪切该收据。我已经在其中看到了一些ESC命令,但是我不知道如何执行这些ESC命令。 关于Casio设备打印机,我有三个主要问题: 1.我已经使用了内置打印机的打印代码,但是打印后切纸刀没有激活 2.我不知道如何在android中将ESC命令发送到打印机
编辑:所以在一天的混乱之后。我的问题是spintf。我最初认为我的循环是错误的。
早在2007年,我就用Java编写了一些软件来控制Epson TM90收据打印机。我的软件使用JavaPOS API。 这个JavaPOS软件似乎已经不存在了! 2012年,从Win7通过USB从用Wava编写的应用程序驱动Epson Receipt打印机的正确方法是什么? TIA BfW
有没有办法让我在蓝牙热敏打印机上打印收据,因为我真的很难在Flutter上找到解决方案?任何事情都能帮上忙,我真的很感谢你的回答