2010-12-06 9 views
24

J'utilise C# avec Winforms. J'essaie d'imprimer des factures sur un rouleau de papier. La largeur du papier est de 3 pouces mais la longueur du papier est dynamique (c'est un papier rouleau). La longueur dépend du nombre d'éléments présents dans la liste. Par exemple. dans un achat s'il y a 100 articles vendus alors ce sera un roulement assez long tandis que pour un seul article acheté il serait de petite longueur.Impression sur du papier en rouleau

Lorsque j'imprime le rapport, après le travail final, l'imprimante éjecte la dernière page plus que nécessaire. Il éjecte le papier aussi longtemps que le format A4. Je veux imprimer les lignes requises, puis arrêter l'impression. J'utilise un rouleau de papier, pas A4 ou A3 et une imprimante Epson LQ-300 + II.

Pour être plus précis, l'impression est toujours effectuée sur des unités de la taille d'une page. Si je règle la page à 3in x 8in alors je finis toujours avec une impression qui est un multiple de 8in long. Si j'ai un projet de loi de 9 pouces à imprimer, je me retrouve avec une impression de 16 pouces, gaspillant 7 pouces de papier. Comment puis-je imprimer avec la dernière page étant aussi longtemps que nécessaire?

Voici le 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

Quelle est votre question? Vous devriez simplement pouvoir continuer à imprimer jusqu'à ce que vous ayez fini. Ensuite, vous aurez terminé. C'est l'avantage du papier rouleau. –

+0

+1, continuez à dessiner jusqu'à ce que vous avez terminé et terminer avec une déclaration pour couper le papier. J'avais l'habitude de le faire en utilisant GDI, aucune expérience avec les rapports Crystal – Anton

Répondre

15

Avez-vous essayé d'utiliser une page qui est seulement "une ligne" longue? Omettez les bordures supérieure et inférieure et vous pouvez imprimer sans arrêt.

Maintenant, ajoutez un bit (donc la page peut être arrachée) et éjectez-le.

Essayez ceci:

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

      printDoc.DefaultPageSettings.PaperSize = pkCustomSize1 

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

+0

Compte tenu des contraintes, cela semble être la réponse la plus logique. – NotMe

+0

Comment pouvons-nous définir un papier à une seule ligne ?, J'ai vu seulement des tailles standard dans le réglage de l'imprimante. – Thunder

+0

Voir ci-dessus ...... –

4

Vous pouvez également régler la taille du papier à la volée. Moins de travail pour faire une ligne par page, mais j'imagine ce produirait un plus bel aperçu avant impression si quelqu'un devait avoir des raisons de le faire:

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

ce codage ne fonctionne pas pour moi. dans quel événement je devrais spécifier ce codage? .. j'ai utilisé dedans sur l'événement de page d'impression .. – Sathish

+0

Vous voudriez faire cela pendant que vous dessinez chaque ligne. Et vous voudriez commencer avec une taille de papier d'une ligne personnalisée comme réponse acceptée. La hauteur n'est pas accessible en écriture pour les formats de papier standard. –

0

Voici comment vous pouvez définir un format de papier personnalisé et utilisez-le dans votre rapport.

Ouvrir le dossier de l'imprimante (à partir du Panneau de configuration).

Ouvrir Propriétés du serveur dans le menu Fichier. Il s'ouvrira Propriétés de l'imprimante et du serveur Boîte de dialogue.

Sélectionnez Vérifier Créer un nouveau formulaire

largeur hauteur Spécifiez la page. Je vous suggère de faire votre hauteur de 3 pouces. Cliquez sur le bouton Enregistrer le formulaire.

Votre page personnalisée est prête.

Définissez ce papier comme format de papier par défaut à la fois dans le rapport et dans les propriétés de l'imprimante.

Maintenant, vous êtes prêt à partir.

+0

aurait dû au moins spécifier quel système d'exploitation vous utilisez pour cela. –

0

Vous pouvez également utiliser l'option d'aperçu avant impression pour terminer ce processus.

// 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; 
} 
Questions connexes