2010-12-06 17 views
24

Ich verwende C# mit Winforms. Ich versuche Rechnungen auf einer Papierrolle zu drucken. Die Breite des Papiers beträgt 3 Zoll, aber die Länge des Papiers ist dynamisch (es ist ein Rollenpapier). Die Länge hängt davon ab, wie viele Elemente sich in der Liste befinden. Z.B. in einem Kauf, wenn es 100 verkaufte Artikel gibt, wird es ziemlich lang sein, während für einen einzelnen gekauften Artikel es von geringer Länge sein würde.Drucken auf Rollenpapier

Wenn ich den Bericht nach dem Endauftrag drucke, druckt der Drucker die letzte Seite mehr als ich brauche. Es wirft Papier so lange wie A4 aus. Ich möchte die erforderlichen Zeilen drucken und den Druckvorgang beenden. Ich benutze eine Papierrolle, nicht A4 oder A3 und einen Epson LQ-300 + II Drucker.

Um genauer zu sein, erfolgt der Druck immer auf seitengroße Einheiten. Wenn ich die Seite auf 3in x 8in einstelle, dann habe ich immer einen Ausdruck, der ein Vielfaches von 8in lang ist. Wenn ich eine 9in Rechnung drucken muss, habe ich am Ende einen 16in Ausdruck, der 7in Papier verschwendet. Wie kann ich mit der letzten Seite nur so lange drucken, wie es sein muss? Hier

ist der Code:

private void printDoc_PrintPage(Object sender, PrintPageEventArgs e) 
     { 
      Font printFont = new Font("Courier New", 12); 
      int y = 15; 
      e.Graphics.DrawString("a Line", printFont, Brushes.Black, 0, y); y = y + 20; 
      e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 25; 
      e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 35; 
      e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 45; 
     } 
+5

Was ist Ihre Frage? Sie sollten einfach weiter drucken können, bis Sie fertig sind. Dann bist du fertig. Das ist der Vorteil von Rollenpapier. –

+0

+1, zeichne einfach weiter bis du fertig bist und beende eine Aussage, um das Papier zu schneiden. Ich habe dies mit GDI gemacht, keine Erfahrung mit Crystal Reports – Anton

Antwort

15

Haben Sie versucht, eine Seite verwenden, die nur "eine Zeile" long?

Lassen Sie den oberen und unteren Rand aus, und Sie können nonstop drucken.

Fügen Sie jetzt ein bisschen hinzu (damit die Seite abgerissen werden kann) und werfen Sie es aus.

Try this:

  PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200); 

      printDoc.DefaultPageSettings.PaperSize = pkCustomSize1 

See: http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx

+0

Angesichts der Einschränkungen scheint dies die logischste Antwort. – NotMe

+0

Wie können wir ein einzeiliges Papier definieren? Ich habe nur Standardgrößen in der Druckereinstellung gesehen. – Thunder

+0

Siehe oben ...... –

4

Sie können auch die Papiergröße im laufenden Betrieb anpassen. Weniger Arbeit ihm eine Zeile pro Seite zu tun, aber ich würde das vorstellen würde ein schöneres Druckvorschau erzeugen, wenn jemand Ursache zu haben, war zu tun, dass:

printdoc.DefaultPageSettings.PaperSize.Height += lineheight; 
+0

diese Codierung funktioniert nicht für mich. In welchem ​​Fall sollte ich diese Kodierung angeben? .. ich habe sie in einem Druckseitenereignis verwendet. – Sathish

+0

Das würdest du beim Zeichnen jeder Zeile machen wollen. Und Sie möchten mit einer benutzerdefinierten Ein-Zeilen-Papiergröße beginnen, wie die akzeptierte Antwort vorgeschlagen. Die Höhe ist für Standardpapierformate nicht beschreibbar. –

0

Hier ist, wie Sie eine benutzerdefinierte Papiergröße definieren und Verwenden Sie es in Ihrem Bericht.

Öffnen Sie den Druckerordner (über die Systemsteuerung).

Öffnen Sie Server-Eigenschaften aus dem Dateimenü. Es wird geöffnet Drucker- und Servereigenschaften Dialogfeld.

Select prüfen Erstellen eines neuen Formulars

Seitenbreite Höhe angeben. Ich schlage vor, Sie machen Ihre Größe 3 Zoll.

Klicken Sie jetzt auf die Schaltfläche Formular speichern.

Ihre benutzerdefinierte Seite ist bereit.

Legen Sie dieses Papier sowohl im Bericht als auch in den Druckereigenschaften als Standardpapierformat fest.

Jetzt sind Sie gut zu gehen.

+0

sollte zumindest angeben, welches Betriebssystem Sie dafür verwenden. –

0

Sie können auch die Druckvorschauoption verwenden, um diesen Vorgang abzuschließen.

// This is for the print preview event 
private void printPreviewDialog1_Load(object sender, EventArgs e) 
{ 
    int j = 0; 
    z = 185; 

    while (j < dataGridView1.Rows.Count) 
    {     
     j += 1; 
     z += 30; 
    } 

    z += 60; 

    PaperSize pkCustomSize1 = new PaperSize("First custom size", 350, z); 

    printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1; 
} 

// This is the loop for generating print Document 
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    int i = 0; //For Gridview Row Count 
    int sno = 1; //For Grid Serial Number 

    e.Graphics.DrawString(
     "HEADING", 
     new Font("Calibri", 20, FontStyle.Bold), 
     Brushes.Black, 
     new Point(100, 5)); 

    e.Graphics.DrawString(
     "Address", 
     new Font("Calibri", 12, FontStyle.Bold), 
     Brushes.Black, 
     new Point(75, 35)); 

    int y = 185; //For Grid y axis start to print 

    while (i < dataGridView1.Rows.Count) 
    { 
     e.Graphics.DrawString(
      sno.ToString(), 
      new Font("Calibri", 10, FontStyle.Bold), 
      Brushes.Black, 
      new Point(10, y)); //For Serial Number 

     e.Graphics.DrawString(
      dataGridView1.Rows[i].Cells[1].FormattedValue.ToString(), 
      new Font("Calibri", 10, FontStyle.Bold), 
      Brushes.Black, 
      new Point(240, y)); 

     //This is for Trim content to next line 
     Graphics df1 = e.Graphics; 
     SizeF ef1 = df1.MeasureString(
      dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), 
      new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold), 
      200); //160 

     df1.DrawString(
      dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), 
      new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold), 
      Brushes.Black, 
      new RectangleF(new PointF(60.0F, y), ef1), //350.0 
      StringFormat.GenericTypographic); 

     i += 1; 
     sno += 1; 
     y += 30; 
    } 

    e.Graphics.DrawString(
     "------------------------------------------------------------------------------------", 
     new Font("Calibri", 10, FontStyle.Bold), 
     Brushes.Black, 
     new Point(0, y)); 

    e.Graphics.DrawString(
     "Total Amount-:" + TotalAmnt_txt.Text, 
     new Font("Calibri", 10, FontStyle.Bold), 
     Brushes.Black, 
     new Point(150, y+=20)); 

    e.Graphics.DrawString(
     "------------------------------------------------------------------------------------", 
     new Font("Calibri", 10, FontStyle.Bold), 
     Brushes.Black, 
     new Point(0, y+=20)); 

    e.Graphics.DrawString(
     "***Care For You ****", 
     new Font("Calibri", 10, FontStyle.Bold), 
     Brushes.Black, 
     new Point(150, y += 20)); 

    i = 0; 
    sno = 1; 
}