2016-10-21 8 views
0

私のプログラムのこのセクションは、テキストボックスに表示されている私のプログラムの前の部分の読み上げと、このデータの.pdfファイルの作成を担当しています。もともと、これはうまくいきました。しかし、未知の理由により、壊れた.pdfファイルを作成し始めました。ここでiTextSharpは壊れたPDFファイルを作成しています。C#

は私のプログラムのセクションです:

private void SaveToPDF_Click(object sender, EventArgs e) 
    { 

     SaveFileDialog SavePDFDialog = new SaveFileDialog(); 
     Stream MyStream; 
     SavePDFDialog.Filter = "PDF File (*.pdf)|*.pdf|All Files(*.*)|*.*"; 
     SavePDFDialog.FilterIndex = 1; 
     SavePDFDialog.RestoreDirectory = true; 
     SavePDFDialog.FileName = ("Report"); 


      if (SavePDFDialog.ShowDialog() == DialogResult.OK) 
      { 
       if ((MyStream = SavePDFDialog.OpenFile()) != null) 
       { 

        try 
        { 
         Document document = new Document(); 
         PdfWriter.GetInstance(document, new FileStream(PDFDirectory, FileMode.Create)); 
         document.Open(); 
         //Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLocalTime()); 
         Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToLocalTime()); 
         Paragraph p1 = new Paragraph("The Top Scoring student is:" + TopStudentBox.Text); 
         Paragraph p2 = new Paragraph("The Question answer wrong the most is: " + MissedQuestionBox.Text); 
         document.Add(h); 
         document.Add(p1); 
         document.Add(p2); 
         document.Close(); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.ToString()); 
        } 
        MyStream.Close(); 
       } 
      } 
    } 

は、事前にありがとうございます。

私はそれはあなたが1つのストリームに書き込むためだと思う:

PdfWriter.GetInstance(document, new FileStream(PDFDirectory, FileMode.Create)); 

と別のを閉じる:

MyStream.Close(); 

私は、これは動作するはずと思いますが、あなたがかもしれMKLのコメント@盗む

+0

あなたはより多くの詳細を提供する必要があります。壊れたファイルはどういう意味ですか?生成されたすべてのファイルが壊れているのでしょうか?ちょっとでも、入力が壊れていないものとどのように比較されますか?上記のコードからpdf要素の一部を削除した場合は、それを削除して壊れていない要素を削除しますか? – user5226582

+0

これらの破損したファイルの1つを見るとよいでしょう。 –

+0

iTextSharpのターゲットファイルストリームは、 'new FileStream(PDFDirectory、FileMode.Create)'のように作成します。特に 'SavePDFDialog.OpenFile()'から取得した 'MyStream'は使用しません。 iTextSharpにあなたが書き込みたいストリームを与えないので、ファイルを適切に作成する機会はありません。 – mkl

答えて

1

いくつか変更する必要があります:

private void SaveToPDF_Click(object sender, EventArgs e) 
{ 

    SaveFileDialog SavePDFDialog = new SaveFileDialog(); 
    Stream MyStream; 
    SavePDFDialog.Filter = "PDF File (*.pdf)|*.pdf|All Files(*.*)|*.*"; 
    SavePDFDialog.FilterIndex = 1; 
    SavePDFDialog.RestoreDirectory = true; 
    SavePDFDialog.FileName = ("Report"); 


     if (SavePDFDialog.ShowDialog() == DialogResult.OK) 
     { 
      if ((MyStream = SavePDFDialog.OpenFile()) != null) 
      { 

       try 
       { 
        MyStream = new FileStream(PDFDirectory, FileMode.Create); 
        Document document = new Document(); 
        PdfWriter.GetInstance(document, MyStream); 
        document.Open(); 
        //Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLocalTime()); 
        Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToLocalTime()); 
        Paragraph p1 = new Paragraph("The Top Scoring student is:" + TopStudentBox.Text); 
        Paragraph p2 = new Paragraph("The Question answer wrong the most is: " + MissedQuestionBox.Text); 
        document.Add(h); 
        document.Add(p1); 
        document.Add(p2); 
        document.Close(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 
       MyStream.Close(); 
      } 
     } 
} 
+0

それはまだ0バイトのファイルを作成していると申し訳なく思っています。 – pcconfuser

0

私は削除することで、プログラムを修正したように見えた:私は今ので、私はPDFDirectory変数を必要としないので、教えてやる必要がありません、ユーザーが保存したディレクトリを選択せていますように私はこれを考え出し

MyStream = new FileStream(PDFDirectory, FileMode.Create); 

をプログラムはそこでファイルを作成します。 @mlkは、あなたがここでMyStreamを使用していないにも私について正しかったことは、固定コードです:

private void SaveToPDF_Click(object sender, EventArgs e) 

{

SaveFileDialog SavePDFDialog = new SaveFileDialog(); 
Stream MyStream; 
SavePDFDialog.Filter = "PDF File (*.pdf)|*.pdf|All Files(*.*)|*.*"; 
SavePDFDialog.FilterIndex = 1; 
SavePDFDialog.RestoreDirectory = true; 
SavePDFDialog.FileName = ("Report"); 


    if (SavePDFDialog.ShowDialog() == DialogResult.OK) 
    { 
     if ((MyStream = SavePDFDialog.OpenFile()) != null) 
     { 

      try 
      { 
       Document document = new Document(); 
       PdfWriter.GetInstance(document, MyStream); 
       document.Open(); 
       //Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLocalTime()); 
       Paragraph h = new Paragraph("Results from: " + DateTime.Now.ToLocalTime()); 
       Paragraph p1 = new Paragraph("The Top Scoring student is:" + TopStudentBox.Text); 
       Paragraph p2 = new Paragraph("The Question answer wrong the most is: " + MissedQuestionBox.Text); 
       document.Add(h); 
       document.Add(p1); 
       document.Add(p2); 
       document.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
      MyStream.Close(); 
     } 
    } 

}

関連する問題