Я разрабатываю модуль в биллинговой системе для национальной утилиты. Модуль должен выбрать всех успешно выставленных клиентов и распечатать свои счета. Записи записываются в виде текстовых файлов и сохраняются в локальной папке, и программа должна их подбирать и печатать по одному. Я использую DFX-9000 принтер и предварительно отформатированная рулонная бумага, однако каждый раз, когда приходит новый счет, принтер пропускает некоторое пространство перед тем, как распечатает его, что искажает второй и последующие счета. Я попытался поместить все счета в один текстовый файл, который хорошо печатается при открытии в блокноте, но не в моем коде. Вот часть моего кодаПечать нескольких счетов в C#
Font printFont = new Font("Lucida Console", 10);
//static string filename;
StreamReader reader = new StreamReader(Filename);
public void Print()
{
try
{
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("myPaper", 826, 1169);
pd.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
//pd.DefaultPageSettings.PrinterSettings.IsPlotter = true;
pd.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.Custom;
pd.PrintPage += new PrintPageEventHandler(this.PrintTextFileHandler);
pd.Print();
if (reader != null)
reader.Close();
Console.WriteLine("Printout Complete");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void PrintTextFileHandler(object sender, PrintPageEventArgs pe)
{
StringFormat sf = new StringFormat();
Graphics g = pe.Graphics;
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = 40;//pe.MarginBounds.Left;
float topMargin = pe.MarginBounds.Top;
string line = null;
linesPerPage = 500;// pe.MarginBounds.Height/printFont.GetHeight(g);
while (count <= linesPerPage &&((line = reader.ReadLine()) != null))
{
yPos = topMargin + (count * printFont.GetHeight(g));
g.DrawString(line, printFont, Brushes.Black, leftMargin, yPos);
count++;
}
if (line != null)
{
pe.HasMorePages = true;
}
else
{
pe.HasMorePages = false;
}
Дело в том, что если я распечатаю один счет, он выглядит нормально, но проблема возникает, когда я пытаюсь напечатать более 1. Я думаю, мне нужно создать один файл с бесконечной высотой с правильным интервалом после каждого конкретного счета, чтобы принтер видит его как одну страницу –
Итак, если вы уменьшаете размер до 1100, делаете ли строки обрезаны? – FolksymAndrew