none
Erreur lors de la création d'un PDF RRS feed

  • Question

  • Bonjour

    J'essaye de creer une facture pdf, mais le même message d'erreur s'affiche : 

    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index

    Il me met ce message d'erreur alors que je ne fais qu'assigner certaines valeurs dans un tableau. 

    voila ma procédure afin que vous y voyez plus claire. 

      private void button4_Click(object sender, EventArgs e)
            {
                Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
                try
                {
                    // connection a la base donnée pour récuperer les infos des factures.          
                    PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(@"C:\Users\******\Desktop\Facture"+fact+".pdf", FileMode.Create));
                    //Open Document to write
                    doc.Open();
                    //Write some content
                    Paragraph date = new Paragraph(DateTime.UtcNow.ToString("DATE : "+"dd-MM-yyyy H:mm:ss"));
                    date.Alignment = Element.ALIGN_RIGHT;
                     
                    doc.Add(date);
    
                    Paragraph phrase = new Paragraph("Facturé à : Mr/Mme " + nom +"   "+ prenom +"\n");
                    phrase.Alignment = Element.ALIGN_RIGHT; 
                    Chunk chunk = new Chunk("Setting the Font", FontFactory.GetFont("dax-black"));
                    chunk2.SetUnderline(0.5f, -1.5f);
                    doc.Add(phrase);
                    doc.Add(chunk);
    
                    int j= 0;
                    if (dataGridViewFact.RowCount <= 0)
                    {
                        MessageBox.Show("Impossible d'imprimer une facture sans produit. ");
                        return;
                    }
                    else
                    {
                        PdfPTable tableau = new PdfPTable(7);
                        PdfPCell cellule = new PdfPCell(new Paragraph(" "));
                        cellule.Colspan = 7;
                        tableau.AddCell(cellule);
                     
                        PdfPTable tableau2 = new PdfPTable(7);
                        PdfPCell cellule2 = new PdfPCell(new Paragraph("Facture "));
                        cellule2.Colspan = 7;
                        tableau2.AddCell(cellule2);
                        tableau2.AddCell("Reference ");
                        tableau2.AddCell("Nom ");
                        tableau2.AddCell("PrixHtva ");
                        tableau2.AddCell("Tva");
                        tableau2.AddCell("PrixTvaC ");
                        tableau2.AddCell("Quantité");
                        tableau2.AddCell("Prix Total ");
                        doc.Add(tableau2);
                        int k = 1;
                        for (j = 0; j <= dataGridViewFact.RowCount; j++)
                        {
                            //Insertion du tableau dans le Pdf
                            string[] tabR = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tabN = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tabH = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tabT = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tabC = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tabQ = new string[Convert.ToInt32(dataGridViewFact.RowCount)];
                            string[] tab = new string[Convert.ToInt32(dataGridViewFact.RowCount)]; 
    
                            tabR[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["Reference"].Value);
                            tabN[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["Nom"].Value);
                            tabH[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["PrixHTVA"].Value);
                            tabT[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["Tva"].Value);
                            tabC[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["PrixTvaC"].Value);
                            tabQ[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["Qte"].Value);
                            tab[j] = Convert.ToString(dataGridViewFact.Rows[j].Cells["PrixTotale"].Value);
                       
                            tableau.AddCell(tabR[j]);
                            tableau.AddCell(tabN[j]);
                            tableau.AddCell(tabH[j]);
                            tableau.AddCell(tabT[j]);
                            tableau.AddCell(tabC[j]);
                            tableau.AddCell(tabQ[j]);
                            tableau.AddCell(tab[j]);
    
                            k++;
                            
                            if (k == dataGridViewFact.RowCount)
                            {
                                doc.Add(tableau);
                            }
                            
                        }
    
                    }
    
                    nbFact += 1;
                    fact += 1;
                }
    
    
                catch (DocumentException dex)
                {
                    MessageBox.Show("Erreur DocumentException : \n " + dex ,"Erreur Lors de L'enregistrement de la facture",  MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation,
                    MessageBoxDefaultButton.Button1);
                }
    
                finally
                {
                    doc.Open(); //Open document
                }
    
           }

    jeudi 14 juin 2012 18:02

Réponses

  • Bonjour,

    Le problème vient de la ligne suivante :

    for (j = 0; j <= dataGridViewFact.RowCount; j++)

    Remplacer là par :

    for (j = 0; j < dataGridViewFact.RowCount; j++)

    En .NET, les indexe d'une collocation vont toujours de 0 à (sa taille -1).

    Pour rester cohérent initialise votre variable k à 0 :

    int k = 0;

    Cordialement.

    vendredi 15 juin 2012 07:37
    Auteur de réponse
  • J'ai trouvé d'ou venais ma dernière erreur...

    Je fermais mal mon pdf après sa création effectivement je fessais 

        finally
                {
                    doc.Open(); //Open document
                }
    ALors que je devais faire ...
        finally
                {
                    doc.Close(); //Open document
                }
    Merci encore de votre aide ...

    • Marqué comme réponse SarahChou mardi 19 juin 2012 10:14
    mardi 19 juin 2012 10:13

Toutes les réponses

  • Bonjour,

    Le problème vient de la ligne suivante :

    for (j = 0; j <= dataGridViewFact.RowCount; j++)

    Remplacer là par :

    for (j = 0; j < dataGridViewFact.RowCount; j++)

    En .NET, les indexe d'une collocation vont toujours de 0 à (sa taille -1).

    Pour rester cohérent initialise votre variable k à 0 :

    int k = 0;

    Cordialement.

    vendredi 15 juin 2012 07:37
    Auteur de réponse
  • Bonjour,

    Et d'une façon générale cette erreur indique un index de tableau en dehors des limites donc si ce message survient, regarder la ligne concernée et vérifier les index dans le debugger ce qui devrait permettre de corriger l'erreur par vous-même.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 15 juin 2012 07:53
    Modérateur
  • Bonjour, 

    Merci de vos réponse et effectivement ça va bcp mieux avec cette nouvelle instruction. 

    Malheureusement j'ai encore un gros problème je n'arrive pas à ouvrir le document créer quand je veux l'ouvrir on me dit que le pdf est endommagé ...

    Je suis perdue j'avoue car je ne sait pas comment reglé ce problème si c'est du a un problème de programmation ou autre ...

    Merci encore et bonne journée 

    lundi 18 juin 2012 12:40
  • J'ai trouvé d'ou venais ma dernière erreur...

    Je fermais mal mon pdf après sa création effectivement je fessais 

        finally
                {
                    doc.Open(); //Open document
                }
    ALors que je devais faire ...
        finally
                {
                    doc.Close(); //Open document
                }
    Merci encore de votre aide ...

    • Marqué comme réponse SarahChou mardi 19 juin 2012 10:14
    mardi 19 juin 2012 10:13