gpt4 book ai didi

.net - 使用 .NET PrintDocument 动态纸张高度

转载 作者:行者123 更新时间:2023-12-02 15:40:46 24 4
gpt4 key购买 nike

我在热敏打印机上调整页面大小时遇到​​了问题。我从这个答案开始:https://stackoverflow.com/a/27165167/1030464现在我有了下面粘贴的代码。

这很好用,但是尽管我计算并设置了页面的大小,但似乎每次都会打印完整的 A4 大小的页面。 (我正在 Sam4s Ellix II 和 Microsoft PDF 打印机上进行测试) - 这是一个大问题,因为需要经常打印 5-6 行长文本片段。

我需要支持多台热敏打印机,并且只需要基本功能(因此不需要接收卡纸等信号),因此我决定使用 Windows 打印机驱动程序,而不是 .NET 的 POS一个。

我计算文本的高度并相应地调整纸张尺寸,但它对输出纸张尺寸没有影响。有人能解决这个问题吗?

非常感谢

public int Print(DatabaseConnector dc)
{
try {

// Set up PrintDocument
PrintDocument recordDoc = new PrintDocument();
recordDoc.DocumentName = "PrintTask ID "+id.ToString();
recordDoc.PrintPage += new PrintPageEventHandler(PrintTask.PrintReceiptPage); // Filling in the stuff

// Print Controller
StandardPrintController spc = new StandardPrintController();
recordDoc.PrintController = spc; // This hides popup

// Printer Settings
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = dc.ReadSetting("PrinterName");
recordDoc.PrinterSettings = ps;
recordDoc.Print();

// Clean up
recordDoc.Dispose();
}
catch (Exception exc)
{
((MainForm)Application.OpenForms[0]).msg(exc.Message);
}
return 1; // ignore this
}

private static void PrintReceiptPage(object sender, PrintPageEventArgs e)
{
try {
// Read settings
DatabaseConnector db = new DatabaseConnector();
PrintTask pt = db.ReadTask();
float x = float.Parse(db.ReadSetting("PaperMarginFromLeft"));
float y = float.Parse(db.ReadSetting("PaperMarginFromTop"));
float width = float.Parse(db.ReadSetting("PaperWidth"));
float height = 0F;
string text;

// Set up font
Font drawFont1 = new Font(db.ReadSetting("PrintFont"), Int32.Parse(db.ReadSetting("PrintFontSize")), FontStyle.Regular);
SolidBrush drawBrush = new SolidBrush(Color.Black);

// Set format of string.
StringFormat drawFormatLeft = new StringFormat();
drawFormatLeft.Alignment = StringAlignment.Near;

// Draw string to screen.
text = pt.getData();
e.Graphics.DrawString(text, drawFont1, drawBrush, new RectangleF(x, y, width, height), drawFormatLeft);

// calculate text size
SizeF textSize = e.Graphics.MeasureString(text, drawFont1);
y += textSize.Height;

// Set page size - has no effect
e.HasMorePages = false;
float inchHeight = PrintTask.PixelsToInchY(y, e.Graphics);
PaperSize originalPaperSize = e.PageSettings.PaperSize;
PaperSize scaledSize = new PaperSize("Custom", originalPaperSize.Width, (int)Math.Ceiling(inchHeight * 100));
e.PageSettings.PaperSize = scaledSize;
e.PageSettings.PrinterSettings.DefaultPageSettings.PaperSize = scaledSize;

}
catch (Exception exc)
{
((MainForm)Application.OpenForms[0]).msg(exc.Message);
}
}

public static float PixelsToInchX(float n, Graphics graphics)
{
return n * graphics.DpiX / 300;
}
public static float PixelsToInchY(float n, Graphics graphics)
{
return n * graphics.DpiY / 300;
}

最佳答案

打印到 POS 打印机时无需计算高度,因为驱动程序会处理纸张高度并在文档末尾进行剪切。转至 POS 打印机设置并选择“收据”作为纸张尺寸。通常还有一些设置来控制打印机裁纸的方式和时间(完全裁纸、部分裁纸、仅送纸......)

关于.net - 使用 .NET PrintDocument 动态纸张高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392714/

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