2016-09-20 28 views
-1

iTextSharpでpdfファイルを作成しようとしています。最初にpdfが作成されたのですが、プログラムで削除された場合、または上書きされた場合、次の例外が発生します。pdf上書きの例外C#(iTextSharp)

'/'アプリケーションでサーバーエラーが発生しました。
プロセスは、別のプロセスで使用されているため、 'C:\ Users \ g.michailou \ Desktop \ InfocomFinal \ barcodes \ 9880892102.pdf'というファイルにアクセスできません。ここでは、文書開いたままに、なぜ私にはわからない

the second time when i run code

が...私のサンプルコードは

private void CreatePdf(string first, string last, string value) 
{ 
    using (MemoryStream myMemoryStream = new MemoryStream()) 
    { 
     Document document = new Document(PageSize.A4, 100, 100, 100, 100); 
     PdfWriter myPDFWriter = PdfWriter.GetInstance(document, myMemoryStream); 

     document.Open(); 

     BaseFont MyFont = iTextSharp.text.pdf.BaseFont.CreateFont("C:\\Windows\\Fonts\\Arial.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED); 

     var titleFont = new iTextSharp.text.Font(MyFont, 16, iTextSharp.text.Font.BOLD); 
     var subTitleFont = new iTextSharp.text.Font(MyFont, 22, iTextSharp.text.Font.NORMAL); 
     var subTitleFont2 = new iTextSharp.text.Font(MyFont, 16, iTextSharp.text.Font.NORMAL); 
     var boldTableFont = new iTextSharp.text.Font(MyFont, 12, iTextSharp.text.Font.NORMAL); 
     var endingMessageFont = new iTextSharp.text.Font(MyFont, 10, iTextSharp.text.Font.ITALIC); 
     var bodyFont = new iTextSharp.text.Font(MyFont, 12, iTextSharp.text.Font.NORMAL); 

     var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/" + currentEvent + ".jpg")); 
     logo.ScaleToFit(395, 160); 

     document.Add(logo); 

     Helpers.GetEventInformation(currentEvent); 


     Paragraph name = new Paragraph(first, subTitleFont); 
     name.Alignment = 1; 
     name.SpacingBefore = 20; 
     document.Add(name); 

     Paragraph surname = new Paragraph(last, subTitleFont); 
     surname.Alignment = 1; 
     document.Add(surname); 


     Paragraph info1 = new Paragraph("Επιβεβαίωση Εγγραφής στο", subTitleFont2); 
     info1.Alignment = 1; 
     info1.SpacingBefore = 25; 
     document.Add(info1); 

     Paragraph info2 = new Paragraph(Helpers.confinfo, subTitleFont2); 
     info2.Alignment = 1; 
     document.Add(info2); 

     Paragraph info3 = new Paragraph(Helpers.maildate, titleFont); 
     info3.Alignment = 1; 
     info3.SpacingBefore = 25; 
     document.Add(info3); 

     Paragraph info4 = new Paragraph(Helpers.mailtime, subTitleFont2); 
     info4.Alignment = 1; 
     document.Add(info4); 


     document.Add(Chunk.NEWLINE); 
     document.Add(Chunk.NEWLINE); 

     var barcodeImage = iTextSharp.text.Image.GetInstance(Server.MapPath("~/barcodes/" + value + ".png")); 
     barcodeImage.Alignment = iTextSharp.text.Image.ALIGN_CENTER; 
     barcodeImage.SpacingBefore = 25; 
     document.Add(barcodeImage); 

     Paragraph barcodev = new Paragraph(value, endingMessageFont); 
     barcodev.SpacingBefore = -5; 
     barcodev.Alignment = 1; 
     document.Add(barcodev); 

     document.Add(Chunk.NEWLINE); 
     document.Add(Chunk.NEWLINE); 

     var logo2 = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/footer.jpg")); 
     logo2.SpacingBefore = 30; 
     logo2.ScaleToFit(395, 130); 
     document.Add(logo2); 


     document.Close(); 

     byte[] content = myMemoryStream.ToArray(); 

     pdfPath = Server.MapPath("~/barcodes/" + value + ".pdf"); 
     using (FileStream fs = System.IO.File.Create(pdfPath)) 
     { 
      fs.Write(content, 0, (int)content.Length); 
     } 
    } 
} 
+0

万が一、Acrobatや他のpdfリーダーで開いていないのですか? –

+0

@SamuelHuylebroeckいいえ私は –

+1

まず、iTextSharpはあなたがあなたがあなたがPDF **メモリ**を作成するためにそれを使用するので、問題に完全に無関係です。 PDF形式であってもそれ自体は問題ではありません。 'byte [] content 'は他の方法で簡単に作成でき、あらゆる種類のバイトを含むことができます。したがって、タグ[tag:pdf]と[tag:itextsharp]を削除し、それらをSystem.IO.FileとWebサービスの使用に関連するタグで置き換える必要があります。 – mkl

答えて

0

ある多分あなたは私が見つけた

+0

私は、myPDFWriter.Close()を追加します。 before document.Open();しかし、私は同じ例外を取得します。 –

+0

これをdocument.Close()の後に追加するだけです。 – Josep

+0

'document.Close()'は、特に 'PdfWriter'の' Close'メソッドを呼び出します。 – mkl

0

を "myPDFWriter" を閉じる必要がありますソリューション。 私の次のメソッドは、pdfが添付された電子メールを送信しますが、問題は添付中にpdfファイルが開いたままだったことです。

私はこれを追加しました:

using (System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(HttpContext.Current.Server.MapPath(bytes))) 
      { 
       mm.Attachments.Add(data); 
       ... 
      } 

、今それが働いているが。

関連する問題